使用 Python 清理收藏夹里已失效的网站


Posted in Python onDecember 03, 2019

失效的书签们

我们日常浏览网站的时候,时不时会遇到些新奇的东西( 你懂的.jpg ),于是我们就默默的点了个收藏或者加书签。然而当我们面对成百上千的书签和收藏夹的时候,总会头疼不已……

使用 Python 清理收藏夹里已失效的网站

尤其是昨天还在更新的程序设计博客,今天就挂了永不更新。或者是昨天看的起劲的电影网站,今天直接404。失效页面这么多,每次我打开才知道失效了,并且需要手动删除,这能是一个程序员干的事情吗?

可是无论是Google浏览器还是国内浏览器,最多也就提供一个对于收藏夹的备份服务,那只能Python走起了。

使用 Python 清理收藏夹里已失效的网站

Python支持的收藏夹文件格式

对于收藏夹提供的支持很少,主要还是因为收藏夹藏在浏览器里面,我们只能手动导出htm文件进行管理

使用 Python 清理收藏夹里已失效的网站

使用 Python 清理收藏夹里已失效的网站

使用 Python 清理收藏夹里已失效的网站

使用 Python 清理收藏夹里已失效的网站

内容比较简单,对前端没什么了解的我,也可以很明显看出其中的树形结构和内在逻辑。

固定格式 网址 固定格式 页面名 固定格式

很简单的想到了正则匹配,其中有两个子串。 提取出来再挨个访问,看看哪个失效了,就删除,就能获得清理后的收藏夹了。

读取收藏夹文件

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)

程序执行情况

使用 Python 清理收藏夹里已失效的网站

导出htm

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

导入浏览器

使用 Python 清理收藏夹里已失效的网站

实际应用于我的浏览器

使用 Python 清理收藏夹里已失效的网站

确实有很多电影网都失效了,通过Python能够一键清理其中无法访问的书签。人生苦短,P ython 的确可以让生活更高效~

总结

以上所述是小编给大家介绍的使用 Python 清理收藏夹里已失效的网站,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python的正则表达式re模块的常用方法
Mar 09 Python
Python OpenCV获取视频的方法
Feb 28 Python
python中将一个全部为int的list 转化为str的list方法
Apr 09 Python
python使用knn实现特征向量分类
Dec 26 Python
解决pycharm remote deployment 配置的问题
Jun 27 Python
python 单线程和异步协程工作方式解析
Sep 28 Python
关于Numpy中的行向量和列向量详解
Nov 30 Python
flask 实现上传图片并缩放作为头像的例子
Jan 09 Python
Python底层封装实现方法详解
Jan 22 Python
解决pyqt5异常退出无提示信息的问题
Apr 08 Python
Python StringIO及BytesIO包使用方法解析
Jun 15 Python
使用python编写一个语音朗读闹钟功能的示例代码
Jul 14 Python
Python常用模块os.path之文件及路径操作方法
Dec 03 #Python
Python中顺序表原理与实现方法详解
Dec 03 #Python
python双向链表原理与实现方法详解
Dec 03 #Python
Python读取实时数据流示例
Dec 02 #Python
简单了解python元组tuple相关原理
Dec 02 #Python
python实现智能语音天气预报
Dec 02 #Python
Python:二维列表下标互换方式(矩阵转置)
Dec 02 #Python
You might like
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
基于php无限分类的深入理解
2013/06/02 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
简单的php新闻发布系统教程
2014/05/09 PHP
Yii中表单用法实例详解
2016/01/05 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
javascript 当前日期加(天、周、月、年)
2009/08/09 Javascript
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
jQuery基础知识小结
2014/12/22 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
javascript用正则表达式过滤空格的实现代码
2016/06/14 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】
2018/08/28 jQuery
Javascript实现时间倒计时功能
2018/11/17 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
微信小程序实现录音时的麦克风动画效果实例
2019/05/18 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
python实现寻找最长回文子序列的方法
2018/06/02 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
Python中实现输入超时及如何通过变量获取变量名
2020/01/18 Python
如何查看Django ORM执行的SQL语句的实现
2020/04/20 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
2021/01/05 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
《王二小》教学反思
2014/02/27 职场文书
女生节标语
2014/06/26 职场文书
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
优秀党员先进材料
2014/12/18 职场文书
硕士毕业答辩开场白
2015/05/27 职场文书
礼仪培训心得体会
2016/01/22 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python