网站首页 > 技术教程 正文
用python实现csdn博主全部博文下载,html转pdf,有了学习的电子书了。。。(附源码)
我们学习编程,在学习的时候,会有想把有用的知识点保存下来,我们可以把知识点的内容爬下来转变成pdf格式,方便我们拿手机可以闲时翻看,是很方便的
先来一个单个的博文下载转pdf格式的操作
私信小编01即可获取大量Python学习资源
python中将html转化为pdf的常用工具是Wkhtmltopdf工具包,在python环境下,pdfkit是这个工具包的封装类。如何使用pdfkit以及如何配置呢?分如下几个步骤。
下载wkhtmltopdf安装包,并且安装到电脑上。
我下的是这个版本,安装的时候要记住路径,之后调用要用到路径
开发工具
python
pycharm
pdfkit (pip install pdfkit)
lxml
今天目标:博主的全部博文下载,并且转pdf格式保存
基本思路:
1、url + headers
2、分析网页: CSDN网页是静态网页, 请求获取网页源代码
3、lxml解析获取boke_urls, author_name
4、循环遍历,得到 boke_url
5、xpath解析获取文件名
6、css选择器获取标签文本的主体
7、构造拼接html文件
8、保存html文件
9、文件的转换
分析网页: CSDN网页是静态网页, 请求获取网页源代码
start_url =“https://i1bit.blog.csdn.net/”
为例
确定网址为同步加载
css选择器获取标签文本的主体为代码要点部分
css语法部分
html_css = parsel.Selector(响应的数据)
html_content = html_css.css('要获取的部分').get()
点开博主的一篇博文打开开发者工具
# css选择器获取标签文本的主体
html_css = parsel.Selector(response_2)
html_content = html_css.css('article').get()
# 构造拼接html文件
html = \
'''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{}
</body>
</html>
'''.format(html_content)
文件的转换
config = pdfkit.configuration(wkhtmltopdf=r'这里为下载wkhtmltopdf.exe的路径')
pdfkit.from_file(
第一个参数要转变的html文件,
第二个参数转变后的pdf文件,
configuration=config
)
# 上面这样写清楚一点,也可以直接
pdfkit.from_file(
第一个参数要转变的html文件,
第二个参数转变后的pdf文件,
configuration=pdfkit.configuration(wkhtmltopdf=r'这里为下载wkhtmltopdf.exe的路径')
)
源码展示:
import parsel, os, pdfkit
from lxml import etree
from requests_html import HTMLSession
session = HTMLSession()
def main():
# 1、url + headers
start_url = input(r'请输入csdn博主的地址:')
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
}
# 2、分析网页: CSDN网页是静态网页, 请求获取网页源代码
response_1 = session.get(start_url, headers=headers).text
# 3、解析获取boke_urls, author_name
html_xpath_1 = etree.HTML(response_1)
author_name = html_xpath_1.xpath(r'//*[@id="floor-user-profile_485"]/div/div[1]/div[2]/div[2]/div[1]/div[1]/text()')[0]
boke_urls = html_xpath_1.xpath(r'//article[@class="blog-list-box"]/a/@href')
# 4、循环遍历,得到 boke_url
for boke_url in boke_urls:
# 5、请求
response_2 = session.get(boke_url, headers=headers).text
# 6、xpath解析获取文件名
html_xpath_2 = etree.HTML(response_2)
file_name = html_xpath_2.xpath(r'//h1[@id="articleContentId"]/text()')[0]
# 7、css选择器获取标签文本的主体
html_css = parsel.Selector(response_2)
html_content = html_css.css('article').get()
# 8、构造拼接html文件
html = \
'''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{}
</body>
</html>
'''.format(html_content)
# 9、创建两个文件夹, 一个用来保存html 一个用来保存pdf文件
if not os.path.exists(r'{}-html'.format(author_name)):
os.mkdir(r'{}-html'.format(author_name))
if not os.path.exists(r'{}-pdf'.format(author_name)):
os.mkdir(r'{}-pdf'.format(author_name))
# 10、保存html文件
try:
with open(r'{}-html/{}.html'.format(author_name, file_name), 'w', encoding='utf-8') as f:
f.write(html)
except Exception as e:
print('文件名错误')
# 11、文件的转换
try:
config = pdfkit.configuration(wkhtmltopdf=r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe')
pdfkit.from_file(
'{}-html/{}.html'.format(author_name, file_name),
'{}-pdf/{}.pdf'.format(author_name, file_name),
configuration=config
)
a = print(r'--文件下载成功:{}.pdf'.format(file_name))
except Exception as e:
continue
if __name__ == '__main__':
main()
代码操作:
猜你喜欢
- 2024-10-12 一款好用的多种格式电子书制作软件
- 2024-10-12 如何快速将纸质书转成pdf或Word电子档
- 2024-10-12 PDF在线合并怎么操作?分享4种合并PDF的方法
- 2024-10-12 如何打开并编辑PDF文件?好用的PDF阅读器和编辑器快收好
- 2024-10-12 分享4个工具,轻松转换PDF文件! 转换pdf格式软件有哪些
- 2024-10-12 川崎敏和-究极梦折纸 电子书pdf下载
- 2024-10-12 打造专业级电子书,一键导出分享 电子书怎么导到文档里
- 2024-10-12 pdf翻页电子书怎么制作?教你一招,轻松制作pdf | 云展网
- 2024-10-12 效率工具1|PDF整合就是这么简单 效率工具 英文
- 2024-10-12 多个pdf怎么合并成一个pdf?合并PDF这样操作
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)