电商行业数据分析对于市场研究、竞争分析和商业决策至关重要。通过爬取电商平台的数据,我们可以深入了解市场动态、消费者行为和商品销售情况。本文将介绍如何构建一个电商行业分析爬虫,抓取商品信息、销售数据和用户评价等,并进行数据分析。
确保已安装Python 3.7或以上版本,推荐使用Visual Studio Code作为开发工具。
在命令行中输入以下命令,安装爬虫和数据分析所需的库:
pip install requests pandas matplotlib
requests
:用于发送HTTP请求。pandas
:用于数据处理和分析。matplotlib
:用于数据可视化。选择目标电商平台(如京东、淘宝等),并确定要抓取的商品类别和数据类型(如商品名称、价格、销量、用户评价等)。
使用requests
库发送HTTP请求,获取商品列表页面的HTML内容:
import requests
def fetch_product_list(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.text
else:
print(f"请求失败,状态码:{response.status_code}")
return None
利用BeautifulSoup
解析HTML内容,提取商品信息:
from bs4 import BeautifulSoup
def parse_product_list(html):
soup = BeautifulSoup(html, 'html.parser')
products = []
items = soup.select('div.gl-item') # 示例:京东商品列表项
for item in items:
product = {}
product['name'] = item.select_one('div.p-name').get_text(strip=True)
product['price'] = item.select_one('div.p-price').get_text(strip=True)
product['sales'] = item.select_one('div.p-commit').get_text(strip=True)
products.append(product)
return products
将爬取的数据存储为CSV文件,以便后续分析:
import pandas as pd
def save_to_csv(data, filename):
df = pd.DataFrame(data)
df.to_csv(filename, index=False, encoding='utf-8-sig')
print(f"数据已保存到 {filename}")
去除重复值和处理缺失值:
def clean_data(df):
df.drop_duplicates(inplace=True)
df.dropna(inplace=True)
return df
将数据转换为适合分析的格式:
def preprocess_data(df):
df['price'] = df['price'].str.extract(r'(\d+\.\d+)').astype(float)
df['sales'] = df['sales'].str.extract(r'(\d+)').astype(int)
return df
绘制商品价格分布图:
import matplotlib.pyplot as plt
def plot_price_distribution(df):
plt.figure(figsize=(10, 6))
plt.hist(df['price'], bins=30, alpha=0.7, color='blue')
plt.xlabel('价格')
plt.ylabel('数量')
plt.title('商品价格分布')
plt.tight_layout()
plt.savefig('price_distribution.png')
plt.show()
展示销量排名前10的商品:
def plot_top_sales(df):
top_products = df.nlargest(10, 'sales')
plt.figure(figsize=(10, 6))
plt.barh(top_products['name'], top_products['sales'], color='skyblue')
plt.xlabel('销量')
plt.title('销量排名前10的商品')
plt.tight_layout()
plt.savefig('top_sales.png')
plt.show()
将上述代码整合到一个完整的脚本中:
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
# 数据抓取
def fetch_product_list(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.text
else:
print(f"请求失败,状态码:{response.status_code}")
return None
# 数据解析
def parse_product_list(html):
soup = BeautifulSoup(html, 'html.parser')
products = []
items = soup.select('div.gl-item')
for item in items:
product = {}
product['name'] = item.select_one('div.p-name').get_text(strip=True)
product['price'] = item.select_one('div.p-price').get_text(strip=True)
product['sales'] = item.select_one('div.p-commit').get_text(strip=True)
products.append(product)
return products
# 数据存储
def save_to_csv(data, filename):
df = pd.DataFrame(data)
df.to_csv(filename, index=False, encoding='utf-8-sig')
print(f"数据已保存到 {filename}")
# 数据预处理
def clean_data(df):
df.drop_duplicates(inplace=True)
df.dropna(inplace=True)
return df
def preprocess_data(df):
df['price'] = df['price'].str.extract(r'(\d+\.\d+)').astype(float)
df['sales'] = df['sales'].str.extract(r'(\d+)').astype(int)
return df
# 数据可视化
def plot_price_distribution(df):
plt.figure(figsize=(10, 6))
plt.hist(df['price'], bins=30, alpha=0.7, color='blue')
plt.xlabel('价格')
plt.ylabel('数量')
plt.title('商品价格分布')
plt.tight_layout()
plt.savefig('price_distribution.png')
plt.show()
def plot_top_sales(df):
top_products = df.nlargest(10, 'sales')
plt.figure(figsize=(10, 6))
plt.barh(top_products['name'], top_products['sales'], color='skyblue')
plt.xlabel('销量')
plt.title('销量排名前10的商品')
plt.tight_layout()
plt.savefig('top_sales.png')
plt.show()
def main():
url = 'https://list.jd.com/list.html?cat=6701,6703,6704' # 示例:京东某商品列表页
html = fetch_product_list(url)
if html:
products = parse_product_list(html)
if products:
save_to_csv(products, 'products.csv')
df = pd.read_csv('products.csv')
df = clean_data(df)
df = preprocess_data(df)
plot_price_distribution(df)
plot_top_sales(df)
if __name__ == "__main__":
main()
通过本文的详细讲解和完整代码示例,我们成功实现了电商行业数据的抓取和分析。从环境搭建到数据可视化,我们学习了如何运用Python爬虫和数据分析技术,深入挖掘电商数据的价值。未来可以进一步拓展功能,如抓取更多平台数据、进行时间序列分析等,以更全面地洞察电商行业动态。