如何用Python制作知乎热榜微博热搜的可视化时序图?

更新于
2026-10-04 07:54:30
1阅读来源:SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计3105个文字,预计阅读时间需要13分钟。

本篇主要介绍如何使用Python定时爬取知乎热榜/微博热搜数据,并将其保存至CSV文件,便于后续可视化使用。以下为具体步骤:

1. 安装所需库: - 使用pip安装requests库,用于发送网络请求。 - 使用pandas库,用于数据处理和保存CSV文件。

2. 编写爬虫代码: - 使用requests库获取知乎热榜/微博热搜数据。 - 解析数据,提取所需信息。

3. 保存数据至CSV文件: - 使用pandas库将数据保存为CSV文件。

4. 可视化数据: - 使用matplotlib库或其他可视化工具对数据进行可视化。

下篇将详细介绍以上步骤的具体实现。


本期为<知乎热榜/微博热搜时序图>系列文章上篇内容,给大家介绍如何使用Python定时爬取知乎热榜/微博热搜数据,并保存至CSV文件供后续可视化使用,时序图部分将在下篇内容中介绍,希望对你有所帮助。

涉及到的内容:
pandas — 数据处理
schedule — 定时任务
json — 数据格式

read_html — 网页表格处理


1. 准备工作

1.1 导入模块

import json import time import requests import schedule import pandas as pd from fake_useragent import UserAgent


2. 知乎热榜数据

2.1 网页分析
知乎热榜电脑端接口:

www.zhihu.com/hot

知乎热榜手机端接口:

api.zhihu.com/topstory/hot-list?limit=10&reverse_order=0

注意:电脑端端直接F12调试页即可看到热榜数据,手机端需要借助抓包工具查看,这里我们使用手机端接口(返回json格式数据,解析比较方便)。

2.2 获取数据

代码:

def getzhihudata(url, headers): r = requests.get(url, headers=headers) r.raise_for_status() r.encoding = r.apparent_encoding datas = json.loads(r.text)['data'] allinfo = [] time_mow = time.strftime("%Y-%m-%d %H:%M", time.localtime()) print(time_mow) for indx,item in enumerate(datas): title = item['target']['title'] heat = item['detail_text'].split(' ')[0] answer_count = item['target']['answer_count'] follower_count = item['target']['follower_count'] href = item['target']['url'] info = [time_mow, indx+1, title, heat, answer_count, follower_count, href] allinfo.append(info) # 仅首次加表头 global csv_header df = pd.DataFrame(allinfo,columns=['时间','排名','标题','热度(万)','回答数','关注数','链接']) print(df.head())

定时间隔设置1S:

# 每1分钟执行一次爬取任务: schedule.every(1).minutes.do(getzhihudata,zhihu_url,headers) while True: schedule.run_pending() time.sleep(1)

效果:

2.3 保存数据

df.to_csv('zhuhu_hot_datas.csv', mode='a+', index=False, header=csv_header) csv_header = False

注意csv_header的设置,涉及到是否写入表头字段。


3. 微博热搜数据

3.1 网页分析

微博热搜网址:

s.weibo.com/top/summary

F12查看网页源码:

数据在网页的<table>标签里。

3.2 获取数据

代码:

def getweibodata(): url = 's.weibo.com/top/summary' r = requests.get(url, timeout=10) r.encoding = r.apparent_encoding df = pd.read_html(r.text)[0] df = df.loc[1:,['序号', '关键词']] df = df[~df['序号'].isin(['•'])] time_mow = time.strftime("%Y-%m-%d %H:%M", time.localtime()) print(time_mow) df['时间'] = [time_mow] * df.shape[0] df['排名'] = df['序号'].apply(int) df['标题'] = df['关键词'].str.split(' ', expand=True)[0] df['热度'] = df['关键词'].str.split(' ', expand=True)[1] df = df[['时间','排名','标题','热度']] print(df.head())

定时间隔设置1S,效果:

3.3 保存数据

