电商商品数据分析工具:跨平台数据爬取与可视化实践

花了些时间做了一个电商平台商品数据分析的小项目,主要功能是从TaoBao、JingDong、PinDuoDuo三个平台爬取指定商品的价格和销量数据,然后进行可视化分析并保存到数据库。今天想分享一下这个项目的开发思路和实现过程,希望能给同样对数据爬取和分析感兴趣的朋友一些参考。

项目背景与目标

做这个项目的初衷很简单:现在电商平台太多,想快速了解同一商品在不同平台的价格差异和销售情况,手动去一个个平台查太麻烦了。于是就想能不能做一个工具,自动爬取这些数据并生成直观的分析图表。

项目的核心目标有三个:

  1. 自动从主流电商平台爬取商品数据(价格、销量)
  2. 对爬取的数据进行可视化分析,直观展示各平台差异
  3. 将数据持久化存储,方便后续分析

技术栈选择

考虑到爬取电商网站需要处理动态页面和登录问题,数据分析需要便捷的处理库,最终选择了这些技术:

  • 爬虫核心:Selenium(处理动态加载和登录)+ BeautifulSoup(解析HTML)
  • 数据分析:Pandas(数据处理)
  • 可视化:Matplotlib(生成图表)
  • 数据库:MySQL(数据存储)
  • 开发语言:Python(生态丰富,库支持完善)

核心功能实现

1. 统一的爬虫架构设计

我设计了一个ECommerceScraper类作为核心,把各个平台的爬取逻辑封装起来,这样既保证了代码的整洁,也方便后续扩展更多平台。

class ECommerceScraper:
    def __init__(self, db_config=None):
        # 数据库配置初始化
        self.db_config = db_config or {
            'host': 'localhost',
            'user': 'root',
            'password': '123456',
            'database': 'product_data'
        }
        self.driver = None

2. 多平台数据爬取实现

不同平台的页面结构差异很大,需要针对性处理:

  • TaoBao/JingDong:需要登录才能获取完整数据,所以采用非无头模式启动浏览器,预留60秒时间让用户扫码登录
  • PinDuoDuo:移动端页面结构更简单,选择爬取移动端页面,不需要登录

以淘宝爬取为例,核心逻辑是:

  1. 初始化浏览器并打开搜索页面
  2. 等待用户登录
  3. 滚动页面加载更多商品
  4. 解析页面提取价格和销量
  5. 统一数据格式返回
def get_taobao_data(self, keyword='huaweipurax', max_items=10):
    print("开始爬取淘宝数据...")
    self.init_driver(headless=False)  # 淘宝需要登录,不使用无头模式
    
    try:
        url = f"https://s.taobao.com/search?q={keyword}"
        self.driver.get(url)
        
        # 等待用户扫码登录
        print("请在60秒内扫码登录...")
        WebDriverWait(self.driver, 60).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, 'div.doubleCard--gO3Bz6bu'))
        )
        
        # 滚动加载更多商品
        for _ in range(3):
            self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
            time.sleep(2)
            
        # 解析数据...

销量数据的处理比较有意思,不同平台的展示格式不同(比如"1万+"需要转换为10000),需要做特殊处理:

# 处理销量文本(如"1万+"转换为10000)
if '万' in sales_text:
    sales = float(''.join(filter(str.isdigit, sales_text))) * 10000
else:
    sales = float(''.join(filter(str.isdigit, sales_text)))

3. 数据可视化分析

爬取到数据后,用Matplotlib生成了两种图表:

  • 各平台平均价格柱状图
  • 平均价格与总销量双轴对比图

这样可以直观地看出价格和销量之间的关系,比如某个平台价格低但销量高,或者价格高但销量也不错的情况。

def visualize_data(self, df):
    # 图表生成逻辑...
    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
    # 柱状图展示平均价格
    # 双轴图展示价格与销量关系
    plt.savefig('ecommerce_analysis_updated.png', dpi=300)
    plt.show()

4. 数据持久化

为了方便后续分析,实现了两种数据保存方式:

  • 保存到MySQL数据库(自动创建数据库和表)
  • 导出为CSV文件(带时间戳,避免重名)

数据库操作部分做了异常处理,确保连接会被正确关闭:

def save_to_mysql(self, data_list):
    if not data_list:
        print("没有数据需要保存")
        return
        
    try:
        self.create_database_table()  # 自动创建表结构
        conn = pymysql.connect(**self.db_config)
        cursor = conn.cursor()
        
        # 批量插入数据
        insert_query = "INSERT INTO products (platform, price, sales) VALUES (%s, %s, %s)"
        records = [(item['platform'], item['price'], item['sales']) for item in data_list]
        cursor.executemany(insert_query, records)
        conn.commit()
    except pymysql.Error as e:
        print(f"保存数据到数据库时出错: {e}")
    finally:
        if conn:
            conn.close()

5. 灵活的使用方式

为了方便不同用户使用,支持两种参数输入方式:

  • 命令行参数(适合熟悉命令行的用户)
  • 交互式输入(适合新手用户)
# 命令行参数处理
parser = argparse.ArgumentParser(description="电商平台商品数据采集分析工具")
parser.add_argument('--host', help='数据库主机地址')
parser.add_argument('--keyword', help='商品关键词')
# 更多参数...

# 交互式输入
host = args.host if args.host else input("请输入数据库主机地址 (默认 localhost): ") or 'localhost'

遇到的问题与解决方案

1.反爬机制 :PinDuoDuo对爬虫比较敏感,多次爬取可能会被限制。解决方案是添加合理的请求间隔,模拟真实用户行为。

2.页面结构变化 :电商平台经常会调整页面结构,导致选择器失效。解决方案是在代码中加入异常处理,即使某个字段解析失败也不会影响整体运行。

3.登录状态维持 :TaoBao和JingDong的登录状态有时会过期,需要重新扫码。目前采用的是每次运行都重新登录的方式,后续可以考虑加入Cookie持久化。

项目使用效果

运行程序后,会自动完成:

  1. 打开浏览器爬取三个平台的数据
  2. 在控制台显示爬取的数据
  3. 生成可视化图表并显示
  4. 保存数据到数据库和CSV文件

比如搜索"huaweipurax",会得到各平台的价格对比和销量分析,从图中可以很直观地看出哪个平台的价格更有优势,哪个平台的销量更好。

总结

这个项目虽然不算复杂,但涵盖了数据爬取、处理、可视化和存储的完整流程,非常适合作为Python数据分析的练手项目。通过这个项目,我对Selenium的使用、数据解析和可视化都有了更深入的理解。

如果你也想做类似的项目,建议从一个平台开始,逐步扩展,遇到问题时多查看官方文档和社区讨论。爬虫项目经常会因为网站更新而失效,保持代码的可维护性和可扩展性很重要。

项目代码已经同步在GitHub/Gitee,欢迎提出改进建议!
GitHub/Gitee

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