-
Python爬虫入门案例:爬取某网站付费文档内容保存PDF
知识点:
- requests
- css选择器
第三方库:
- requests >>> pip install requests
- parsel >>> pip install parsel
- pdfkit >>> pip install pdfkit
开发环境:
- 版 本:anaconda5.2.0(python3.6.5)
- 编辑器:pycharm (安装包/安装教程/激活码/使用教程/插件[翻译插件/主题/汉化包])
- 软件环境: wkhtmltopdf 把html文件转成pdf
【付费VIP完整版】只要看了就能学会的教程,80集Python基础入门视频教学
本节课上课流程思路:
一. 数据来源分析
确定要爬目标: 文档内容
这些文档数据内容是可以从哪里获取的
分析数据的过程:
- 鼠标右键点击检查或者F12 打开开发者工具 选择 network
- 通过开发者工具进行搜索(相关一些数据) 虽然返回数据 (字体编码)
- 搜索没有返回数据 可以查看本身网址发送请求 服务器返回的数据内容
- 分析多个文章的url地址区别 请求url地址情况
二. 代码实现过程
- 发送请求, 对于文章列表页面发送请求
- 获取数据, 获取网页源代码
- 解析数据, 提取文章url地址或者文章标题
- 发送请求, 对于文章详情页url地址发送请求
- 获取数据, 获取网页源代码
- 解析数据, 提取文章内容
- 保存数据, 保存成html文件内容
- 保存PDF, 需要把html文件转成PDF文件内容
- 多页爬取
导入模块
import requests # 数据请求模块 第三方模块 pip install requests 在CMD里面即可安装 import parsel # 数据解析模块 第三方模块 pip install parsel import os # 文件操作模块 内置模块 import pdfkit
1. 发送请求, 对于文章列表页面发送请求
# 请求url地址 url = 'https://www.chinawenwang.com/zlist-55-1.html' # 携带请求头参数 headers 请求头是字典类型 键值对形式 一个关键字对应值 中间是用:隔开的 # User-Agent 浏览器的基本信息 # 请求头是为了把python代码伪装成浏览器对于服务器发送请求 (披着羊皮狼) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36' } # 请求方式: 常见 get请求 post请求 response = requests.get(url=url, headers=headers) # <Response [200]> response响应对象 <> 200 状态码 表示请求成功 # 获取的是响应体的文本数据 (乱码) 转码
2. 获取数据, 获取网页源代码 response.text (html字符串数据内容)
print(response.text)
3. 解析数据, 提取文章url地址或者文章标题
# 解析数据方法: re正则表达式[可以直接匹配字符串数据内容] css选择器 xpath (对于html字符串数据进行数据转换) # 如果你是想要从事相关工作 招聘需求有一个要求 re css xpath 都要会 selector = parsel.Selector(response.text) # 把html字符串数据进行数据转换 selector 对象 # attr(href) 属性选择器 获取a标签里面的href属性 css语法 在VIP课程都一节课内容 (2.5小时内容) # getall() 获取所有 返回列表 匹配多个数据 都是返回列表 href = selector.css('.d-flex h2 a::attr(href)').getall()[:-2]
4. 发送请求, 对于文章详情页url地址发送请求
for index in href: response_1 = requests.get(url=index, headers=headers)
5. 获取数据, 获取网页源代码
print(response_1.text)
6. 解析数据, 提取文章内容
selector_1 = parsel.Selector(response_1.text)
获取文章标题 get() 获取一个 返回的字符串数据
title = selector_1.css('.content-page-header-div h1::text').get() content = selector_1.css('.content-page-main-content-div').get() html_content = html_str.format(article=content)
7. 保存数据, 保存成html文件内容
# 文件路径以及文件名后缀 html_path = html_filename + title + '.html' pdf_path = pdf_filename + title + '.pdf' with open(html_path, mode='w', encoding='utf-8') as f: f.write(html_content)
8. 保存PDF, 需要把html文件转成PDF文件内容
# 配置软件 指定软件位置 config = pdfkit.configuration(wkhtmltopdf=r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe') # 把html文件里面的内容 转成pdf 保存到 pdf文件夹 pdfkit.from_file(html_path, pdf_path, configuration=config) print('正在保存: ', title)
对于本篇文章有疑问的同学也可以点这里
出处:https://www.cnblogs.com/qshhl/p/15293966.html
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比