数据爬取与可视化完整指南
数据爬取
工具准备
使用 Python 的 requests
库发送网络请求,搭配 BeautifulSoup
解析网页内容。
import requests
from bs4 import BeautifulSoup
url = "https://example.com"
headers = {"User-Agent": "Mozilla/5.0"} # 模拟浏览器访问
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
提取数据
根据网页结构定位目标数据,提取新闻标题与链接:
articles = [] for item in soup.select(".news-list li"):= item.select_one(".title").text.strip() link = item.select_one("a")["href"] articles.append({"title": title, "link": link})
存储数据
将数据保存为 CSV 文件,便于后续分析:
import pandas as pd df = pd.DataFrame(articles) df.to_csv("news_data.csv", index=False)
注意事项
- 遵守目标网站的
robots.txt
规则。 - 添加请求延时(如
time.sleep(2)
)避免被封禁。
数据处理
清洗数据
处理缺失值、重复项与非标准格式:
df = pd.read_csv("news_data.csv") df.drop_duplicates(inplace=True) # 去重 df.dropna(subset=["title"], inplace=True) # 删除空标题
数据格式化
提取日期或分类标签:
df["date"] = pd.to_datetime(df["raw_date"], format="%Y-%m-%d")
数据可视化
选择工具
- 基础图表:使用
matplotlib
或seaborn
。 - 交互图表:推荐
plotly
或pyecharts
。
生成图表
示例:绘制新闻数量月度趋势图
import matplotlib.pyplot as plt monthly_counts = df.groupby(df["date"].dt.to_period("M")).size() plt.figure(figsize=(10,6)) monthly_counts.plot(kind="line", marker="o")"新闻发布趋势") plt.xlabel("月份") plt.ylabel("数量") plt.savefig("trend.png") # 导出为图片
高级可视化
使用 seaborn
绘制热力图或箱线图:
import seaborn as sns sns.heatmap(data=df.corr(), annot=True)
发布到网站
静态文件展示
将图表导出为图片或 HTML 嵌入网页:
<img src="/path/trend.png" alt="新闻趋势图">
动态交互展示
使用 Plotly
生成交互式图表并嵌入:
import plotly.express as px
fig = px.bar(df, x="category", y="count")
fig.write_html("chart.html") # 导出为 HTML
注意事项
-
法律合规
- 避免爬取个人信息或版权内容。
- 遵循《网络安全法》与《数据安全法》。
-
道德约束
控制爬取频率,减少服务器压力。
-
技术规范
- 使用代理 IP 应对反爬机制。
- 定期更新解析逻辑以适应网站改版。
参考文献
- BeautifulSoup 官方文档:https://www.crummy.com/software/BeautifulSoup/
- Pandas 数据处理指南:https://pandas.pydata.org/docs/
- Matplotlib 示例库:https://matplotlib.org/stable/gallery/
- Plotly 交互图表教程:https://plotly.com/python/