在数据驱动的时代,从网页爬取数据到完成分析的全流程能力已成为必备技能。本文将系统讲解从网页数据爬取到数据分析的完整流程,结合 Python 的 Requests、BeautifulSoup 和 Pandas 等工具,帮助你掌握从数据获取到洞察提炼的全链条技术。
一、数据爬取基础准备
数据爬取的核心是从网页中获取有效信息,需要做好工具准备和目标分析:
1. 必备工具安装
首先安装所需的 Python 库:
bash
pip install requests beautifulsoup4 pandas numpy matplotlib
2. 爬取目标分析
以爬取某电商平台商品信息为例,需明确:
- 目标网址:分析商品列表页 URL 规律
- 数据字段:商品名称、价格、销量、评分等
- 反爬机制:查看是否需要处理 Cookie、请求头或验证码
二、网页数据爬取实战
使用 Requests 获取网页内容,BeautifulSoup 解析数据:
1. 发送请求与获取内容
python
import requests
from bs4 import BeautifulSoup
import time
# 设置请求头模拟浏览器
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/114.0.0.0 Safari/537.36",
"Referer": "https://www.example.com"
}
# 爬取多页数据
all_products = []
for page in range(1, 6): # 爬取1-5页
url = f"https://www.example.com/products?page={page}"
try:
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status() # 检查请求是否成功
soup = BeautifulSoup(response.text, "lxml")
# 解析页面数据
products = soup.select(".product-item")
for item in products:
# 提取商品信息
name = item.select_one(".product-name").get_text(strip=True)
price = item.select_one(".product-price").get_text(strip=True)
sales = item.select_one(".product-sales").get_text(strip=True)
rating = item.select_one(".product-rating").get_text(strip=True)
all_products.append({
"名称": name,
"价格": price,
"销量": sales,
"评分": rating,
"页码": page
})
print(f"已爬取第{page}页,共{len(products)}个商品")
time.sleep(1) # 控制爬取速度
except Exception as e:
print(f"爬取第{page}页失败:{e}")
continue
2. 数据存储
将爬取的数据保存为 CSV 格式,便于后续分析:
python
import pandas as pd
# 创建DataFrame
df = pd.DataFrame(all_products)
# 保存为CSV文件
df.to_csv("products.csv", index=False, encoding="utf-8-sig")
print(f"数据爬取完成,共{len(df)}条记录")
三、数据清洗与预处理
原始数据往往存在格式问题,需要进行清洗:
python
import pandas as pd
import re
# 读取数据
df = pd.read_csv("products.csv")
# 查看数据基本情况
print(f"原始数据形状:{df.shape}")
print(df.info())
# 1. 处理价格字段
df["价格"] = df["价格"].apply(lambda x: float(re.sub(r"[^\d.]", "", x)))
# 2. 处理销量字段
def parse_sales(s):
s = re.sub(r"[^\d]", "", s)
return int(s) if s else 0
df["销量"] = df["销量"].apply(parse_sales)
# 3. 处理评分字段
df["评分"] = df["评分"].apply(lambda x: float(x) if x else 0)
# 4. 去除重复值
df = df.drop_duplicates(subset=["名称"])
# 5. 处理缺失值
df = df.dropna(subset=["名称", "价格"])
print(f"清洗后数据形状:{df.shape}")
# 保存清洗后的数据
df.to_csv("products_cleaned.csv", index=False, encoding="utf-8-sig")
四、数据分析与可视化
利用 Pandas 进行数据分析,Matplotlib/Seaborn 可视化结果:
python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 设置中文显示
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei"]
sns.set_style("whitegrid")
# 读取清洗后的数据
df = pd.read_csv("products_cleaned.csv")
# 1. 基本统计分析
print("价格统计描述:")
print(df["价格"].describe())
print("\n销量前10的商品:")
print(df.sort_values("销量", ascending=False).head(10)[["名称", "销量", "价格"]])
# 2. 价格分布分析
plt.figure(figsize=(10, 6))
sns.histplot(df["价格"], kde=True, bins=20)
plt.title("商品价格分布")
plt.xlabel("价格(元)")
plt.ylabel("数量")
plt.show()
# 3. 销量与价格关系
plt.figure(figsize=(10, 6))
sns.scatterplot(data=df, x="价格", y="销量", alpha=0.6)
sns.regplot(data=df, x="价格", y="销量", scatter=False, color="red")
plt.title("商品价格与销量关系")
plt.show()
# 4. 评分与销量关系
plt.figure(figsize=(10, 6))
sns.boxplot(data=df, x="评分", y="销量")
plt.title("商品评分与销量关系")
plt.show()
# 5. 价格区间销量分析
df["价格区间"] = pd.cut(
df["价格"],
bins=[0, 50, 100, 200, 500, float("inf")],
labels=["0-50", "51-100", "101-200", "201-500", "500以上"]
)
price_sales = df.groupby("价格区间")["销量"].sum().reset_index()
plt.figure(figsize=(10, 6))
sns.barplot(data=price_sales, x="价格区间", y="销量")
plt.title("不同价格区间的总销量")
plt.ylabel("总销量")
plt.show()
五、全流程注意事项与优化
-
爬取伦理与法律:
- 遵守网站 robots 协议
- 控制爬取频率,避免给服务器造成压力
- 不爬取敏感或受版权保护的数据
-
反爬应对策略:
- 使用随机 User-Agent
- 添加合理的请求间隔
- 必要时使用代理 IP 池
- 处理 Cookie 和 Session 保持
-
数据分析优化:
- 数据清洗要彻底,否则会影响分析结果
- 根据业务场景选择合适的分析方法
- 可视化图表要简洁明了,突出核心结论
通过本文的全流程讲解,你已经掌握了从网页爬取到数据分析的完整技能链。实际应用中,需根据目标网站特点调整爬取策略,结合具体业务需求设计分析维度。随着实践深入,你会发现数据爬取与分析的核心价值在于将原始数据转化为有价值的洞察,为决策提供支持。无论是市场调研、竞品分析还是用户研究,这套全流程方法都能帮助你高效完成数据驱动的探索工作。
393

被折叠的 条评论
为什么被折叠?



