嗨喽~大家好呀,这里是魔王呐 ❤ ~!
python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取
环境使用:
-
Python 3.10
-
Pycharm
模块使用:
-
import requests >>> pip install requests
-
import csv
模块安装:
win + R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安装速度比较慢, 你可以切换国内镜像源)
爬虫实现的基本流程:
一. 数据来源分析
1. 明确需求 确定采集什么网址上什么的数据
- 网址: 微博 https://weibo.com/2286908003/NDLCR7za5
- 数据: 评论信息
2. 抓包分析 (确定请求网址)
- 打开开发者工具: F12 / 右键点击检查选择network
- 刷新网页
- 通过关键字搜索找到对应的数据位置
关键字: 你需要获取的数据
数据包地址: https://weibo.com/ajax/statuses/buildComments
二. 代码实现步骤
-
发送请求: 模拟浏览器对于url地址发送请求
-
获取数据: 获取服务器返回响应数据
-
解析数据: 提取我们需要的数据内容
-
保存数据: 保存数据即可
多页的数据采集:
对比请求链接变化规律 (请求参数)
max_id:''
第一页链接参数改成和后面链接参数一样 查看是否能够请求
1. 可以请求 OK
2. 如果不能请求: for循环时候判断即可
采集多页 -> 请求参数不规则变化
1. 下一页参数是否存在于上一页响应数据中 (直接搜参数哪来的)
2. 是不是加密参数
代码展示
导入模块
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 导入数据请求模块 pip install requests
import requests
# 导入格式化输出模块
from pprint import pprint
# 导入csv模块
import csv
创建文件对象
f = open('data.csv', mode='w', encoding='utf-8-sig', newline='')
字典写入
csv_writer = csv.DictWriter(f, fieldnames=[
'昵称',
'性别',
'IP',
'点赞',
'内容',
])
写入表头
csv_writer.writeheader()
“”"
1. 发送请求: 模拟浏览器对于url地址发送请求 (基本复制开发者中的)
-
微博不登录, 看到评论有限
-
发送请求为什么用get
“”"
模拟浏览器 (字典: 构建完整键值对)
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
headers = {
# User-Agent 用户代理 表示浏览器基本身份信息
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
def get_content(max_id):
请求网址
url = f'https://weibo.com/ajax/statuses/buildComments?flow=0&is_reload=1&id=4994778691803461&is_show_bulletin=2&is_mix=0&max_id={max_id}&count=20&uid=2286908003&fetch_level=0&locale=zh-CN'
发送请求
response = requests.get(url=url, headers=headers)
“”"
2. 获取数据: 获取服务器返回响应数据
-
response.text
-
response.json()
-
response.content
3. 解析数据: 提取我们需要的数据内容
“”"
json_data = response.json()
键值对取值: 根据冒号左边的内容[键], 提取冒号右边的内容[值]
data = json_data['data']
for循环遍历, 提取列表里面元素
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
for index in data:
try:
# 评论
content = index['text_raw']
# 昵称
name = index['user']['screen_name']
# 性别
sex_info = index['user']['gender']
if sex_info == 'f':
sex = '女'
elif sex_info == 'm':
sex = '男'
else:
sex = '保密'
# 点赞
like = index['like_counts']
# 归属地
IP = index['source'].replace('来自', '')
dit = {
'昵称': name,
'性别': sex,
'IP': IP,
'点赞': like,
'内容': content,
}
写入数据
csv_writer.writerow(dit)
print(dit)
except Exception as e:
print(e)
max_id = json_data['max_id']
return max_id
max_id = ''
for page in range(1, 11):
max_id = get_content(max_id=max_id)
尾语
最后感谢你观看我的文章呐~本次航班到这里就结束啦 🛬
希望本篇文章有对你带来帮助 🎉,有学习到一点知识~
躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。