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

news2024/11/14 18:22:07

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

环境使用:

  • Python 3.8

  • Pycharm

  • wkhtmltopdf 软件 – 文末获取

模块使用:

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

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

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

  • pdfkit >>> pip install pdfkit

爬虫思路:

  1. 明确需求:

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

    • 知乎专栏文章 https://zhuanlan.zhihu.com/p/193129156

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

    1. F12 打开开发者工具

    2. 刷新网页

    3. 搜索内容

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

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

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

    开发者工具: Response

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

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

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

    I. 先保存html文件

    II. 把html文件转成PDF

代码展示

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

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

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

'''
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']:

链接地址

    url = f'https://zhuanlan.zhihu.com/p/{index["id"]}'

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

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

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


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

提取整个文章数据 html

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

提取图片

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

提取需要被替换的内容

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

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

    for img_url, img in zip(img_url_list, img_list):

replace 字符串替换

        content = content.replace(img, img_url)

提取文章标题

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

字符串格式化方法

    html = html_str.format(article=content)

文件路径

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

写入数据

        f.write(html)

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

wkhtmltopdf 添加软件路径

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

尾语

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1311617.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux 防火墙systemctl (个人笔记)

查看 systemctl status firewalld 开启 systemctl start firewalld 关闭 systemctl stop firewalld.service 查看所有 firewall-cmd --zonepublic --list-ports 开放端口&#xff1a;// --permanent 永久生效,没有此参数重启后失效 firewall-cmd --zonepublic --add-port9527/…

[PyTorch][chapter 7][李宏毅深度学习][深度学习简介]

前言&#xff1a; 深度学习常用的开发平台 TensorFlow torch theano caffe DSSTNE mxnet libdnn CNTK 目录&#xff1a; 1&#xff1a; 深度学习发展历史 2&#xff1a; DeepLearning 工程简介 3&#xff1a; DNN 简介 一 发展历史 二 DeepLearning 工程简介 深度学习三…

如何删除/替换3D模型的材质贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 在3D设计和动画领域&#xff0c;材质是呈现真实感和逼真效果的关键因…

从广东到俄罗斯:一段跨越万里的电子消费展之旅

作为一名广东电子消费品行业的从业者&#xff0c;我们经常要奔赴全球不同国家拓展海外业务&#xff0c;而展会就是重要的平台。最近大家在热议的俄罗斯国际消费类电子电器展我参加过一届&#xff0c;跨越万里的旅程&#xff0c;让我深刻体会到了这种国际展览的魅力和挑战。 我参…

Mac部署Odoo环境-Odoo本地环境部署

Odoo本地环境部署 安装Python安装Homebrew安装依赖brew install libxmlsec1 Python运行环境Pycharm示例配置 Mac部署Odoo环境-Odoo本地环境部署 安装Python 新机&#xff0c;若系统没有预装Python&#xff0c;则安装需要版本的Python 点击查询Python官网下载 安装Homebrew 一…

实战——Mac M2 安装mat工具

线上环境出现内存飙升的情况&#xff0c;需要工具定位问题发生点就需要用到mat工具了&#xff0c;之前都是在intel芯片环境上安装的&#xff0c;现在换了m2芯片&#xff0c;导致出现了问题&#xff0c;经过一系列调研都解决了&#xff0c;特此记录下&#xff0c;以备后查 开发…

基于开源的JAVA mongodb jdbc 驱动 使用教程

基于开源的JAVA mongodb jdbc 驱动 使用教程介绍 介绍 本文介绍一款开源的基于JAVA的 Mongodb JDBC 驱动使用教程 开源地址 https://gitee.com/bgong/jdbc-mongodb-driver功能价值 与mybaits融合&#xff1a;复用mybatis的功能特性&#xff0c;如:缓存,if动态判断标签等特…

LSTM和GRU的介绍以及Pytorch源码解析

介绍一下LSTM模型的结构以及源码&#xff0c;用作自己复习的材料。 LSTM模型所对应的源码在&#xff1a;\PyTorch\Lib\site-packages\torch\nn\modules\RNN.py文件中。 上次上一篇文章介绍了RNN序列模型&#xff0c;但是RNN模型存在比较严重的梯度爆炸和梯度消失问题。 本文…

HPM6750系列--第七篇 Visual Studio Code使用openocd调试查看外设信息

一、目的 在《HPM6750系列--第四篇 搭建Visual Studio Code开发调试环境》我们已经手把手指导大家如何在visual studio code中进行开发&#xff0c;包括编译调试等步骤以及相关配置文件。 但是在实际调试时发现找不到芯片寄存器实时显示的窗口&#xff0c;本篇主要讲解如何实现…

【Linux】信号--信号初识/信号的产生方式/信号的保存

文章目录 一、信号初步理解1.生活角度的信号2.技术应用角度的信号 二、信号的产生方式1.通过终端按键产生信号2.调用系统函数向进程发信号3.硬件异常产生信号4.由软件条件产生信号5.进程退出时的核心转储问题 三、信号的保存1.信号其他相关常见概念2.信号在内核中的表示3.sigse…

《PCL多线程加速处理》-配准-icp

《PCL多线程加速处理》-配准-icp 一、效果展示二、具体实现三、代码一、效果展示 数据越大,速度提升效果越快 1、48万点 2、十万点 3、三万点 4、9000点 配准数据 二、具体实现

使用uniapp,引入uView遇到的问题(easycom无效解决方法)

在HBuilderX通过npm安装uView时&#xff0c;按照官网文档配置easycom无效 官网为&#xff1a; 4. 配置easycom组件模式 此配置需要在项目根目录的pages.json中进行。 温馨提示 uni-app为了调试性能的原因&#xff0c;修改easycom规则不会实时生效&#xff0c;配置完后&…

【前端】vscode 相关插件

一 插件&#xff1a; 01、ESLint 用来识别并检查ECMAScript/JavaScript 代码的工具 02、Prettier 用来格式化代码&#xff0c;如.js、.vue、css等都可以进行格式化 03、Vetur 用来识别并高亮vue语法 04、EditorConfig 用来设置vscode的编程行为 二、安装依赖 01、…

SpringSecurity 手机号登录

一、工作流程 1.向手机发送验证码&#xff0c;第三方短信发送平台&#xff0c;如阿里云短信。 2.手机获取验证码后&#xff0c;在表单中输入验证码。 3.使用自定义过滤器​SmsCodeValidateFilter​。 4.短信校验通过后&#xff0c;使用自定义手机认证过滤器​SmsCodeAuthentic…

利用vue-okr-tree实现飞书OKR对齐视图

vue-okr-tree-demo 因开发需求需要做一个类似飞书OKR对齐视图的功能&#xff0c;参考了两位大神的代码&#xff1a; 开源组件vue-okr-tree作者博客地址&#xff1a;http://t.csdnimg.cn/5gNfd 对组件二次封装的作者博客地址&#xff1a;http://t.csdnimg.cn/Tjaf0 开源组件v…

oracle aq java jms使用(数据类型为XMLTYPE)

记录一次冷门技术oracle aq的使用 版本 oracle 11g 创建用户 -- 创建用户 create user testaq identified by 123456; grant connect, resource to testaq;-- 创建aq所需要的权限 grant execute on dbms_aq to testaq; grant execute on dbms_aqadm to testaq; begindbms_a…

android studio 快捷输入模板提示

在Android开发中&#xff0c;我们经常会遇到一些重复性的代码&#xff0c;例如创建一个新的Activity、定义一个Getter方法等。为了提高开发效率&#xff0c;Android Studio提供了Live Templates功能&#xff0c;可以通过简化输入来快速生成这些重复性代码。 按下图提示设置&am…

GO并发编程综合应用

一.GO并发编程综合应用 1.生产者消费者模式 1.1需求分析 ​ 生产者每秒生产一个商品&#xff0c;并通过物流公司取货 ​ 物流公司将商品运输到商铺 ​ 消费者阻塞等待商铺到货&#xff0c;需要消费10次商品 1.2实现原理 1.3代码实现&#xff1a; package mainimport (&q…

Google DeepMind发布Imagen 2文字到图像生成模型;微软在 HuggingFace 上发布了 Phi-2 的模型

&#x1f989; AI新闻 &#x1f680; Google DeepMind发布Imagen 2文字到图像生成模型 摘要&#xff1a;谷歌的Imagen 2是一种先进的文本到图像技术&#xff0c;可以生成与用户提示紧密对齐的高质量、逼真的图像。它通过使用训练数据的自然分布来生成更逼真的图像&#xff0c…

服务器上配置jupyter,提示Invalid credentials如何解决

我是按照网上教程在服务器上安装的jupyter以及进行的密码配置&#xff0c;我利用 passwd()这个口令生成的转译密码是"argon...."。按照教程配置jupyter notebook配置文件里面的内容&#xff0c;登陆网页提示"Invalid credentials"。我谷歌得到的解答是&…