博客主页:小馒头学python
本文专栏: Python爬虫五十个小案例
专栏简介:分享五十个Python爬虫小案例
引言
微博热搜是反映社会热点的重要风向标,包含了最新的事件动态和社会趋势。爬取微博热搜数据,不仅有助于深入理解社交媒体的传播规律,还可以为热点预测和舆论分析提供支持。本篇教程将从基础环境配置到代码实现,带你一步步完成微博热搜爬虫
项目的必要性
- 数据分析需求:微博热搜数据可以用于热点事件分析、关键词提取、情感分析等。
- 舆论研究价值:研究热搜数据背后的传播规律和社会关注点,对媒体运营和品牌营销有重要参考价值。
- 个人学习提升:实现一个完整的爬虫项目,能够提升 Python 编程能力和数据处理能力。
环境配置
Python 环境
推荐版本:Python 3.7+
安装方式:访问 Python 官网 下载适合的安装包并安装。
依赖库安装
执行以下命令安装项目所需依赖库:
pip install requests beautifulsoup4 pandas matplotlib
开发工具
- 推荐使用 VSCode、PyCharm 或 Jupyter Notebook,这里我采用Pycharm
爬取微博热搜的技术原理
数据来源分析
微博热搜榜可以通过以下网址访问:微博热搜榜。
页面核心元素结构:
HTML Table:热搜数据以表格形式展示,每行包含排名、关键词和热度
链接路径:热搜关键词的链接为相对路径,需要拼接完整网址
HTTP 请求原理
通过 requests 库发送 HTTP 请求获取页面内容。为避免被目标网站屏蔽,需要设置 User-Agent 模拟浏览器访问
数据解析与提取
使用 BeautifulSoup 解析 HTML 内容,通过 CSS 选择器定位目标数据
代码实现
代码结构与模块划分
文件名&功能
- weibo_scraper.py 爬取数据的核心逻辑
- data_handler.py 数据清洗与保存功能
- visualization.py 数据可视化与展示
数据爬取实现
import requests
from bs4 import BeautifulSoup
def fetch_weibo_hot_search():
url = "https://s.weibo.com/top/summary?cate=realtimehot"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
table = soup.find("table", class_="table")
rows = table.find_all("tr")[1:] # 跳过表头
data = []
for row in rows:
cols = row.find_all("td")
rank = cols[0].text.strip()
keyword = cols[1].text.strip()
link = "https://s.weibo.com" + cols[1].a["href"]
heat = cols[2].text.strip() if len(cols) > 2 else "N/A"
data.append({"排名": rank, "关键词": keyword, "热度": heat, "链接": link})
return data
数据清洗与保存
import pandas as pd
def save_to_csv(data, filename="weibo_hot_search.csv"):
if not data:
print("无数据保存")
return
df = pd.DataFrame(data)
df.to_csv(filename, index=False, encoding="utf-8-sig")
print(f"数据已保存至 {filename}")
主程序
if __name__ == "__main__":
data = fetch_weibo_hot_search()
save_to_csv(data)
数据可视化
import pandas as pd
import matplotlib.pyplot as plt
def visualize_data(filename="weibo_hot_search.csv"):
df = pd.read_csv(filename)
df = df[df["热度"] != "N/A"] # 过滤无热度数据
df["热度"] = df["热度"].astype(int) # 转换为数值类型
# 绘制热搜热度前10
top_10 = df.head(10)
plt.figure(figsize=(10, 6))
plt.barh(top_10["关键词"], top_10["热度"])
plt.xlabel("热度")
plt.ylabel("关键词")
plt.title("微博热搜热度前10")
plt.gca().invert_yaxis() # 反转Y轴显示顺序
plt.show()
visualize_data()
以上内容仅供参考,若有需求请联系我
结语
通过本教程,我们从环境搭建、代码实现到数据展示与分析,完整实现了一个微博热搜爬取项目。
本项目不仅可以作为学习爬虫的入门案例,还可扩展为更复杂的热点分析系统。如果你有任何疑问或建议,欢迎留言讨论!