使用 Python 清理收藏夾里已失效的網(wǎng)站
失效的書簽們
我們?nèi)粘g覽網(wǎng)站的時(shí)候,時(shí)不時(shí)會(huì)遇到些新奇的東西( 你懂的.jpg ),于是我們就默默的點(diǎn)了個(gè)收藏或者加書簽。然而當(dāng)我們面對成百上千的書簽和收藏夾的時(shí)候,總會(huì)頭疼不已……
尤其是昨天還在更新的程序設(shè)計(jì)博客,今天就掛了永不更新?;蛘呤亲蛱炜吹钠饎诺碾娪熬W(wǎng)站,今天直接404。失效頁面這么多,每次我打開才知道失效了,并且需要手動(dòng)刪除,這能是一個(gè)程序員干的事情嗎?
可是無論是Google瀏覽器還是國內(nèi)瀏覽器,最多也就提供一個(gè)對于收藏夾的備份服務(wù),那只能Python走起了。
Python支持的收藏夾文件格式
對于收藏夾提供的支持很少,主要還是因?yàn)槭詹貖A藏在瀏覽器里面,我們只能手動(dòng)導(dǎo)出htm文件進(jìn)行管理
內(nèi)容比較簡單,對前端沒什么了解的我,也可以很明顯看出其中的樹形結(jié)構(gòu)和內(nèi)在邏輯。
固定格式 網(wǎng)址 固定格式 頁面名 固定格式
很簡單的想到了正則匹配,其中有兩個(gè)子串。 提取出來再挨個(gè)訪問,看看哪個(gè)失效了,就刪除,就能獲得清理后的收藏夾了。
讀取收藏夾文件
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()
因?yàn)閷τ谇岸说牟皇煜?,這個(gè)導(dǎo)出的收藏夾可以抽象的分成
- 結(jié)構(gòu)代碼
- 保存網(wǎng)頁書簽的關(guān)鍵代碼
其中結(jié)構(gòu)代碼我們不能動(dòng),要原封不動(dòng)的保留,而保存網(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)會(huì)有這四種情況
r.status_code == requests.codes.ok r.status_code==404 r.status_code!=404 && 無法訪問 (可能是屏蔽爬蟲,建議保留) requests.exceptions.ConnectionError
類似知乎、簡書基本都反爬了,所以簡單的get還不能有效訪問,細(xì)節(jié)不值得大費(fèi)周章,直接保留就好。 而error,直接用try拋出異常就好,不然程序會(huì)停止運(yùn)行。
添加邏輯后: (代碼可左右拖動(dòng))
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 ) + '錯(cuò)誤碼 ' +str(r.status_code)) else : print( "其他原因 保留:" + detail. group ( 1 )+ " " + detail. group ( 2 ) + '錯(cuò)誤碼 ' +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)入瀏覽器
實(shí)際應(yīng)用于我的瀏覽器
確實(shí)有很多電影網(wǎng)都失效了,通過Python能夠一鍵清理其中無法訪問的書簽。人生苦短,P ython 的確可以讓生活更高效~
總結(jié)
以上所述是小編給大家介紹的使用 Python 清理收藏夾里已失效的網(wǎng)站,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
利用ImageAI庫只需幾行python代碼實(shí)現(xiàn)目標(biāo)檢測
這篇文章主要介紹了利用ImageAI庫只需幾行python代碼超簡實(shí)現(xiàn)目標(biāo)檢測功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08python讀取與處理netcdf數(shù)據(jù)方式
今天小編就為大家分享一篇python讀取與處理netcdf數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02Python3.5 Json與pickle實(shí)現(xiàn)數(shù)據(jù)序列化與反序列化操作示例
這篇文章主要介紹了Python3.5 Json與pickle實(shí)現(xiàn)數(shù)據(jù)序列化與反序列化操作,結(jié)合實(shí)例形式分析了Python3.5使用Json與pickle模塊實(shí)現(xiàn)json格式數(shù)據(jù)的序列化及反序列化操作相關(guān)步驟與注意事項(xiàng),需要的朋友可以參考下2019-04-04深入講解Python函數(shù)中參數(shù)的使用及默認(rèn)參數(shù)的陷阱
這篇文章主要介紹了Python函數(shù)中參數(shù)的使用及默認(rèn)參數(shù)的陷阱,文中將函數(shù)的參數(shù)分為必選參數(shù)、默認(rèn)參數(shù)、可變參數(shù)和關(guān)鍵字參數(shù)來講,要的朋友可以參考下2016-03-03JavaScript中的模擬事件和自定義事件實(shí)例分析
這篇文章主要介紹了JavaScript中的模擬事件和自定義事件,結(jié)合實(shí)例形式分析了JavaScript模擬事件和自定義事件相關(guān)操作步驟、實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2018-07-07Python 找出出現(xiàn)次數(shù)超過數(shù)組長度一半的元素實(shí)例
這篇文章主要介紹了Python 找出出現(xiàn)次數(shù)超過數(shù)組長度一半的元素實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05