首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用python实现csdn博主全部博文下载,html转pdf,有了学习的电子书了。。。(附源码)

用python实现csdn博主全部博文下载,html转pdf,有了学习的电子书了。。。(附源码)

作者头像
Java架构师必看
发布2021-07-19 15:52:44
发布2021-07-19 15:52:44
81200
代码可运行
举报
文章被收录于专栏:Java架构师必看Java架构师必看
运行总次数:0
代码可运行

用python实现csdn博主全部博文下载,html转pdf,有了学习的电子书了。。。(附源码)

强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码

用python实现csdn博主全部博文下载,html转pdf,有了学习的电子书了。。。(附源码)

我们学习编程,在学习的时候,会有想把有用的知识点保存下来,我们可以把知识点的内容爬下来转变成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语法部分

代码语言:javascript
代码运行次数:0
运行
复制
	html_css = parsel.Selector(响应的数据)
    html_content = html_css.css('要获取的部分').get()

点开博主的一篇博文打开开发者工具

代码语言:javascript
代码运行次数:0
运行
复制
# 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)

文件的转换

代码语言:javascript
代码运行次数:0
运行
复制
   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的路径')
            )

源码展示:

代码语言:javascript
代码运行次数:0
运行
复制
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()

代码操作:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用python实现csdn博主全部博文下载,html转pdf,有了学习的电子书了。。。(附源码)
    • 先来一个单个的博文下载转pdf格式的操作
    • 开发工具
    • 今天目标:博主的全部博文下载,并且转pdf格式保存
    • 源码展示:
    • 代码操作:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档