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)

尾语

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

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

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

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

相关推荐
懂点Tech4 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
comedate4 小时前
SMLib 的 Examples 导读:PyAPI / SM_API / SMLib 三组示例怎么读
python·cad·smlib·examples·sm_api
云和数据.ChenGuang4 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
小向是个Der5 小时前
嵌入式进阶——MCU上电后的动作
c语言·单片机·mcu·学习·链接脚本
川石课堂软件测试5 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
美狐美颜SDK开放平台5 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
dtq04245 小时前
C++小案例 - 日志实战
开发语言·c++
万化冥合5 小时前
PyBox屏幕键盘如何辅助演示键盘操作?
python·计算机外设
星夜离尘565 小时前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
车软学堂5 小时前
从测试转开发,到底要补什么
网络·人工智能·python·功能测试·单片机·车载系统·自动化