电商行业分析爬虫:抓取行业数据,进行行业分析

一、前言

电商行业数据分析对于市场研究、竞争分析和商业决策至关重要。通过爬取电商平台的数据,我们可以深入了解市场动态、消费者行为和商品销售情况。本文将介绍如何构建一个电商行业分析爬虫,抓取商品信息、销售数据和用户评价等,并进行数据分析。

二、准备工作

1. 环境搭建

确保已安装Python 3.7或以上版本,推荐使用Visual Studio Code作为开发工具。

2. 安装依赖库

在命令行中输入以下命令,安装爬虫和数据分析所需的库:

pip install requests pandas matplotlib
  • requests:用于发送HTTP请求。
  • pandas:用于数据处理和分析。
  • matplotlib:用于数据可视化。

三、数据抓取

1. 确定数据源

选择目标电商平台(如京东、淘宝等),并确定要抓取的商品类别和数据类型(如商品名称、价格、销量、用户评价等)。

2. 发送请求

使用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

3. 数据解析

利用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

4. 数据存储

将爬取的数据存储为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}")

四、数据预处理

1. 数据清洗

去除重复值和处理缺失值:

def clean_data(df):
    df.drop_duplicates(inplace=True)
    df.dropna(inplace=True)
    return df

2. 数据转换

将数据转换为适合分析的格式:

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

五、数据可视化

1. 价格分布

绘制商品价格分布图:

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()

2. 销量排名

展示销量排名前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爬虫和数据分析技术,深入挖掘电商数据的价值。未来可以进一步拓展功能,如抓取更多平台数据、进行时间序列分析等,以更全面地洞察电商行业动态。

电商行业分析爬虫:抓取行业数据,进行行业分析_第1张图片

你可能感兴趣的:(爬虫,python,电商)