用python将网上的文章转存为PDF文档,保存电脑上慢慢看

x33g5p2x  于2022-05-27 转载在 Python  
字(2.8k)|赞(0)|评价(0)|浏览(484)

我们有时候看到一篇好的文章,想去保存下来,传统方式一般是收藏书签、复制粘贴到文档或者直接复制链接保存,但这样一次两次还好,数量多了,比较麻烦不说,还可能不好找~

这个时候,Python的作用就来了,直接抓下来导出为PDF,直接把整个网站的内容都导下来都行~

话不多说,我们直接上代码!

  1. import requests
  2. import parsel
  3. import pdfkit
  4. import os
  5. import re
  6. html_str = """
  7. <!doctype html>
  8. <html lang="en">
  9. <head>
  10. <meta charset="UTF-8">
  11. <title>Document</title>
  12. </head>
  13. <body>
  14. {article}
  15. </body>
  16. </html>
  17. """
  18. def change_title(title):
  19. """
  20. 替换标题中的特殊字符
  21. :param title: 传入文章标题
  22. :return: 返回一个替换掉特殊字符的标题
  23. """
  24. """
  25. 使用re.compile()将正则表达式的字符串形式编译为一个对象,通过该对象提供的一些列方法对文本
  26. 进行匹配查找
  27. re.sub() 第一个参数对应的正则表达式,第二个参数为要替换成的字符串, 第三个参数为源字符串
  28. """
  29. pattern = re.compile(r"[\/\\\:\*\?\"\<\>\|]") # '/ \ : * ? " < > |'
  30. new_title = re.sub(pattern, "_", title) # 替换为下划线
  31. return new_title
  32. for page in range(1, 11):
  33. """
  34. 发送请求的url地址,唯一资源定位符
  35. headers: 请求头 把python伪装成浏览器对服务器发送请求, 然后服务器会给我们返回一个响应数据
  36. 请求头所加的参数都是可以在开发者工具中的headers里面的request headers中找到的
  37. 比如 user-agent:代表着浏览器的信息
  38. cookies:用户的信息 常用于检测是否有登陆账号
  39. host:域名
  40. referer:常说的防盗链,告诉服务器是从哪个网页跳转过来的
  41. 请求方式:可以通过开发者工具中headers里面的数据看到是什么样的请求方式
  42. get请求: 是可以直接从服务器上面获取数据
  43. post请求:需要向服务器发送一个数据 比如说(搜索/登陆)
  44. response:响应对象
  45. 状态码: 200表示请求成功 300:重定向 跳转 400:通常是url网址不对 500 一般是服务器问题
  46. 获取网页文本数据 response.text 获取网页json字典数据 response.json() 获取网页二进制数据 response.content
  47. """
  48. url = 'https://****/qdPython/article/list/{page}'
  49. headers = {
  50. 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
  51. }
  52. response = requests.get(url=url, headers=headers)
  53. """
  54. url里面的****替换为blog.csdn.net即可
  55. 把 html 字符串数据转换成一个 Selector 对象
  56. Selector 就具有一系列数据解析的方法 css/xpath/re
  57. 类选择器 都是使用圆点.开头
  58. ID选择器 是使用#开头
  59. 属性选择器:
  60. ::text获取标签里面的文本数据
  61. ::attr(xxx) 获取标签内某一个属性的数据
  62. get() 从 Selector 对象中提取第一个数据, 直接返回字符串数据给我们
  63. getall() 从 Selector 对象中提取提取所有数据, 返回一个列表
  64. """
  65. selector = parsel.Selector(response.text)
  66. href = selector.css('.article-list div.article-item-box a::attr(href)').getall()
  67. for link in href:
  68. response_1 = requests.get(url=link, headers=headers)
  69. selector_1 = parsel.Selector(response_1.text)
  70. title = selector_1.css('#articleContentId::text').get()
  71. content = selector_1.css('#content_views').get()
  72. new_title = change_title(title)
  73. # 创建文件保存地址以及保存文件的名字 和格式
  74. pdf_path = 'pdf\\' + new_title + '.pdf'
  75. html_path = 'pdf\\' + new_title + '.html'
  76. # str.format() 字符串格式化方法
  77. html = html_str.format(article=content)
  78. """
  79. with open 打开文件时, 当文件对象引用完毕之后会自动关闭文件
  80. html_path:文件保存路径以及名字格式
  81. mode:保存方式 w 写入 如果你不写mode默认是r 读
  82. encoding: 编码
  83. as f 重命名 可以自定义
  84. f = open()
  85. f.writer()
  86. f.close()
  87. """
  88. with open(html_path, mode='w', encoding='utf-8') as f:
  89. f.write(html)
  90. print('正在保存:', title)
  91. # exe 文件存放的路径
  92. config = pdfkit.configuration(wkhtmltopdf='C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe')
  93. # 把 html 通过 pdfkit 变成 pdf 文件
  94. pdfkit.from_file(html_path, pdf_path, configuration=config)
  95. os.remove(html_path)

兄弟们快去试试吧!

给大家推荐个视频合集

代码总是学完就忘记?100个Python实战项目!让你沉迷学习丨学以致用丨下一个大神就是你!

相关文章