python爬取新浪微博评论存入excel

注:本博客只是供大家学习爬虫,如有违规,侵犯到了谁的利益,请联系我,会立马删除博客内容。

一、数据分析

微博里面随便点了一条内容查看评论,本次实验随机点到的微博地址是https://weibo.com/1275238313/O4uNhyk3F#comment。
打开F12,点开评论区,随便复制了第一条评论,进行数据搜索。定位到相应的数据请求,进行请求数据分析。
在这里插入图片描述
请求数据分析后发现,是一个get请求,无加密数据。先把params写出来,里面的数据都是固定的。

params = {
        'is_reload': '1',
        'id': '5010716878180259',
        'is_show_bulletin': '2',
        'is_mix': '0',
        'count': '10',
        'uid': '1275238313',
        'fetch_level': '0',
        'locale': 'zh-CN',
    }

本次实验主要抓取如下数据进行存储
在这里插入图片描述

二、获取首页评论

获取首页评论内容并存入到excel

def one_data(url):
    res = requests.get(url=url, params=params, headers=headers)
    contents = res.json()['data']
    text = [i.get('text') for i in contents]
    source = [i.get('source') for i in contents]
    screen_name = [i.get('user').get('screen_name') for i in contents]
    df_one = pd.DataFrame(
        {'评论内容': text,
         'IP': source,
         '昵称': screen_name
         }
    )
    df_one.to_excel('新浪.xlsx', index=False)
    max_id = res.json()['max_id']
    return max_id

三、获取加载更多的内容

通过点击加载更多,找到相应的数据请求,仍然是一个get请求,只是该请求的params中多了一个max_id
在这里插入图片描述
通过搜索max_id,并进行比较发现,上一次请求的结果中会有一个max_id,而这个max_id会在下一次请求(加载更多的这个请求)的params中。所以我们每次请求后,将返回的json结果中的max_id取出来。
因此我们可以写一个循环,让它一直发请求,直到请求的结果json中的data为[]时,跳出循环。

def all_data(url):
    max_id = one_data(weibo_url)
    while True:
        params['max_id'] = max_id
        res = requests.get(url=url, params=params, headers=headers)
        contents = res.json()['data']
        max_id = res.json()['max_id']
        text = [i.get('text') for i in contents]
        source = [i.get('source') for i in contents]
        screen_name = [i.get('user').get('screen_name') for i in contents]
        df_all = pd.DataFrame(
            {'评论内容': text,
             'IP': source,
             '昵称': screen_name
             }
        )
        excel_file = pd.read_excel('新浪.xlsx')
        df = pd.DataFrame(excel_file)
        append_df = df._append(df_all, ignore_index=True)
        append_df.to_excel('新浪.xlsx', index=False)
        if contents == []:
            break

四、完整代码

完整代码如下:

import pandas as pd
import requests

headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
        'Accept': 'application/json, text/plain, */*',
        'Cookie': 'your cookie'
    }

params = {
        'is_reload': '1',
        'id': '5010716878180259',
        'is_show_bulletin': '2',
        'is_mix': '0',
        'count': '10',
        'uid': '1275238313',
        'fetch_level': '0',
        'locale': 'zh-CN',
    }
# 获取第一页数据并写入到excel
def one_data(url):
    res = requests.get(url=url, params=params, headers=headers)
    contents = res.json()['data']
    text = [i.get('text') for i in contents]
    source = [i.get('source') for i in contents]
    screen_name = [i.get('user').get('screen_name') for i in contents]
    df_one = pd.DataFrame(
        {'评论内容': text,
         'IP': source,
         '昵称': screen_name
         }
    )
    df_one.to_excel('新浪.xlsx', index=False)
    max_id = res.json()['max_id']
    return max_id


# 加载更多获取的数据并存入到excel
def all_data(url):
    max_id = one_data(weibo_url)
    while True:
        params['max_id'] = max_id
        res = requests.get(url=url, params=params, headers=headers)
        contents = res.json()['data']
        max_id = res.json()['max_id']
        text = [i.get('text') for i in contents]
        source = [i.get('source') for i in contents]
        screen_name = [i.get('user').get('screen_name') for i in contents]
        df_all = pd.DataFrame(
            {'评论内容': text,
             'IP': source,
             '昵称': screen_name
             }
        )
        excel_file = pd.read_excel('新浪.xlsx')
        df = pd.DataFrame(excel_file)
        append_df = df._append(df_all, ignore_index=True)
        append_df.to_excel('新浪.xlsx', index=False)
        if contents == []:
            break


weibo_url = 'https://weibo.com/ajax/statuses/buildComments'
all_data(weibo_url)

运行结果:
在这里插入图片描述

如果本篇博客对你有帮助,希望一起探讨更多python编程知识的,可私V:xiaodingdang0814。
欢迎大家点赞、评论、收藏,共同进步。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值