python实现csdn全部博文下载并转PDF
作者:武亮宇 发布时间:2023-08-13 05:26:41
我们学习编程,在学习的时候,会有想把有用的知识点保存下来,我们可以把知识点的内容爬下来转变成pdf格式,方便我们拿手机可以闲时翻看,是很方便的
先来一个单个的博文下载转pdf格式的操作
python中将html转化为pdf的常用工具是Wkhtmltopdf工具包,在python环境下,pdfkit是这个工具包的封装类。如何使用pdfkit以及如何配置呢?分如下几个步骤。
下载wkhtmltopdf安装包,并且安装到电脑上。
下载地址:https://wkhtmltopdf.org/downloads.html
我下的是这个版本,安装的时候要记住路径,之后调用要用到路径
开发工具
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语法部分
# 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)
点开博主的一篇博文打开开发者工具
# 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()
代码操作:
来源:https://blog.csdn.net/weixin_54733110/article/details/117884699


猜你喜欢
- 我在程序中加入了分数显示,三种特殊食物,将贪吃蛇的游戏逻辑写到了SnakeGame的类中,而不是在Snake类中。特殊食物:1.绿色:普通,
- 需求:从一台Oracle数据库获取数据,本以为是很简单的事情,直接将原来的SqlClient换成OracleClient调用,结果远没自己想
- Linux终端里面可谓是奇妙无限,很多优秀的软件都诞生在终端里面。相较之下,Windows本身的理念和Linux就不一致,所以,你懂得。 下
- 一、概述mysql主从是常用的高可用架构之一,也是使用最广泛的的系统架构。在生产环境中mysql主从复制有时会出现复制错误问题。MySQL主
- python 判断是否为正小数和正整数的实例实现代码:def check_float(string): #支付时,输入的金额可能
- PHP 跳转,即重定向浏览器到指定的 URL,是一个很常见的功能。这种功能也有一些细节性的要求,比如等待多少秒以后跳转,用不用JavaScr
- Math.random()Math.random()是JavaScript默认提供的生成随机数的方法。该方法返回一个0到1之间的浮点数,其值
- 如下所示:var myarr=new Array(); //先声明一维 for(var i=0;i<2;i++){ //一
- 上一篇:微软建议的ASP性能优化28条守则(8)技巧 28:阅读资源链接下面是一些与性能有关的出色的资源链接。如果您想了解有关信息,请阅读
- 现如今的开发,比如是内部使用的管理平台这种项目大都时间比较仓仓促。实际上来说在使用了webpack + vue 这一套来开发的话已经大大了提
- <ul> <li> <input type="radio" name="radi
- 本文实例讲述了Python使用progressbar模块实现的显示进度条功能。分享给大家供大家参考,具体如下:progressbar安装:p
- 我们先把数据表建好use test;create table `employee`( emp_no int unsigned, emp_na
- 实现一个树形表格的时候有多种方法:比如把 ztree 的树形直接拼接成表格,或者用强大的 jqgrid 实现,今天介绍一个比较轻量级的实现:
- 什么是MyCAT一个彻底开源的,面向企业应用开发的大数据库集群支持事务、ACID、可以替代MySQL的加强版数据库一个可以视为MySQL集群
- 本文实例讲述了Python实现批量转换文件编码的方法。分享给大家供大家参考。具体如下:这里将某个目录下的所有文件从一种编码转换为另一种编码,
- 本文实例为大家分享了python编写实现抽奖器的具体代码,供大家参考,具体内容如下# coding=utf-8import sysimpor
- 本文实例为大家分享了Python Web框架Tornado运行和部署的详细内容,供大家参考,具体内容如下一、运行和部署因为Tornado内置
- 已经获取微信公众号发布的图片,但不能正常显示 ,提示:此图片来自微信公众平台 未经允许不得引用。 这是怎么回事呢?遇到这
- set是什么?数学上,把set称做由不同的元素组成的集合,集合(set)的成员通常被称做集合元素(set elements)。Python把