Python采集微博评论数据,让评论告诉我们最近热议话题

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

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
二. 代码实现步骤
  1. 发送请求: 模拟浏览器对于url地址发送请求

  2. 获取数据: 获取服务器返回响应数据

  3. 解析数据: 提取我们需要的数据内容

  4. 保存数据: 保存数据即可

多页的数据采集:

对比请求链接变化规律 (请求参数)
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)

尾语

最后感谢你观看我的文章呐~本次航班到这里就结束啦

希望本篇文章有对你带来帮助 ,有学习到一点知识~

躲起来的星星也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~更多源码、资料、素材、解答、交流皆点击下方名片获取呀

你可能感兴趣的:(爬虫,python,开发语言,pycharm,学习)