根据热搜爬取历史微博热搜数据
时间: 2025-05-10 18:31:52 浏览: 71
### 如何用爬虫抓取微博热搜历史数据
为了实现对微博热搜历史数据的抓取,可以通过以下方法完成:
#### 工具准备
在开始之前,需要安装一些必要的库来支持爬虫操作。常用的库包括 `requests` 和 `pandas`,用于发送 HTTP 请求以及处理和存储数据。如果遇到动态加载的内容,则可能需要用到 `selenium` 来模拟浏览器行为。
```bash
pip install requests pandas selenium
```
#### 获取目标网站结构
通过开发者工具(通常按 F12 打开),可以查看微博热搜页面的具体 HTML 结构[^2]。这一步非常重要,因为只有明确了数据所在的标签及其属性,才能编写合适的解析逻辑。
#### 设置请求头 (Headers) 和 Cookie
微博服务器会对访问者的身份进行验证,因此设置正确的 Headers 和 Cookies 是成功获取数据的关键之一。这些信息可以从网络请求中复制下来,在代码里作为参数传递给每次请求。
#### 编写基本爬虫脚本
下面展示了一个简单的 Python 脚本来演示如何从微博热搜榜上提取所需的历史记录:
```python
import time
from datetime import datetime, timedelta
import requests
import pandas as pd
def fetch_weibo_hotsearch(date_str):
url = f"https://weibo.com/ajax/side/hotSearch"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Cookie': '' # 填充实际有效的 cookie
}
params = {'date': date_str}
response = requests.get(url, headers=headers, params=params)
if response.status_code != 200:
raise Exception(f"Failed to load page {response.url}")
data_list = []
results = response.json().get('data', {}).get('list', [])
for item in results:
title = item['word']
heat = item['num']
link = item['url']
timestamp = int(item['created_at'])
dt_object = datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')
data_list.append([title, heat, link, dt_object])
df = pd.DataFrame(data_list, columns=['Title', 'Heat', 'Link', 'Timestamp'])
return df
if __name__ == "__main__":
start_date = datetime(2023, 9, 1)
end_date = datetime.now()
all_dataframes = []
while start_date <= end_date:
current_date_str = start_date.strftime("%Y%m%d")
try:
daily_df = fetch_weibo_hotsearch(current_date_str)
all_dataframes.append(daily_df)
print(f"Fetched data for {current_date_str}.")
except Exception as e:
print(f"Error fetching data for {current_date_str}: {e}")
start_date += timedelta(days=1)
time.sleep(2) # Add delay between consecutive calls
final_dataframe = pd.concat(all_dataframes, ignore_index=True)
final_dataframe.to_csv("weibo_hot_search_history.csv", index=False)
```
上述代码片段展示了如何利用循环遍历指定日期范围内的每一天,并调用 API 接口收集对应的热搜列表[^1]。最终结果会被保存到 CSV 文件当中以便后续分析使用。
#### 数据清洗与可视化
一旦获得了原始数据集之后,就可以运用 Pandas 库进一步清理异常值或者缺失项;接着借助 Matplotlib 或 Seaborn 这样的绘图库制作图表展现趋势变化情况[^3]。
---
阅读全文
相关推荐



















