工具准备
使用 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
法律合规
道德约束
控制爬取频率,减少服务器压力。
技术规范