Python采集知乎专栏文章保存成pdf

嗨喽,大家好呀~这里是爱看美女的茜茜呐

环境使用:

  • Python 3.8

  • Pycharm

  • wkhtmltopdf 软件 -- 文末获取

模块使用:

  • requests >>> pip install requests 数据请求

  • parsel >>> pip install parsel 数据解析

  • re >>> 内置模块 不需要安装 正则表达式

  • pdfkit >>> pip install pdfkit

爬虫思路:

  1. 明确需求:

    明确采集网站以及数据内容是什么?

    抓包分析, 数据具体是请求那个链接可以得到

    1. F12 打开开发者工具

    2. 刷新网页

    3. 搜索内容

爬虫代码实现基本四大步骤:
  1. 发送请求 -> 模拟浏览器对于链接地址发送请求

    请求链接: https://zhuanlan.zhihu.com/p/193129156 get请求

  2. 获取数据 -> 获取服务器返回响应数据

    开发者工具: Response

  3. 解析数据 -> 提取我们需要的数据内容

    文章数据内容 <包含html格式>

  4. 保存数据 -> 数据内容保存本地文件

    I. 先保存html文件

    II. 把html文件转成PDF

代码展示

python 复制代码
'''
python资料获取看这里噢!! 小编 V:Pytho8987(记得好友验证备注:6 否则可能不通过)
即可获取:文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
# 导入数据请求模块
import requests
# 导入数据解析模块
import parsel
# 导入正则表达式模块
import re
# 导入pdf
import pdfkit
复制代码
"""
1. 发送请求 -> 模拟浏览器对于链接地址发送请求
    - 模拟浏览器: 防止被反爬
        headers 请求头 --> 在开发者工具中可以直接复制
    - 链接地址
    - 发送请求

<Response [200]> 响应对象, 表示请求成功
"""

模拟浏览器 字典数据类型, 构建完整键值对

python 复制代码
'''
python资料获取看这里噢!! 小编 V:Pytho8987(记得好友验证备注:6 )
即可获取:文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
headers = {
    # User-Agent 用户代理 表示浏览器基本身份信息
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
link = 'https://www.zhihu.com/api/v4/columns/c_1090924073042837504/items?limit=10&offset=10'
json_data = requests.get(url=link, headers=headers).json()
for index in json_data['data']:

链接地址

python 复制代码
    url = f'https://zhuanlan.zhihu.com/p/{index["id"]}'

发送请求 --> post请求data <隐藏> params请求参数<在链接问号后面>

python 复制代码
    response = requests.get(url, headers=headers)
复制代码
"""
2. 获取数据 -> 获取服务器返回响应数据
    response.text 获取响应文本数据
        网页源代码 html 
    response.json() 获取响应json数据
        必须完整json数据格式
    response.content 获取响应二进制数据
        获取图片/视频/音频/特定格式文件
        
3. 解析数据 -> 提取我们需要的数据内容
    文章数据内容 <包含html格式>

解析方式:
    re 正则表达式 --> 对于字符串数据进行提取
    css选择器 --> 根据标签属性提取数据内容
    xpath节点提取 --> 根据标签节点提取数据内容


个人喜好: css选择器 -> 根据标签属性提取数据内容        
"""
python 复制代码
    selector = parsel.Selector(response.text)

提取整个文章数据 html

python 复制代码
    content = selector.css('.css-376mun').get()
复制代码
"""
1. 提取图片链接
2. 提取需要被替换的内容
3. 一一替换
"""

提取图片

python 复制代码
    img_url_list = re.findall('<noscript><img src="(.*?)" data-caption=""', content)

提取需要被替换的内容

python 复制代码
'''
python资料获取看这里噢!! 小编 V:Pytho8987(记得好友验证备注:6 )
即可获取:文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
    img_list = re.findall('</noscript><img src="(.*?)" data-caption=""', content)

for循环遍历, 同时遍历两个列表数据

python 复制代码
    for img_url, img in zip(img_url_list, img_list):

replace 字符串替换

python 复制代码
        content = content.replace(img, img_url)

提取文章标题

python 复制代码
    title = selector.css('.Post-Main .Post-Title::text').get()
    title = re.sub(r'[\\\/\''\':*?"<>|]', '', title)
    print(title)
复制代码
"""
4. 保存数据 -> 数据内容保存本地文件
    I.  先保存html文件
    II. 把html文件转成PDF
"""
python 复制代码
    html_str ='''
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    {article}
    </body>
    </html>
    '''

字符串格式化方法

python 复制代码
    html = html_str.format(article=content)

文件路径

python 复制代码
    HtmlPath = f'html\\{title}.html'
    with open(HtmlPath, mode='w', encoding='utf-8') as f:

写入数据

python 复制代码
        f.write(html)

    PdfPath = f'pdf\\{title}.pdf'

wkhtmltopdf 添加软件路径

python 复制代码
    config = pdfkit.configuration(wkhtmltopdf=r'D:\demo\wkhtmltopdf\bin\wkhtmltopdf.exe')
    pdfkit.from_file(HtmlPath, PdfPath, configuration=config)

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

相关推荐
CSCN新手听安16 小时前
【Qt】Qt窗口(五)QDialog对话框的使用,点击按钮弹出新的对话框,自定义对话框界面,模态对话框model
开发语言·c++·qt
USC-XiangLuXun16 小时前
多学科视野的计算机演变
科技·学习·生活
咸甜适中17 小时前
rust语言学习笔记Trait之Debug、Display
笔记·学习·rust
枫叶丹417 小时前
【HarmonyOS 6.0】CANN Kit 新增支持获取 AI 模型 Dump 维测数据功能详解
开发语言·人工智能·华为·信息可视化·harmonyos
沐知全栈开发17 小时前
JavaScript Array(数组)
开发语言
月白风清江有声17 小时前
【无标题】
学习
MATLAB代码顾问1 天前
5大智能算法优化标准测试函数对比(Python实现)
开发语言·python
ting94520001 天前
Tornado 全栈技术深度指南:从原理到实战
人工智能·python·架构·tornado
果汁华1 天前
Browserbase Skills:让 Claude Agent 真正“看见“网页世界
人工智能·python
ZhengEnCi1 天前
04-缩放点积注意力代码实现 💻
人工智能·python