溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Python清理收藏夾里已失效的網(wǎng)站

發(fā)布時間:2021-09-09 15:57:14 來源:億速云 閱讀:145 作者:chen 欄目:編程語言

這篇文章主要介紹“怎么用Python清理收藏夾里已失效的網(wǎng)站”,在日常操作中,相信很多人在怎么用Python清理收藏夾里已失效的網(wǎng)站問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Python清理收藏夾里已失效的網(wǎng)站”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

最近打開好多以前收藏的網(wǎng)站,發(fā)現(xiàn)好多都已經(jīng)失效了,好多以前想看還沒來得及看的內(nèi)容,也找不見了。。。

失效的書簽們

我們?nèi)粘g覽網(wǎng)站的時候,時不時會遇到些新奇的東西,于是我們就默默的點了個收藏或者加書簽。然而當我們面對成百上千的書簽和收藏夾的時候,總會頭疼不已……

怎么用Python清理收藏夾里已失效的網(wǎng)站

尤其是昨天還在更新的程序設計博客,今天就掛了永不更新?;蛘呤亲蛱炜吹钠饎诺碾娪熬W(wǎng)站,今天直接404。失效頁面這么多,每次我打開才知道失效了,并且需要手動刪除,這能是一個程序員干的事情嗎?

可是無論是Google瀏覽器還是國內(nèi)瀏覽器,最多也就提供一個對于收藏夾的備份服務,那只能Python走起了。

怎么用Python清理收藏夾里已失效的網(wǎng)站

Python支持的收藏夾文件格式

對于收藏夾提供的支持很少,主要還是因為收藏夾藏在瀏覽器里面,我們只能手動導出htm文件進行管理

怎么用Python清理收藏夾里已失效的網(wǎng)站

怎么用Python清理收藏夾里已失效的網(wǎng)站

怎么用Python清理收藏夾里已失效的網(wǎng)站

怎么用Python清理收藏夾里已失效的網(wǎng)站

內(nèi)容比較簡單,對前端沒什么了解的我,也可以很明顯看出其中的樹形結(jié)構和內(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()

因為對于前端的不熟悉,這個導出的收藏夾可以抽象的分成

  • 結(jié)構代碼

  • 保存網(wǎng)頁書簽的關鍵代碼

其中結(jié)構代碼我們不能動,要原封不動的保留,而保存網(wǎng)頁書簽的關鍵代碼,我們要提取內(nèi)容并且進行判斷保留和刪除。

所以這里采用readlines函數(shù),每行讀取,單獨判斷。

正則匹配

pattern = r'HREF="(.*?)" .*?>(.*?)</A>'
while len(booklists)>0:
 bookmark = booklists.pop(0)
 detail = re.search(pattern, bookmark)

如果是關鍵代碼:提取出的子串在 detail.group(1) 和 detail.group(2) 里面

而如果是結(jié)構代碼: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還不能有效訪問,細節(jié)不值得大費周章,直接保留就好。而error,直接用try拋出異常就好,不然程序會停止運行。

添加邏輯后:(代碼可左右拖動)

while len(booklists)>0:
 bookmark = 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é)構語句
 new_lists.append(bookmark)

程序執(zhí)行情況

怎么用Python清理收藏夾里已失效的網(wǎng)站

導出htm

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

導入瀏覽器

怎么用Python清理收藏夾里已失效的網(wǎng)站

實際應用于我的瀏覽器

怎么用Python清理收藏夾里已失效的網(wǎng)站

到此,關于“怎么用Python清理收藏夾里已失效的網(wǎng)站”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI