Python批量下载某网站贵得要shi文档 并保存为PDF

news2024/11/18 17:37:20

人生苦短,我用Python

在这里插入图片描述

基本开发环境💨

  • Python 3.6
  • Pycharm

相关模块的使用💨

import requests
import parsel
import re
import os
import pdfkit

需要使用到一个软件 wkhtmltopdf
这个软件的作用就是把html文件转成PDF

想要把文档内容保存成PDF,
首先保存成html文件,
然后把html文件转PDF

在这里插入图片描述

💥需求数据来源分析

写爬虫程序,

对于数据来源的分析,

是比较重要的,

因为只有当你知道数据的来源你才能通过代码去实现

请添加图片描述
网站分类有比较多种, 也可以选择自己要爬取的。

这个网站如果你只是正常直接去复制文章内容的话,

会直接弹出需要费的窗口…

在这里插入图片描述

但是这个网站上面的数据内容又非常好找,

因为网站本身仅仅只是静态网页数据,

可以直接获取相关的内容。
在这里插入图片描述

通过上述内容,如果想要批量下载文章内容,

获取每篇文章的url地址即可,

想要获取每篇文章的url地址,

这就需要去文章的列表页面找寻相关的数据内容了。

在这里插入图片描述


💥整体思路

1. 发送请求,对于文章列表url地址发送请求
2. 获取数据,获取网页源代码数据内容
3. 解析数据,提取文章url地址
4. 发送请求,对于文章url地址发送请求
5. 获取数据,获取网页源代码数据内容
6. 解析数据,提取文章标题以及文章内容
7. 保存数据,把获取的数据内容保存成PDF
8. 转成PDF文件

💥代码实现

import requests
import parsel
import re
import os
import pdfkit

html_filename = 'html\\'
if not os.path.exists(html_filename):
    os.mkdir(html_filename)

pdf_filename = 'pdf\\'
if not os.path.exists(pdf_filename):
    os.mkdir(pdf_filename)

html_str = """
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
{article}
</body>
</html>
"""


def change_title(name):
    pattern = re.compile(r"[\/\\\:\*\?\"\<\>\|]")  # '/ \ : * ? " < > |'
    new_title = re.sub(pattern, "_", name)  # 替换为下划线
    return new_title


for page in range(1, 11):
    print(f'正在爬取第{page}页数据内容')
    url = f'https://www.chinawenwang.com/zlist-55-{page}.html'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }
    response = requests.get(url=url, headers=headers)
    href = re.findall('<h2><a href="(.*?)" class="juhe-page-left-div-link">', response.text)
    for index in href:
        response_1 = requests.get(url=index, headers=headers)
        selector = parsel.Selector(response_1.text)
        title = selector.css('.content-page-header-div h1::text').get()
        title = change_title(title)
        content = selector.css('.content-page-main-content-div').get()
        article = html_str.format(article=content)
        html_path = html_filename + title + '.html'
        pdf_path = pdf_filename + title + '.pdf'
        try:
            with open(html_path, mode='w', encoding='utf-8') as f:
                f.write(article)

在这里插入图片描述

exe 文件存放的路径

            config = pdfkit.configuration(wkhtmltopdf='C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe')

把 html 通过 pdfkit 变成 pdf 文件

pdfkit.from_file(html_path, pdf_path, configuration=config)
            print(f'{title}保存成功...')
        except:
            pass

💥实现效果

在这里插入图片描述

PDF文档

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

人工智能轨道交通行业周刊-第30期(2023.1.9-1.15)

本期关键词&#xff1a;贵阳智慧车站、城轨智能化汇总、隧道巡检、信创厂商、手语数字人 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与…

煤矿人员工服着装智能识别监测系统 yolov5架构

煤矿人员工服着装智能识别监测系统通过pythonyolov5深度学习网络架构&#xff0c;对画面中人员是否正确着装实时分析&#xff0c;发现违规着装立即抓拍存档告警。我们选择当下YOLO最新的卷积神经网络YOLOv5来进行识别检测。按照官方给出的数目&#xff0c;现版本的YOLOv5每个图…

数据库概述杂谈之章节回顾

数据与数据之间联系的模型表示 网状模型用“图”结构来表示数据及数据之间的联系层次模型用“树”结构来表示数据及数据之间的联系关系模型用“关系&#xff08;二维表&#xff09;”结构来表示数据及数据之间的联系对象模型用“对象”数据结构来表示数据及数据之间的联系 数…

SPI协议与GPIO模拟SPI的实现

SPI定义 SPI&#xff08;Serial Peripheral Interface, 串口外设接口&#xff09;&#xff0c;它用于MCU与各种外围设备以串行方式进行通信&#xff0c;速度最高可达25MHz以上。 SPI接口主要应用在EEPROM、 FLASH、实时时钟、网络控制器、 OLED显示驱动器、 AD转换器&#xf…

ArcGIS10.6保姆式安装教程,超详细;附安装包

安装前请关闭杀毒软件&#xff0c;系统防火墙&#xff0c;断开网络连接 参考链接&#xff1a;请点击 下载链接&#xff1a; 通过百度网盘分享的文件&#xff1a;ArcGIS10.6zip 链接:https://pan.baidu.com/s/1tCsOQ_-WP-usEHmJo9SfcA 提取码:hn15 复制这段内容打开「百度网盘A…

Java环境安装、python环境安装、Burpsuite安装

