1. 程式人生 > 程式設計 >使用 Python 清理收藏夾裡已失效的網站

使用 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="(.*?)" rel="external nofollow" .*?>(.*?)</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:
= 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 : #沒匹配到是結構語句
new_lists.append(bookmark)

程式執行情況

匯出htm

bookmarks_f = open ( 'new_' +fname,"w+",encoding= 'UTF-8' )
bookmarks_f.writelines(new_lists)
bookmarks_f.
close
()

匯入瀏覽器

實際應用於我的瀏覽器

確實有很多電影網都失效了,通過Python能夠一鍵清理其中無法訪問的書籤。人生苦短,P ython 的確可以讓生活更高效~

總結

以上所述是小編給大家介紹的使用 Python 清理收藏夾裡已失效的網站,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!
如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!