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
本节课上课流程思路:
⼀. 数据来源分析
确定要爬⽬标: ⽂档内容
pdf转html这些⽂档数据内容是可以从哪⾥获取的
分析数据的过程:
1. ⿏标右键点击检查或者F12 打开开发者⼯具选择 network
2. 通过开发者⼯具进⾏搜索(相关⼀些数据) 虽然返回数据 (字体编码)
3. 搜索没有返回数据可以查看本⾝⽹址发送请求服务器返回的数据内容
4. 分析多个⽂章的url地址区别请求url地址情况
⼆. 代码实现过程
1. 发送请求, 对于⽂章列表页⾯发送请求
2. 获取数据, 获取⽹页源代码
3. 解析数据, 提取⽂章url地址或者⽂章标题
4. 发送请求, 对于⽂章详情页url地址发送请求
5. 获取数据, 获取⽹页源代码
6. 解析数据, 提取⽂章内容
7. 保存数据, 保存成html⽂件内容
8. 保存PDF, 需要把html⽂件转成PDF⽂件内容
9. 多页爬取
导⼊模块
import requests # 数据请求模块第三⽅模块 pip install requests 在CMD⾥⾯即可安装
import parsel # 数据解析模块第三⽅模块 pip install parsel
import os # ⽂件操作模块内置模块
import pdfkit
1. 发送请求, 对于⽂章列表页⾯发送请求
# 请求url地址
url = 'www.chinawenwang/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 = (url=url, headers=headers)
# <Response [200]> response响应对象 <> 200 状态码表⽰请求成功
# 获取的是响应体的⽂本数据 (乱码) 转码
2. 获取数据, 获取⽹页源代码 (html字符串数据内容)
)
3. 解析数据, 提取⽂章url地址或者⽂章标题
# 解析数据⽅法: re正则表达式[可以直接匹配字符串数据内容] css选择器 xpath (对于html字符串数据进⾏数据转换)
# 如果你是想要从事相关⼯作招聘需求有⼀个要求 re css xpath 都要会
selector = parsel.) # 把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 = (url=index, headers=headers)
5. 获取数据, 获取⽹页源代码
print()
6. 解析数据, 提取⽂章内容
selector_1 = parsel.Selector()
获取⽂章标题 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 = figuration(wkhtmltopdf=r'C:\Program Files\wkhtmltopdf\')
# 把html⽂件⾥⾯的内容转成pdf 保存到 pdf⽂件夹pdfkit.from_file(html_path, pdf_path, configuration=config) print('正在保存: ', title)