[应用开发] 微博指数抓取工具
[应用开发] 微博指数抓取工具
[应用开发] 微博指数抓取工具 [应用开发] 微博指数抓取工具 Modified December 10, 2025 3582 3709 给GPT下Brief 搞清楚规则以后,就可以让AI帮我们写代码了 需求是:我想抓取微博话题30天的分日数据,微博话题页命名的规则是: https://m.s.weibo.com/ajax topic/detail?q={topic name}&show rank info=1 在执行代码的时候,topic name是用户手动输入的。由于我在colab上运行,在爬取数据之后需要存储数据到excel并自动下载到本地。 丢给4o(o1也可以,但是没什么必要,我连canvas也没用,claude应该表现会更好一些),来回改了3 4次 下面是AI生成的代码,经过一些细节优化(比如将excel的原始标题字段替换成阅读量,互动量之类) Code block Python import requests import pandas as pd from urllib.parse import quote from functools import reduce from google.colab import files def weibo vtopic summary(topic name): url = f'https://m.s.weibo.com/ajax topic/detail?q={topic name}&show rank info=1' try: req = requests.get(url) req.raise for status() 检查请求是否成功 data = req.json() if data['msg'] == 'success': df = pd.DataFrame(data['data']['baseInfo']['count'].items(), columns=['key', 'value']) df.to csv(f'weibo vtopic summary {topic name}.csv', sep='\t', index=False) return data else: print(f"请求失败: {data['msg']}") except requests.RequestException as e: print(f"请求错误: {e}") except ValueError as e: print(f"JSON解析错误: {e}") except Exception as e: print(f"未知错误: {e}") def weibo vtopic trend(topic name, dtype='30d'): url = f'https://m.s.weibo.com/ajax topic/trend?q={topic name}&version=v1&time={dtype}' referer = quote(f' {topic name} ') headers = { 'referer': f'https://m.s.weibo.com/vtopic/detail new?click from=searchpc&q={referer}', } req = requests.get(url, headers=headers) data = req.json() dfs = [] for i, (key, value) in enumerate(data['data'].items()): df = pd.DataFrame(value) if i == 0: df time = df[['time']] dfs.append(df time) df = df.drop(columns='time') df = df.rename(columns={'value': key}) dfs.append(df) df = dfs merge(dfs, index=True) 定义新的列名 new columns = ['日期', '阅读量', '讨论量', '原创量', '互动量'] 替换列名 df.columns = new columns return df def dfs merge(dfs, index=False, on=False, how='left'): if len(dfs) == 1: return dfs[0] if index: df merged = reduce( lambda left, right: pd.merge(left, right, left index=True, right index=True, how=how, sort=False), dfs) elif on: df merged = reduce( lambda left, right: pd.merge( left, right, on=on, how=how, sort=False), dfs) df merged = df merged.reset index(drop=True) return df merged 在Colab中手动输入topic name topic names = [input("请输入话题名称(例如:安妮海瑟薇感叹中国真的太美了):")] for topic name in topic names: data = weibo vtopic summary(topic name) df = weibo vtopic trend(topic name) 显示DataFrame以确认列名更改 display(df) 导出DataFrame到Excel文件 output filename = f'weibo vtopic trend {topic name}.xlsx' df.to excel(output filename, index=False) 下载Excel文件 files.download(output filename) display(df) 应用测试 运行: 导出excel,从此告别手动挖数据 同理小红书的话题页也可以爬,但小红书的命名规则没有微博这么直接,稍微要麻烦点 给GPT下Brief 搞清楚规则以后,就可以让AI帮我们写代码了 需求是:我想抓取微博话题30天的分日数据,微博话题页命名的规则是: https://m.s.weibo.com/ajax topic/detail?q={topic name}&show rank info=1 在执行代码的时候,topic name是用户手动输入的。由于我在colab上运行,在爬取数据之后需要存储数据到excel并自动下载到本地。 丢给4o(o1也可以,但是没什么必要,我连canvas也没用,claude应该表现会更好一些),来回改了3 4次 下面是AI生成的代码,经过一些细节优化(比如将excel的原始标题字段替换成阅读量,互动量之类) 应用测试 运行: 导出excel,从此告别手动挖数据 同理小红书的话题页也可以爬,但小红书的命名规则没有微博这么直接,稍微要麻烦点 📍 作者:吵爷 最近做活动正好用到,因为明星比较多,要每天统计一堆微博话题指数,就临时捣鼓了一下,做了个简易的抓取工具下来。由于外显的数据只支持30天,所以可以爬到30天内每天的数据(不过一般也够了) 作者:吵爷 最近做活动正好用到,因为明星比较多,要每天统计一堆微博话题指数,就临时捣鼓了一下,做了个简易的抓取工具下来。由于外显的数据只支持30天,所以可以爬到30天内每天的数据(不过一般也够了) 由于脚本太简单了,就大概说一下解题思路: 举个例子,首先我们随便看一个热搜话题 点击“详情”可以看到话题的具体数据,这里面有些数据单位是“万”,为了避免数字过大爆屏,但后台应该是有具体数据的。 分析页面 在浏览器预览界面(CTRL+SHIFT+I) 找到它的真实数据地址 复制出来打开,里面可以找到页面上的各种数据,比如阅读量19.1万,搜“191”可以看到对应'read'字段可以看到具体的数据是191286(这个数据是实时的,会不断更新) 并且仔细看浏览器显示的url会发现,原来微博的话题页命名规则还挺简单的