数据来源 Java环境安装 Windows安装JDK8&#xff08;安装过程&#xff1a;一路下一步&#xff09; 下载JDK8&#xff1a;https://www.oracle.com/java/technologies/javase-jdk8-downloads.html 百度网盘&#xff1a;windows64、84位 配置PATH环境变量&#xff1a; 变量名…

RT-Thread系列--双链表分析

一、目的学习过C语言的同学应该都知道几种常用的数据结构&#xff0c;例如数组、单链表、双链表等。每种数据结构都有其特点和应用场景&#xff0c;本篇就结合RT-Thread源码分析一下其双链表实现细节和特点。那什么是双链表呢&#xff0c;这边简单解释一下帮助大家理解。通过双…

KubeSphere 开源社区 2022 年度回顾与致谢

2022 年&#xff0c;国内的云原生技术生态日趋完善&#xff0c;细分技术项目也不断涌现&#xff0c;形成了完整的支撑应用云原生化的全生命周期技术体系。基础设施即代码、微服务、Serverless 等技术&#xff0c;促使基础设施资源向更加灵活弹性、自动化方向发展。而开源生态也…

重装系统如何设置u盘启动为第一启动项

如何设置u盘启动为第一启动项呢?将U盘设为第一启动项&#xff0c;是使用U盘装机工具重装系统的重要步骤之一&#xff0c;很多网友不清楚怎么操作&#xff0c;下面小编就分享下设置u盘启动为第一启动项的方法。 工具/原料&#xff1a; 系统版本&#xff1a;win7家庭版 品牌型…

【openGauss实战4】数据类型解读

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&#x1f61…

一文教会你巧用设计模式重构项目

文章目录一、设计模式总览二、模板方法模式案例三、策略模式案例四、支付改造4.1 思路分析4.2 实现图解&#xff1a;4.3 代码实现&#xff1a;4.4 效果演示4.5 如何扩展本文参考自12.29日尚硅谷雷神的 巧妙使用设计模式重构项目 一、设计模式总览 总体分类 不同时期选择不同的…

Python批量检索论文被引用数量源码,利用百度学术网页版来批量检索论文的被引用数量源码

论文被引用数搜索 利用百度学术网页版来检索一个文件夹中的所有论文的被引用数量。 完整代码下载地址&#xff1a;Python批量检索论文被引用数量源码 依赖有beautifulsoup库、regex正则表达式库。 使用方法 主程序为fileWalk.py。 修改程序中workPath值为文件夹绝对路径&am…

基于碰撞传感器的自动导航车系统设计

1、内容简介略635-可以交流、咨询、答疑2、内容说明略随着世界各国对科学技术的重视&#xff0c;各类高科技技术突飞猛进&#xff0c;人类逐步进入人工智能时代。而在这些高科技技术的背后&#xff0c;自动导航小车作为无人驾驶小车的一种类型备受关注。它的主要优点是不需要人…

冰冰学习笔记:智能指针

欢迎各位大佬光临本文章&#xff01;&#xff01;&#xff01; 还请各位大佬提出宝贵的意见&#xff0c;如发现文章错误请联系冰冰&#xff0c;冰冰一定会虚心接受&#xff0c;及时改正。 本系列文章为冰冰学习编程的学习笔记&#xff0c;如果对您也有帮助&#xff0c;还请各位…

vite 在proxy代理中更改headers

vite 在proxy代理中更改headers 平时我们在对接接口时&#xff0c;我们都是配置代理解决跨域问题 proxy: {^/api: {target: envConfig.VITE_APP_BASE_URL,changeOrigin: true,rewrite: (path) > path.replace(/^/api/, ),}} 某天你明明配置好了代理&#xff0c;浏览器还是会…

嵌入式Linux-守护进程

1.守护进程 1.1 何为守护进程 守护进程&#xff08;Daemon&#xff09;也称为精灵进程&#xff0c;是运行在后台的一种特殊进程&#xff0c;它独立于控制终端并且周期性地执行某种任务或等待处理某些事情的发生&#xff0c;主要表现为以下两个特点&#xff1a; 长期运行。 守…

Java中的多线程安全问题

目录 一、什么是线程安全&#xff1f; 二、线程不安全的原因 2.1 从底层剖析count的操作 2.2 线程不安全的原因总结 2.3 JVM内存模型&#xff08;JMM&#xff09; 三、synchronized 关键字-监视器锁monitor lock 3.1 如何加锁&#xff08;Synchronized用法和特性&#xff…

【sklearn】模型融合_堆叠法

Stacking参数含义1. 工具库 & 数据2. 定义交叉验证函数2.1 对融合模型2.2 对单个评估器3. 定义个体学习器和元学习器3.1 个体学习器3.2 元学习器4. 评估调整模型5. 元学习器的特征矩阵5.1 特征矩阵两个问题 & Stacking5.2 StackingClassfier\Regressor参数cv - 解决样本…

C语言 动态通讯录实现(附源码)

欢迎来到 Claffic 的博客 &#x1f49e;&#x1f49e;&#x1f49e; 前言&#xff1a; 上期博客写了静态通讯录并且答应给大家写一个动态版&#xff0c;这不&#xff0c;它来了&#xff1a; 1.动态版与静态版的区别 静态版的内存空间开辟大小是固定的&#xff0c;放了预期的最…

Leetcode 剑指 Offer II 010. 和为 k 的子数组

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个整数数组和一个整数 k &#xff0c;请找到该数组中和为…