当前位置:   article > 正文

一零二八、将csdn文章内容保存成 html、pdf、md格式_将csdn笔记保存

将csdn笔记保存

目录

一、获取专栏地址

二、下载转换工具 

三、创建HTML MD PDF 文件夹

四、启动程序

五、源代码


 

代码思路:
1.确定目标需求:将csdn文章内容保存成 HTML、PDF、md格式
    - 1.1首先保存为html格式:获取列表页中所有的文章ur1地址,请求文章ur1地址获取我们需要的文章内容
    - 1.2 通过 wkhtmitopdf.exe把html文件转换成PDF文件
    - 1.3 通过 wkhtmitopdf.exe把html文件转换成md文件
2.请求ur1获取网页源代码
3.解析数据,提取自己想要内容
4.保存数据
5.转换数据类型把HTML转换成PDF、md文件

此项目可以直接将专栏内的所有文章获取到继而转换为三种格式(html,pdf,md)

一、获取专栏地址

在此我使用 毕设项目 专栏 作为演示

原链接是这样的

 简写成这样也可以:

https://blog.csdn.net/m0_54925305/category_11702151.html
self.url = 'https://blog.csdn.net/m0_54925305/category_11702151.html'

 

二、下载转换工具 

wkhtmltopdf

下载完后直接放在本地,可以简单理解为驱动程序

config = pdfkit.configuration(wkhtmltopdf=r'D:\wkhtmltox\bin\wkhtmltopdf.exe')

三、创建HTML MD PDF 文件夹

 注意文件夹需与py文件创建在同级目录下

四、启动程序

控制台打印如下:

效果如下:

 

五、源代码

  1. # -*- coding: utf-8 -*-
  2. # @Time : 2022/9/1 9:36
  3. # @Author : Tuomasi
  4. # @File : convert.py
  5. """
  6. 代码思路:
  7. 1.确定目标需求:将csdn文章内容保存成 HTML、PDF、md格式
  8. - 1.1首先保存为html格式:获取列表页中所有的文章ur1地址,请求文章ur1地址获取我们需要的文章内容
  9. - 1.2 通过 wkhtmitopdf.exe把html文件转换成PDF文件
  10. - 1.3 通过 wkhtmitopdf.exe把html文件转换成md文件
  11. 2.请求ur1获取网页源代码
  12. 3.解析数据,提取自己想要内容
  13. 4.保存数据
  14. 5.转换数据类型把HTML转换成PDF、md文件
  15. """
  16. html_str = """
  17. <!DOCTYPE HTML>
  18. <HTML lang="en">
  19. <head>
  20. <meta charset="UTF-8">
  21. <title>Document</title>
  22. </head>
  23. <body>
  24. {article}
  25. </body>
  26. </HTML>
  27. """
  28. import requests
  29. import parsel
  30. import pdfkit # 用来将html转为pdf
  31. import re
  32. import os
  33. import urllib.parse
  34. from bs4 import BeautifulSoup
  35. import html2text # 用来将html转换为md
  36. import random
  37. # user_agent库:每次执行一次访问随机选取一个 user_agent,防止过于频繁访问被禁止
  38. USER_AGENT_LIST = [
  39. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
  40. "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
  41. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
  42. "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
  43. "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",
  44. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
  45. "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
  46. "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
  47. "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
  48. "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
  49. "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
  50. ]
  51. class CSDNSpider():
  52. def __init__(self):
  53. self.url = 'https://blog.csdn.net/m0_54925305/category_11702151.html'
  54. self.headers = {
  55. 'user-agent': random.choice(USER_AGENT_LIST)
  56. }
  57. def send_request(self, url):
  58. response = requests.get(url=url, headers=self.headers)
  59. response.encoding = "utf-8"
  60. if response.status_code == 200:
  61. return response
  62. def parse_content(self, reponse):
  63. html = reponse.text
  64. selector = parsel.Selector(html)
  65. href = selector.css('.column_article_list a::attr(href)').getall()
  66. name = 00
  67. for link in href:
  68. print(link)
  69. name = name + 1
  70. # 对文章的url地址发送请求
  71. response = self.send_request(link)
  72. if response:
  73. self.parse_detail(response, name)
  74. def parse_detail(self, response, name):
  75. html = response.text
  76. # print(HTML)
  77. selector = parsel.Selector(html)
  78. title = selector.css('#articleContentId::text').get()
  79. # content = selector.css('#content_views').get()
  80. # 由于这里使用parsel拿到的网页文件,打开会自动跳转到csdn首页,并且不能转为pdf,就想在这里用soup
  81. soup = BeautifulSoup(html, 'lxml')
  82. content = soup.find('div', id="article_content",
  83. class_="article_content clearfix" or "htmledit_views") # class_="htmledit_views"
  84. # print(content)
  85. # print(title, content)
  86. html = html_str.format(article=content)
  87. self.write_content(html, title)
  88. def write_content(self, content, name):
  89. html_path = "HTML/" + str(self.change_title(name)) + ".HTML"
  90. pdf_path = "PDF/" + str(self.change_title(name)) + ".PDF"
  91. md_path = "MD/" + str(self.change_title(name)) + ".md"
  92. # 将内容保存为html文件
  93. with open(html_path, 'w', encoding="utf-8") as f:
  94. f.write(content)
  95. print("正在保存", name, ".HTML")
  96. # 将html文件转换成PDF文件
  97. config = pdfkit.configuration(wkhtmltopdf=r'D:\wkhtmltox\bin\wkhtmltopdf.exe')
  98. pdfkit.from_file(html_path, pdf_path, configuration=config)
  99. print("正在保存", name, ".PDF")
  100. # os.remove(html_path)
  101. # 将html文件转换成md格式
  102. html_text = open(html_path, 'r', encoding='utf-8').read()
  103. markdown = html2text.html2text(html_text)
  104. with open(md_path, 'w', encoding='utf-8') as file:
  105. file.write(markdown)
  106. print("正在保存", name, ".md")
  107. def change_title(self, title):
  108. mode = re.compile(r'[\\\/\:\?\*\"\<\>\|\!]')
  109. new_title = re.sub(mode, '_', title)
  110. return new_title
  111. def start(self):
  112. response = self.send_request(self.url)
  113. if response:
  114. self.parse_content(response)
  115. if __name__ == '__main__':
  116. csdn = CSDNSpider()
  117. csdn.start()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/159069
推荐阅读
相关标签
  

闽ICP备14008679号