使用 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中最常用的操作列表的几种方法归纳
Apr 24 Python
详解Python中的变量及其命名和打印
Mar 11 Python
利用PyInstaller将python程序.py转为.exe的方法详解
May 03 Python
Python读取sqlite数据库文件的方法分析
Aug 07 Python
python3 pandas 读取MySQL数据和插入的实例
Apr 20 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 Python
python构建基础的爬虫教学
Dec 23 Python
python装饰器常见使用方法分析
Jun 26 Python
python urllib爬虫模块使用解析
Sep 05 Python
Tensorflow限制CPU个数实例
Feb 06 Python
Tkinter中复选菜单是否被选中的判断与设置方式
Mar 04 Python
Selenium元素定位的30种方式(史上最全)
May 11 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 Memcached应用实现代码
2010/02/08 PHP
php数字转汉字代码(算法)
2011/10/08 PHP
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
php自定义截取中文字符串-utf8版
2017/02/27 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
js技巧--转义符&quot;\&quot;的妙用
2007/01/09 Javascript
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
javascript用正则表达式过滤空格的实现代码
2016/06/14 Javascript
深入理解JavaScript函数参数(推荐)
2016/07/26 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
Javascript使用SWFUpload进行多文件上传
2016/11/16 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
node.js中 redis 的安装和基本操作示例
2020/02/10 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
使用python实现接口的方法
2017/07/07 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
Python3使用TCP编写一个简易的文件下载器功能
2019/05/08 Python
对python中 math模块下 atan 和 atan2的区别详解
2020/01/17 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
MAC Cosmetics官方网站:魅可专业艺术彩妆
2019/04/10 全球购物
工厂车间标语
2014/06/19 职场文书
中专生自荐信
2014/06/25 职场文书
四风对照检查材料范文
2014/09/27 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书
springboot临时文件存储目录配置方式
2021/07/01 Java/Android