df.to_csv('weibo_hot_datas.csv', mode='a+', index=False, header=csv_header)

结果:


本文共计3105个文字,预计阅读时间需要13分钟。

本篇主要介绍如何使用Python定时爬取知乎热榜/微博热搜数据,并将其保存至CSV文件,便于后续可视化使用。以下为具体步骤:

1. 安装所需库: - 使用pip安装requests库,用于发送网络请求。 - 使用pandas库,用于数据处理和保存CSV文件。

2. 编写爬虫代码: - 使用requests库获取知乎热榜/微博热搜数据。 - 解析数据,提取所需信息。

3. 保存数据至CSV文件: - 使用pandas库将数据保存为CSV文件。

4. 可视化数据: - 使用matplotlib库或其他可视化工具对数据进行可视化。

下篇将详细介绍以上步骤的具体实现。


本期为<知乎热榜/微博热搜时序图>系列文章上篇内容,给大家介绍如何使用Python定时爬取知乎热榜/微博热搜数据,并保存至CSV文件供后续可视化使用,时序图部分将在下篇内容中介绍,希望对你有所帮助。

涉及到的内容:
pandas — 数据处理
schedule — 定时任务
json — 数据格式

read_html — 网页表格处理


1. 准备工作

1.1 导入模块

import json import time import requests import schedule import pandas as pd from fake_useragent import UserAgent


2. 知乎热榜数据

2.1 网页分析
知乎热榜电脑端接口:

www.zhihu.com/hot

知乎热榜手机端接口:

api.zhihu.com/topstory/hot-list?limit=10&reverse_order=0

注意:电脑端端直接F12调试页即可看到热榜数据,手机端需要借助抓包工具查看,这里我们使用手机端接口(返回json格式数据,解析比较方便)。

2.2 获取数据

代码:

def getzhihudata(url, headers): r = requests.get(url, headers=headers) r.raise_for_status() r.encoding = r.apparent_encoding datas = json.loads(r.text)['data'] allinfo = [] time_mow = time.strftime("%Y-%m-%d %H:%M", time.localtime()) print(time_mow) for indx,item in enumerate(datas): title = item['target']['title'] heat = item['detail_text'].split(' ')[0] answer_count = item['target']['answer_count'] follower_count = item['target']['follower_count'] href = item['target']['url'] info = [time_mow, indx+1, title, heat, answer_count, follower_count, href] allinfo.append(info) # 仅首次加表头 global csv_header df = pd.DataFrame(allinfo,columns=['时间','排名','标题','热度(万)','回答数','关注数','链接']) print(df.head())

定时间隔设置1S:

# 每1分钟执行一次爬取任务: schedule.every(1).minutes.do(getzhihudata,zhihu_url,headers) while True: schedule.run_pending() time.sleep(1)

效果:

2.3 保存数据

df.to_csv('zhuhu_hot_datas.csv', mode='a+', index=False, header=csv_header) csv_header = False

注意csv_header的设置,涉及到是否写入表头字段。


3. 微博热搜数据

3.1 网页分析

微博热搜网址:

s.weibo.com/top/summary

F12查看网页源码:

数据在网页的<table>标签里。

3.2 获取数据

代码:

def getweibodata(): url = 's.weibo.com/top/summary' r = requests.get(url, timeout=10) r.encoding = r.apparent_encoding df = pd.read_html(r.text)[0] df = df.loc[1:,['序号', '关键词']] df = df[~df['序号'].isin(['•'])] time_mow = time.strftime("%Y-%m-%d %H:%M", time.localtime()) print(time_mow) df['时间'] = [time_mow] * df.shape[0] df['排名'] = df['序号'].apply(int) df['标题'] = df['关键词'].str.split(' ', expand=True)[0] df['热度'] = df['关键词'].str.split(' ', expand=True)[1] df = df[['时间','排名','标题','热度']] print(df.head())

定时间隔设置1S,效果:

3.3 保存数据

df.to_csv('weibo_hot_datas.csv', mode='a+', index=False, header=csv_header)

结果: