You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现通用商品详情爬虫?多电商搜索结果抓取方案问询

多电商平台商品详情爬取方案:解决跨平台标签属性差异问题

问题背景

要实现类似谷歌商品搜索的功能:用户搜索商品后,系统自动在多个电商平台检索该商品,爬取商品标题、价格、链接等详情并展示在自有网站。当前采用固定标签+属性的方式爬取,但不同电商页面的DOM结构差异极大,该方法无法适配多平台。

附现有思路演示代码(非可运行):

from selenium import webdriver
from bs4 import BeautifulSoup

path='chromedriverpath'
driver = webdriver.Chrome(path)
driver.get('website url')
page_source = driver.page_source
soup = BeautifulSoup(page_source, features="html.parser")
all_detail=soup.find_all("li", attrs={'class':"product-base"})
title=all_detail[0].find('tag', attrs={'attribute':'title'}) #to find title
price=all_detail[0].find('tag', attrs={'attribute':'price'}) #to find price
link=all_detail[0].find('tag', attrs={'attribute':'title'}) #to find link

解决方案

1. 为每个电商平台编写专属解析规则

针对每个目标平台单独定义DOM定位规则,把规则和平台绑定,爬取时根据当前平台调用对应规则。这种方式精准度最高,是多平台爬取的主流方案。

示例实现思路:

# 定义各平台的解析规则
PLATFORM_RULES = {
    "taobao": {
        "product_list": ("div", {"class": "item J_MouserOnverReq"}),
        "title": ("a", {"class": "J_ClickStat"}),
        "price": ("strong", {"class": "J_price"}),
        "link": ("a", {"class": "J_ClickStat"}, "href")
    },
    "jd": {
        "product_list": ("li", {"class": "gl-item"}),
        "title": ("div", {"class": "p-name"}),
        "price": ("div", {"class": "p-price"}),
        "link": ("a", {"target": "_blank"}, "href")
    }
}

def parse_product(soup, platform):
    rules = PLATFORM_RULES.get(platform)
    if not rules:
        raise ValueError(f"Unsupported platform: {platform}")
    
    products = []
    product_items = soup.find_all(*rules["product_list"])
    for item in product_items:
        title_elem = item.find(*rules["title"])
        price_elem = item.find(*rules["price"])
        link_elem = item.find(*rules["link"][0], rules["link"][1])
        
        product = {
            "title": title_elem.get_text(strip=True) if title_elem else None,
            "price": price_elem.get_text(strip=True) if price_elem else None,
            "link": link_elem.get(rules["link"][2]) if link_elem else None
        }
        products.append(product)
    return products

2. 利用通用结构化数据提取(Schema.org)

大部分正规电商平台会遵循Schema.org标准,用itemprop属性标记商品核心信息,这是一种跨平台的通用提取方式。

示例代码:

def parse_with_schema(soup):
    products = []
    # 找到所有标记为Product的元素
    product_items = soup.find_all(itemtype="https://schema.org/Product")
    for item in product_items:
        title = item.find(itemprop="name").get_text(strip=True) if item.find(itemprop="name") else None
        price = item.find(itemprop="price").get_text(strip=True) if item.find(itemprop="price") else None
        link = item.find(itemprop="url").get("href") if item.find(itemprop="url") else None
        products.append({
            "title": title,
            "price": price,
            "link": link
        })
    return products

3. 基于内容特征的模糊匹配(兜底方案)

如果平台没有结构化数据,可基于文本特征做模糊提取:

  • 价格:匹配包含货币符号(¥、$、€)的元素,或class/id含"price"、"price-num"的标签
  • 标题:优先选择h1/h2标签,或class/id含"title"、"name"、"product"的标签
  • 链接:找包裹标题的a标签,或class含"link"、"product-link"的标签

示例代码片段:

def extract_price(soup):
    # 先找带price关键词的class
    price_elem = soup.find(class_=lambda x: x and "price" in x.lower())
    if price_elem:
        return price_elem.get_text(strip=True)
    # 再找带货币符号的文本
    import re
    price_pattern = re.compile(r"(\¥|\$)\d+(\.\d+)?")
    text = soup.get_text()
    match = price_pattern.search(text)
    return match.group() if match else None

4. 进阶:基于视觉或机器学习的页面解析

对于结构极不规范的平台,可尝试:

  • 用计算机视觉工具识别页面中的商品卡片区域
  • 用NLP模型从页面文本中提取商品关键信息
  • 用网页结构分析工具提取核心内容

这种方式开发成本较高,适合有技术积累的场景。

注意事项

  • 反爬规避:每个平台设置独立的请求间隔,使用随机User-Agent,必要时搭配代理IP
  • 动态内容处理:用Selenium/Playwright等待JS渲染完成,或直接调用平台公开API(若有)
  • 合规性:遵守目标平台的robots.txt协议和用户协议,避免过度爬取

内容的提问来源于stack exchange,提问作者Vaibhav Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:16:32