前言
嗨喽,大家好呀~这里是爱看美女的茜茜呐
又到了学Python时刻~
环境使用:
- Python 3.8
- Pycharm 2021.2版本
模块使用:
- import requests >>> pip install requests
-pip install -i https://pypi.doubanio.com/simple/ requests - import re
安装python第三方模块:
- win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车
- 在pycharm中点击Terminal(终端) 输入安装命令
思路<通用模板>
一. 数据来源分析
- 明确自己采集数据, 是来自于哪里
- 图片标题
- 图片链接
通过浏览器自带工具: 开发者工具
进行抓包分析
- 打开开发者工具: 鼠标右键点击检查选择network / F12
- 刷新网页: 为了让本网页数据内容重新加载一遍
找到图片链接:
—> 分析有没有地方, 把所有图片地址都包含 - 通过开发者工具: 搜索功能去搜索查询对应数据包在哪里
由一个数据 —> 分析找到相关所有数据来源地址
二. 代码实现步骤:
基本四大步骤 发送请求, 获取数据, 解析数据, 保存数据
采集一页数据:
- 发送请求, 模拟浏览器对于url地址发送请求
- 获取数据, 获取服务器返回响应数据
开发者工具: response <网页源代码> - 解析数据, 提取我们想要的数据内容
- 图片标题
- 图片链接
- 保存数据, 把图片内容保存到本地文件夹
代码展示
导入模块
# 导入数据请求模块 --> 第三方模块 需要安装 pip install requests <手机第三方APP 需要自己下载>
import requests
# 导入正则模块 --> 内置模块 不需要安装 <相当于手机自带APP>
import re
# 导入文件操作模块 --> 内置模块 不需要安装
import os
PS:本篇完整源码如有需要的小伙伴可以加下方的群去找管理员免费领取
“”"
- 发送请求, 模拟浏览器对于url地址发送请求
- 导入模块是灰色, 不是报错 <没有使用模块>
- 模拟浏览器
如果不伪装模拟: 可能会被识别出来是爬虫程序, 从而得不到数据
headers 请求头 --> 直接去复制 - 请求方法选择是根据开发者工具来的 <根据浏览器来的>
- <Response [200]>
Response: 响应
<> : 对象
200:状态码 表示请求成功
采集多页数据内容: 分析请求url的参数变化规律
“”"
顾头不顾尾, 包含1, 但是不包含251
for page in range(26, 251):
print(f'=====================正在采集第{page}页的数据内容=====================')
确定请求链接 f 字符串格式化方法, 把page传入到 url 这个字符串中间
伪装模拟 字典数据类型, 构建完整键值对
源码、解答加企鹅裙:261823976##
headers = {
# User-Agent 用户代理, 表示浏览器基本身份信息
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
发送请求
调用requests模块里面get请求方法, 对于url地址发送请求, 并且携带上headers请求头伪装, 最后用自定义变量名response接收返回数据
response = requests.get(url=url, headers=headers)
“”"
- 获取数据, 获取服务器返回响应数据
开发者工具: response <网页源代码>
response --> <Response [200]>
text --> 文本
response.text: 获取响应文本数据, 网页源代码 - 解析数据, 提取我们想要的数据内容
- 图片标题
- 图片链接
正则表达式re
re模块findall方法 找到所有数据
re.findall(‘匹配什么数据’, ‘什么地方’)
“”"
img_info = re.findall('<img class="ui image lazy" data-original="(.*?)" src=".*?" title="(.*?)" ', response.text)
for循环遍历, 把列表里面元素 一个一个提取出来
for img_url, img_name in img_info:
# img_info <列表: 箱子盒子> img_url, img_name <箱子里面东西>
print(img_url, img_name)
“”"
- 保存数据: 发送请求, 获取二进制数据内容
response.content 获取二进制数据
保存 音频/视频/图片/特定格式文件<PDF, zip…>
“”"
img_content = requests.get(url=img_url, headers=headers).content
自动创建文件夹 \ 转义字符串, 把含有特殊含义字符, 转义成除了本身以外不含有其他特殊含义
filename = 'data\\'
判断是否存在这个文件
if not os.path.exists(filename):
自动创建文件夹
os.mkdir(filename)
根据图片自己的后缀
img = img_url.split('.')[-1]
替换特殊字符
new_name = re.sub(r'[\/:*?"<>|]', '', img_name)
len() 统计元素个数
if len(new_name) > 20:
new_name = new_name[:10]
"""
OSError: [Errno 22] Invalid argument: 'data\\这盒里吗?.gif'
含有特殊字符
"""
with open(filename + new_name + '.' + img, mode='wb') as f:
# 写入数据
f.write(img_content)
尾语
感谢你观看我的文章呐~本次航班到这里就结束啦 🛬