骚操作!曾经爱过!用 Python 清理收藏夹里已失效的网站
失效的書簽們
我們日常瀏覽網站的時候,時不時會遇到些新奇的東西( 你懂的.jpg ),于是我們就默默的點了個收藏或者加書簽。然而當我們面對成百上千的書簽和收藏夾的時候,總會頭疼不已……
尤其是昨天還在更新的程序設計博客,今天就掛了永不更新。或者是昨天看的起勁的電影網站,今天直接404。失效頁面這么多,每次我打開才知道失效了,并且需要手動刪除,這能是一個程序員干的事情嗎?
可是無論是Google瀏覽器還是國內瀏覽器,最多也就提供一個對于收藏夾的備份服務,那只能Python走起了。
Python支持的收藏夾文件格式
對于收藏夾提供的支持很少,主要還是因為收藏夾藏在瀏覽器里面,我們只能手動導出htm文件進行管理
內容比較簡單,對前端沒什么了解的我,也可以很明顯看出其中的樹形結構和內在邏輯。
固定格式 網址 固定格式 頁面名 固定格式
很簡單的想到了正則匹配,其中有兩個子串。提取出來再挨個訪問,看看哪個失效了,就刪除,就能獲得清理后的收藏夾了。
讀取收藏夾文件
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()
因為對于前端的不熟悉,這個導出的收藏夾可以抽象的分成
結構代碼
保存網頁書簽的關鍵代碼
其中結構代碼我們不能動,要原封不動的保留,而保存網頁書簽的關鍵代碼,我們要提取內容并且進行判斷保留和刪除。
所以這里采用readlines函數,每行讀取,單獨判斷。
正則匹配
pattern?=?r'HREF="(.*?)"?.*?>(.*?)</A>'
while?len(booklists)>0:
????bookmark?=?booklists.pop(0)
????detail?=?re.search(pattern,?bookmark)
如果是關鍵代碼:提取出的子串在 detail.group(1) 和 detail.group(2) 里面
而如果是結構代碼:detail == None
訪問頁面
import?requests
r?=?requests.get(detail.group(1),timeout=500)
編代碼嘗試之后發現會有這四種情況
r.status_code == requests.codes.ok
r.status_code==404
r.status_code!=404 && 無法訪問 (可能是屏蔽爬蟲,建議保留)
requests.exceptions.ConnectionError
類似知乎、簡書基本都反爬了,所以簡單的get還不能有效訪問,細節不值得大費周章,直接保留就好。而error,直接用try拋出異常就好,不然程序會停止運行。
添加邏輯后:(代碼可左右拖動)
while?len(booklists)>0:
????bookmark?=?booklists.pop(0)
????detail?=?re.search(pattern,?bookmark)
????if?detail:
????????
????????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))
????????????
????else:
????????new_lists.append(bookmark)
程序執行情況
導出htm
bookmarks_f?=?open('new_'+fname,?"w+"?,encoding='UTF-8')
bookmarks_f.writelines(new_lists)
bookmarks_f.close()
導入瀏覽器
實際應用于我的瀏覽器
確實有很多電影網都失效了,通過Python能夠一鍵清理其中無法訪問的書簽。人生苦短,Python 的確可以讓生活更高效~
最后本文完整代碼已上傳分享,可以在公眾號「小詹學Python」后臺回復關鍵詞「20190908」獲取。
推薦閱讀:(點擊下方標題即可跳轉)
騷操作 !用 Python 偷偷抓取女朋友的行蹤
我在 GitHub 上看到了一個喪心病狂的開源項目!
騷操作 !用 Python 自動下載抖音美麗小姐姐
??長按 2 秒關注「 小詹學Python 」
總結
以上是生活随笔為你收集整理的骚操作!曾经爱过!用 Python 清理收藏夹里已失效的网站的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大家都在看的公众号是哪几个?
- 下一篇: 抢票神器成GitHub热榜第一,支持候补