幾行代碼,網(wǎng)盤鏈接提頭來見!

文 | 閑歡
來源:Python 技術(shù)「ID: pythonall」

背景
晚上,女朋友下班回來,我邀請(qǐng)她下樓去散步,她一副愁眉苦臉的樣子,說今晚要加班。
仔細(xì)詢問之下得知:女朋友今天接到上司一個(gè)任務(wù),領(lǐng)導(dǎo)丟給她一個(gè)文件,里面密密麻麻滿是百度網(wǎng)盤鏈接和提取碼,需要她今天結(jié)束之前把網(wǎng)盤里的文件提取出來。
聽到她說要熬夜肝工作那種委屈的模樣,我是真的有點(diǎn)心疼。于是本能地問她,現(xiàn)在工作中最影響效率的是哪個(gè)環(huán)節(jié),我來幫她一起肝。她告訴我,看這個(gè)百度網(wǎng)盤的鏈接看得眼都花了,要復(fù)制鏈接,以及復(fù)制提取碼是個(gè)技術(shù)活,因?yàn)橛衅渌淖指蓴_,經(jīng)常復(fù)制不準(zhǔn)。
鏈接類似下面這樣的:
鏈接: https://pan.baidu.com/s/1ctcXiZymWst2NC_JPDkr4Q 提取碼: j1ub 復(fù)制這段內(nèi)容后打開百度網(wǎng)盤手機(jī)App,操作更方便哦
想必大家看到這個(gè)鏈接,都不會(huì)陌生。不止百度網(wǎng)盤,還有好多網(wǎng)盤都是這樣的。
既然這樣,那我當(dāng)然要幫她解決這個(gè)棘手的問題。
思路
其實(shí)她的需求很簡(jiǎn)單,把網(wǎng)盤鏈接和對(duì)應(yīng)提取碼從這個(gè)分享文字中提取出來。
大家還記得咱們前段時(shí)間給大家分享了正則表達(dá)式的文章吧?忘記了就回頭看看這兩篇文章:懵了!女友突然問我什么是正則表達(dá)式
解決這個(gè)需求只需要用正則表達(dá)式匹配分享文字中的 URL 和提取碼就行了。
實(shí)現(xiàn)解析
代碼很簡(jiǎn)單,直接上:
url_pattern = 'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+'
code_pattern = '(?<=提取碼: )[0-9a-z]{4}'
url_regex = re.compile(url_pattern)
code_regex = re.compile(code_pattern)
接下來,測(cè)試一下:
str = '鏈接: https://pan.baidu.com/s/1ctcXiZymWst2NC_JPDkr4Q 提取碼: j1ub 復(fù)制這段內(nèi)容后打開百度網(wǎng)盤手機(jī)App,操作更方便哦'
print(url_regex.findall(str)[0])
print(code_regex.findall(str)[0])
可以在控制臺(tái)上看到打印輸出兩行,第一行是鏈接,第二行是提取碼:
https://pan.baidu.com/s/1ctcXiZymWst2NC_JPDkr4Q j1ub
幾行代碼一敲,事情就這么搞定了!
等等,這太程序員思維了!
現(xiàn)在還只是個(gè)程序,難道要她把一段段文字復(fù)制到我的程序里面再運(yùn)行?這不是更麻煩嗎???

當(dāng)然不行,我還是有點(diǎn)產(chǎn)品素養(yǎng)的!
當(dāng)然要給個(gè)界面給她。我搜索了下我的知識(shí)庫,準(zhǔn)備用 tkinter 來畫一個(gè)簡(jiǎn)單的界面給她使用。
其實(shí)現(xiàn)如下:
def draw_window(self):
self.init_window = Tk() # 實(shí)例化出一個(gè)父窗口
self.init_window.title("百度網(wǎng)盤提取鏈接工具_(dá)v1.0") # 窗口名
self.init_window.geometry('800x300+10+10')
# 源信息
self.init_data_label = Label(self.init_window, text="復(fù)制的提取信息")
self.init_data_label.grid(row=0, column=0)
self.init_data_text = Text(self.init_window, width=100, height=5, borderwidth=1, relief="solid") # 原始數(shù)據(jù)錄入框
self.init_data_text.grid(row=1, column=0, columnspan=10)
# 按鈕
self.str_trans_button = Button(self.init_window, text="提取", width=10, height=2, bg="blue",
command=self.extractData) # 調(diào)用內(nèi)部方法 加()為直接調(diào)用
self.str_trans_button.grid(row=2, column=2)
# 鏈接
self.link_data_label = Label(self.init_window, width=10, text="鏈接")
self.link_data_label.grid(row=3, column=0, columnspan=1)
self.link_data_text = Text(self.init_window, width=60, height=2, borderwidth=1, relief="solid")
self.link_data_text.grid(row=3, column=1, columnspan=6)
# 提取碼
self.code_data_label = Label(self.init_window, width=10, text="提取碼")
self.code_data_label.grid(row=3, column=7, columnspan=1)
self.code_data_text = Text(self.init_window, width=20, height=2, borderwidth=1, relief="solid")
self.code_data_text.grid(row=3, column=8, columnspan=2)
上面就是畫一個(gè)界面的代碼,運(yùn)行之后長(zhǎng)這樣:

丑是丑了點(diǎn),但是時(shí)間緊,任務(wù)重,先用起來再說。
和解析代碼合體之后,正常的運(yùn)行情況應(yīng)該是這樣的:

當(dāng)然,還可以進(jìn)一步改造,比如獲取到網(wǎng)盤鏈接和提取碼之后,直接使用 selenium 來自動(dòng)控制瀏覽器打開相應(yīng)的百度網(wǎng)盤頁面,女朋友直接在頁面選擇文件點(diǎn)擊下載即可。
但是今晚時(shí)間不夠了,先讓她用著。
總結(jié)
處理一個(gè)簡(jiǎn)單的需求,咱們就用到了正則、畫界面,還可以使用瀏覽器模擬操作的 selenium ,可見平時(shí)的知識(shí)積累多重要。小伙伴們平時(shí)還是要有意識(shí)積累一些實(shí)用的技術(shù),當(dāng)需求來時(shí)方可信手拈來,而不是“書到用時(shí)方恨少”!
PS:公號(hào)內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起 100 天計(jì)劃!
老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點(diǎn)一下,如果感覺文章內(nèi)容不錯(cuò)的話,記得分享朋友圈讓更多的人知道!


【代碼獲取方式】
