python实现csdn全部博文下载并转PDF

作者:武亮宇 时间:2023-08-13 05:26:41 

我们学习编程,在学习的时候,会有想把有用的知识点保存下来,我们可以把知识点的内容爬下来转变成pdf格式,方便我们拿手机可以闲时翻看,是很方便的

先来一个单个的博文下载转pdf格式的操作

python实现csdn全部博文下载并转PDF

python中将html转化为pdf的常用工具是Wkhtmltopdf工具包,在python环境下,pdfkit是这个工具包的封装类。如何使用pdfkit以及如何配置呢?分如下几个步骤。

下载wkhtmltopdf安装包,并且安装到电脑上。
下载地址:https://wkhtmltopdf.org/downloads.html

python实现csdn全部博文下载并转PDF

我下的是这个版本,安装的时候要记住路径,之后调用要用到路径

python实现csdn全部博文下载并转PDF

开发工具

  • 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/” 为例
确定网址为同步加载

python实现csdn全部博文下载并转PDF

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)

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

python实现csdn全部博文下载并转PDF


# 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()

代码操作:

python实现csdn全部博文下载并转PDF

来源:https://blog.csdn.net/weixin_54733110/article/details/117884699

标签:python,博文,下载,转PDF
0
投稿

猜你喜欢

  • 一文详解Go语言切片是如何扩容的

    2024-04-26 17:29:35
  • SQL2005 大数据量检索的分页

    2024-01-25 23:24:46
  • numpy:找到指定元素的索引示例

    2022-05-18 22:29:37
  • 关于element-ui中el-form自定义验证(调用后端接口)

    2024-04-27 15:57:00
  • php+js实现的无刷新下载文件功能示例

    2023-06-12 06:42:47
  • python 装饰器(Decorators)原理说明及操作代码

    2023-12-11 19:06:50
  • oracle命令行删除与创建用户

    2008-01-02 17:01:00
  • 简单谈谈python中的语句和语法

    2023-03-03 12:03:13
  • 再谈Python中的字符串与字符编码(推荐)

    2023-06-15 23:25:08
  • Python Pycurl的属性与方法案例详解

    2022-09-27 04:57:23
  • MySQL中字符串索引对update的影响分析

    2024-01-20 19:00:10
  • python实现简单tftp(基于udp协议)

    2021-01-30 15:01:23
  • 经验总结:ASP与存储过程解析

    2008-11-07 13:33:00
  • ES6新特性一: let和const命令详解

    2024-05-22 10:37:14
  • 详解python函数的闭包问题(内部函数与外部函数详述)

    2023-01-22 20:53:01
  • python 基于Apscheduler实现定时任务

    2022-03-29 00:53:32
  • MySQL中InnoDB存储引擎的锁的基本使用教程

    2024-01-21 09:27:01
  • 浅谈几种常用的JS类定义方法

    2024-04-22 12:56:56
  • Window下安装JDK1.8+Tomcat9.0.27+Mysql5.7.28的教程图解

    2024-01-26 22:24:12
  • 浅谈Series和DataFrame中的sort_index方法

    2022-07-01 05:53:22
  • asp之家 网络编程 m.aspxhome.com