您好,登錄后才能下訂單哦!
失效的書簽們
我們?nèi)粘g覽網(wǎng)站的時候,時不時會遇到些新奇的東西( 你懂的.jpg ),于是我們就默默的點(diǎn)了個收藏或者加書簽。然而當(dāng)我們面對成百上千的書簽和收藏夾的時候,總會頭疼不已……
尤其是昨天還在更新的程序設(shè)計博客,今天就掛了永不更新?;蛘呤亲蛱炜吹钠饎诺碾娪熬W(wǎng)站,今天直接404。失效頁面這么多,每次我打開才知道失效了,并且需要手動刪除,這能是一個程序員干的事情嗎?
可是無論是Google瀏覽器還是國內(nèi)瀏覽器,最多也就提供一個對于收藏夾的備份服務(wù),那只能Python走起了。
Python支持的收藏夾文件格式
對于收藏夾提供的支持很少,主要還是因為收藏夾藏在瀏覽器里面,我們只能手動導(dǎo)出htm文件進(jìn)行管理
內(nèi)容比較簡單,對前端沒什么了解的我,也可以很明顯看出其中的樹形結(jié)構(gòu)和內(nèi)在邏輯。
固定格式 網(wǎng)址 固定格式 頁面名 固定格式
很簡單的想到了正則匹配,其中有兩個子串。 提取出來再挨個訪問,看看哪個失效了,就刪除,就能獲得清理后的收藏夾了。
讀取收藏夾文件
path = "C:\\Users\\XU\\Desktop" fname = "bookmarks.html" os.chdir(path) bookmarks_f = open(fname, "r+" ,encoding='UTF-8') booklists = bookmarks_f.readlines() bookmarks_f.close()
因為對于前端的不熟悉,這個導(dǎo)出的收藏夾可以抽象的分成
其中結(jié)構(gòu)代碼我們不能動,要原封不動的保留,而保存網(wǎng)頁書簽的關(guān)鍵代碼,我們要提取內(nèi)容并且進(jìn)行判斷保留和刪除。
所以這里采用readlines函數(shù),每行讀取,單獨(dú)判斷。
正則匹配
pattern = r'href="(.*?)" rel="external nofollow" .*?>(.*?)</A>' while len(booklists)> 0 : bookmark = booklists.pop( 0 ) detail = re.search(pattern, bookmark)
如果是關(guān)鍵代碼:提取出的子串在 detail.group(1) 和 detail.group(2) 里面
而如果是結(jié)構(gòu)代碼:detail == None
訪問頁面
import requests r = requests. get (detail. group ( 1 ),timeout= 500 )
編代碼嘗試之后發(fā)現(xiàn)會有這四種情況
r.status_code == requests.codes.ok r.status_code==404 r.status_code!=404 && 無法訪問 (可能是屏蔽爬蟲,建議保留) requests.exceptions.ConnectionError
類似知乎、簡書基本都反爬了,所以簡單的get還不能有效訪問,細(xì)節(jié)不值得大費(fèi)周章,直接保留就好。 而error,直接用try拋出異常就好,不然程序會停止運(yùn)行。
添加邏輯后: (代碼可左右拖動)
while len ( booklists )>0: = booklists.pop( 0 ) detail = re.search(pattern, bookmark) if detail: #print(detail.group(1) +"----"+ detail.group(2)) try : #訪問 r = requests. get (detail. group ( 1 ),timeout= 500 ) #如果可則添加 if r.status_code == requests.codes.ok: new_lists.append(bookmark) print( "ok------ 保留:" + detail. group ( 1 )+ " " + detail. group ( 2 )) else : if (r.status_code== 404 ): print( "不可訪問 刪除:" + detail. group ( 1 )+ " " + detail. group ( 2 ) + '錯誤碼 ' +str(r.status_code)) else : print( "其他原因 保留:" + detail. group ( 1 )+ " " + detail. group ( 2 ) + '錯誤碼 ' +str(r.status_code)) new_lists.append(bookmark) except: print( "不可訪問 刪除:" + detail. group ( 1 )+ " " + detail. group ( 2 )) #new_lists.append(bookmark) else : #沒匹配到是結(jié)構(gòu)語句 new_lists.append(bookmark)
程序執(zhí)行情況
導(dǎo)出htm
bookmarks_f = open ( 'new_' +fname, "w+" ,encoding= 'UTF-8' ) bookmarks_f.writelines(new_lists) bookmarks_f. close ()
導(dǎo)入瀏覽器
實際應(yīng)用于我的瀏覽器
確實有很多電影網(wǎng)都失效了,通過Python能夠一鍵清理其中無法訪問的書簽。人生苦短,P ython 的確可以讓生活更高效~
總結(jié)
以上所述是小編給大家介紹的使用 Python 清理收藏夾里已失效的網(wǎng)站,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對億速云網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。