使用 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获取apk文件URL地址实例
Nov 01 Python
Python+MongoDB自增键值的简单实现
Nov 04 Python
Python基于分水岭算法解决走迷宫游戏示例
Sep 26 Python
python探索之BaseHTTPServer-实现Web服务器介绍
Oct 28 Python
pandas的object对象转时间对象的方法
Apr 11 Python
Django 路由系统URLconf的使用
Oct 11 Python
如何基于python生成list的所有的子集
Nov 11 Python
Python3直接爬取图片URL并保存示例
Dec 18 Python
python logging.basicConfig不生效的原因及解决
Feb 20 Python
Python 从attribute到property详解
Mar 05 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
May 15 Python
python list等分并从等分的子集中随机选取一个数
Nov 16 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编程效率的53个要点(经验小结)
2010/09/04 PHP
PHP实现懒加载的方法
2015/03/07 PHP
PHP JSON格式的中文显示问题解决方法
2015/04/09 PHP
从性能方面考虑PHP下载远程文件的3种方法
2015/12/29 PHP
CI框架中数据库操作函数$this-&gt;db-&gt;where()相关用法总结
2016/05/17 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
JavaScript中的noscript元素属性位置及作用介绍
2013/04/11 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
EsLint入门学习教程
2017/02/17 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
Angular6笔记之封装http的示例代码
2018/07/27 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
js实现聊天对话框
2020/02/08 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
Python变量作用范围实例分析
2015/07/07 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
详解从Django Rest Framework响应中删除空字段
2019/01/11 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
常用的10个Python实用小技巧
2020/08/10 Python
利用CSS3的线性渐变linear-gradient制作边框的示例
2016/06/02 HTML / CSS
会走动的图形html5时钟示例
2014/04/27 HTML / CSS
学校食堂采购员岗位职责
2013/12/05 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
教师节班会开场白
2015/06/01 职场文书
教师节获奖感言
2015/07/31 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL