嗨喽,大家好呀~这里是爱看美女的茜茜呐
环境使用:
-
Python 3.8
-
Pycharm
-
wkhtmltopdf 软件 – 文末获取
模块使用:
-
requests >>> pip install requests 数据请求
-
parsel >>> pip install parsel 数据解析
-
re >>> 内置模块 不需要安装 正则表达式
-
pdfkit >>> pip install pdfkit
爬虫思路:
-
明确需求:
明确采集网站以及数据内容是什么?
- 知乎专栏文章 https://zhuanlan.zhihu.com/p/193129156
抓包分析, 数据具体是请求那个链接可以得到
-
F12 打开开发者工具
-
刷新网页
-
搜索内容
爬虫代码实现基本四大步骤:
-
发送请求 -> 模拟浏览器对于链接地址发送请求
请求链接: https://zhuanlan.zhihu.com/p/193129156 get请求
-
获取数据 -> 获取服务器返回响应数据
开发者工具: Response
-
解析数据 -> 提取我们需要的数据内容
文章数据内容 <包含html格式>
-
保存数据 -> 数据内容保存本地文件
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)
尾语
感谢你观看我的文章呐~本次航班到这里就结束啦 🛬
希望本篇文章有对你带来帮助 🎉,有学习到一点知识~
躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。