使用 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 布尔操作实现代码
Mar 23 Python
Python中除法使用的注意事项
Aug 21 Python
python实现可将字符转换成大写的tcp服务器实例
Apr 29 Python
Python解析json文件相关知识学习
Mar 01 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
May 04 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 Python
python暴力解压rar加密文件过程详解
Jul 05 Python
基于python的BP神经网络及异或实现过程解析
Sep 30 Python
python第三方库学习笔记
Feb 07 Python
Python Serial串口基本操作(收发数据)
Nov 06 Python
python实现文件分片上传的接口自动化
Nov 19 Python
用python对oracle进行简单性能测试
Dec 05 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中通过curl检测页面是否被百度收录
2013/09/27 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
2019/10/08 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
使用js获取QueryString的方法小结
2010/02/28 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
一个CSS+jQuery实现的放大缩小动画效果
2014/02/19 Javascript
AngularJS学习笔记之TodoMVC的分析
2015/02/22 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
详解JS数组Reduce()方法详解及高级技巧
2017/08/18 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
scrapy爬虫实例分享
2017/12/28 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
Tensorflow 同时载入多个模型的实例讲解
2018/07/27 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
python实现音乐播放器 python实现花框音乐盒子
2020/02/25 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
上海世博会口号
2014/06/19 职场文书
百万英镑观后感
2015/06/09 职场文书
2016年第二十届“母亲节暨幸福工程救助贫困母亲活动日”活动总结
2016/04/06 职场文书
使用Python拟合函数曲线
2022/04/14 Python
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL