使用 Python 清理收藏夹里已失效的网站
作者:Python开源平台 发布时间:2023-01-11 01:26:00
失效的书签们
我们日常浏览网站的时候,时不时会遇到些新奇的东西( 你懂的.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 清理收藏夹里已失效的网站网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://mp.weixin.qq.com/s?__biz=MzU0NzkwMTQyMg==&mid=2247484875&idx=7&sn=371e88bf37e2791e1eacb800d8801a85&utm_source=tuicool&utm_medium=referral


猜你喜欢
- 举一个例子,我现在有一些新闻信息,它包括这些字段;新闻ID,新闻Name,新闻ShortIntro,新闻Detail,新闻PublishTi
- 1. echo函数:输出函数,是命令,不能返回值。echo后面可以跟很多个参数,之间用分号隔开,如: echo $myvar1; echo
- 第一版,能实现,但最后发现文件的顺序改变了:import osdef reename(): nm=1 pathh="/home/h
- 本文记录了mysql 8.0.14 安装配置的过程,供大家参考,具体内容如下1.下载地址:下载地址找到zip压缩文件.2.配置环境变量把解压
- 你不可能随时备份数据,但你的数据丢失时,或者数据库目录中的文件损坏时, 你只能恢复已经备份的文件,而在这之后的插入或更新的数据,就无能为力了
- 今年年初,新一季的《最强大脑》开播了,第一集选拔的时候大家做了一个数字游戏,名叫《数字华容道》,当时何猷君以二十几秒的成绩夺得该项目的冠军,
- 1.VsCode官方插件地址:https://marketplace.visualstudio.com/vscodehttp://code.
- 本文实例为大家分享了FormData上传多个文件的具体代码,供大家参考,具体内容如下由于项目中使用到,特此写个Demohtml代码:<
- collections是实现了特定目标的容器,以提供Python标准内建容器 dict , list , set , 和 tuple 的替代
- 本文实例讲述了Python实现比较两个文件夹中代码变化的方法。分享给大家供大家参考。具体如下:这里将修改代码后的目录与原始目录做对比,罗列出
- PHP中的MYSQL常用函数1、mysql_connect()-建立数据库连接格式:resource mysql_connect([stri
- 导言GridView是由一组字段(Field)组成的,它们都指定的了来自DataSource中的什么属性需要用到自己的输出呈现中。最简单的字
- 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致
- 什么是 YARPYARP (另一个反向代理) 设计为一个库,提供核心代理功能,你可以根据应用程序的特定需求进行自定义。YARP 是使用 .N
- from keras.utils.np_utils import to_categorical注意:当使用categorical_cross
- 介绍:今天在使用django的时候忽然想用到,如何匹配多个关键字的操作,我们知道django有一个objects.filter()方法,我们
- 如图,今天跑代码的事后遇到的问题,pycharm导入我自己写的各种函数.py文件时有红色标注,显示“no moudle balabala…”
- 前言:我们知道,python代码文件大多数都是py类型。那么,能不能使用txt文件存储我们的代码呢?python这么强大的语言当然可以做大,
- 使用tensorflow训练模型的时候,模型持久化对我们来说非常重要。如果我们的模型比较复杂,需要的数据比较多,那么在模型的训练时间会耗时很
- 本文实例讲述了mysql实现多表关联统计的方法。分享给大家供大家参考,具体如下:需求:统计每本书打赏金额,不同时间的充值数据统计,消费统计,