Python爬虫XPath实战:电商商品ID的精准抓取策略

简介: Python爬虫XPath实战:电商商品ID的精准抓取策略
  1. 引言
    在电商数据爬取过程中,商品ID(Product ID)是最关键的字段之一,它通常用于唯一标识商品,并可用于构建商品详情页URL、价格监控、库存查询等场景。然而,不同电商网站的HTML结构差异较大,如何高效、精准地定位商品ID成为爬虫开发的重要挑战。
    本文将介绍如何使用Python结合XPath技术,精准抓取电商网站的商品ID,涵盖以下内容:
    ● XPath基础语法:快速掌握XPath的核心用法
    ● 商品ID的常见位置分析:不同电商网站的ID存储方式
    ● 实战案例:以京东、淘宝为例,演示XPath定位商品ID
    ● 优化策略:提高XPath匹配的稳定性和效率
    ● 完整代码实现:提供可运行的Python爬虫示例
  2. XPath基础与商品ID定位思路
    2.1 XPath简介
    XPath(XML Path Language)是一种用于在XML和HTML文档中定位节点的查询语言。在爬虫开发中,XPath常用于从网页中提取特定数据。
    常用XPath语法
    ● //:从任意层级查找
    ● /:从根节点查找
    ● [@属性="值"]:按属性筛选
    ● text():获取节点文本
    ● contains():模糊匹配
    例如:
    //div[@class="product"]/@id # 获取class="product"的div的id属性
    //a[contains(@href, "product_id")]/@href # 获取包含"product_id"的链接
    2.2 商品ID的常见存储方式
    电商网站的商品ID通常出现在以下位置:
  3. HTML标签属性:如data-productid、data-id
  4. URL参数:如https://item.jd.com/100123456.html(ID为100123456)
  5. JavaScript变量:如var productId = "123456"
  6. Meta标签:如

本文将重点讨论HTML属性和URL参数两种方式的XPath定位方法。
  • 实战案例:京东商品ID抓取
    3.1 目标分析
    京东的商品ID通常出现在:
    ● 商品详情页URL:如https://item.jd.com/100012043978.html(ID=100012043978)
    ● HTML标签属性:如data-sku
    3.2 实现代码
    使用requests和lxml库进行爬取:
    import requests
    from lxml import html
  • def fetch_jd_product_id(url):

    # 代理服务器配置
    proxyHost = "www.16yun.cn"
    proxyPort = "5445"
    proxyUser = "16QMSOML"
    proxyPass = "280651"
    
    # 构造代理认证信息
    proxyMeta = f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"
    proxies = {
        "http": proxyMeta,
        "https": proxyMeta,
    }
    
    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",
        "Proxy-Authorization": f"Basic {proxyUser}:{proxyPass}"  # 部分代理可能需要此头部
    }
    
    try:
        # 发送带代理的HTTP请求
        response = requests.get(url, headers=headers, proxies=proxies, timeout=10)
    
        if response.status_code != 200:
            print(f"请求失败,状态码: {response.status_code}")
            return None
    
        # 解析HTML
        tree = html.fromstring(response.text)
    
        # 方式1:从URL提取商品ID(适用于京东)
        product_id = url.split("/")[-1].split(".")[0]
        print(f"从URL提取的商品ID: {product_id}")
    
        # 方式2:从HTML属性提取(如data-sku)
        product_id_attr = tree.xpath('//*[@data-sku]/@data-sku')
        if product_id_attr:
            print(f"从HTML属性提取的商品ID: {product_id_attr[0]}")
    
        return product_id
    
    except requests.exceptions.RequestException as e:
        print(f"请求发生异常: {str(e)}")
        return None
    

    示例:京东商品页

    jd_url = "https://item.jd.com/100012043978.html"
    fetch_jd_product_id(jd_url)
    输出示例
    从URL提取的商品ID: 100012043978
    从HTML属性提取的商品ID: 100012043978

    1. 实战案例:淘宝商品ID抓取
      4.1 目标分析
      淘宝的商品ID存储方式较为复杂,常见位置:
      ● URL参数:如https://item.taobao.com/item.htm?id=123456789(ID=123456789)
      ● JavaScript变量:如itemId: "123456789"
      4.2 实现代码
      淘宝有反爬机制,需模拟浏览器访问(使用selenium):
      from selenium import webdriver
      from lxml import html
      import time

    def fetch_taobao_product_id(url):
    options = webdriver.ChromeOptions()
    options.add_argument("--headless") # 无头模式
    driver = webdriver.Chrome(options=options)

    driver.get(url)
    time.sleep(3)  # 等待页面加载
    
    # 方式1:从URL提取ID
    product_id = url.split("id=")[-1].split("&")[0]
    print(f"从URL提取的商品ID: {product_id}")
    
    # 方式2:从HTML解析(淘宝可能动态渲染,需检查JS)
    page_source = driver.page_source
    tree = html.fromstring(page_source)
    
    # 尝试匹配JS变量(淘宝可能存储为window.g_config.itemId)
    js_id = tree.xpath('//script[contains(text(), "itemId")]/text()')
    if js_id:
        print("从JS变量提取的商品ID:", js_id[0].split("itemId:")[1].split(",")[0].strip(' "'))
    
    driver.quit()
    return product_id
    

    示例:淘宝商品页

    taobao_url = "https://item.taobao.com/item.htm?id=123456789"
    fetch_taobao_product_id(taobao_url)
    输出示例
    从URL提取的商品ID: 123456789
    从JS变量提取的商品ID: 123456789

    1. XPath优化策略
      5.1 提高XPath的稳定性
      ● 避免绝对路径:如/html/body/div[1]/div[2]/...容易因页面变动失效
      ● 使用contains()模糊匹配:如//div[contains(@class, "product")]
      ● 结合@class和@id:如//div[@class="product-info" and @data-id]
      5.2 动态页面的处理
      ● Selenium/Auto.js:适用于JS渲染的页面(如淘宝)
      ● Pyppeteer/Playwright:更高效的Headless浏览器方案
      5.3 异常处理
      try:
      product_id = tree.xpath('//div[@data-productid]/@data-productid')[0]
      except IndexError:
      print("未找到商品ID,尝试备用方案...")
      product_id = url.split("id=")[1]
    2. 结论
      本文介绍了如何利用XPath精准抓取电商商品ID,并提供了京东、淘宝的实战代码。关键点总结:
    3. 优先从URL提取(如京东、淘宝的URL包含ID)
    4. 结合HTML属性(如data-sku、data-productid)
    5. 动态页面需用Selenium(如淘宝的JS渲染)
    6. 优化XPath表达式(避免绝对路径,使用模糊匹配)
    相关文章
    |
    16天前
    |
    缓存 API 网络架构
    淘宝item_search_similar - 搜索相似的商品API接口,用python返回数据
    淘宝联盟开放平台中,可通过“物料优选接口”(taobao.tbk.dg.optimus.material)实现“搜索相似商品”功能。该接口支持根据商品 ID 获取相似推荐商品,并返回商品信息、价格、优惠等数据,适用于商品推荐、比价等场景。本文提供基于 Python 的实现示例,包含接口调用、数据解析及结果展示。使用时需配置淘宝联盟的 appkey、appsecret 和 adzone_id,并注意接口调用频率限制和使用规范。
    |
    25天前
    |
    数据采集 存储 前端开发
    动态渲染爬虫:Selenium抓取京东关键字搜索结果
    动态渲染爬虫:Selenium抓取京东关键字搜索结果
    |
    27天前
    |
    数据采集 数据挖掘 测试技术
    Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
    本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
    107 0
    |
    1月前
    |
    数据采集 存储 前端开发
    Java爬虫性能优化:多线程抓取JSP动态数据实践
    Java爬虫性能优化:多线程抓取JSP动态数据实践
    |
    20天前
    |
    数据采集 存储 JSON
    地区电影市场分析:用Python爬虫抓取猫眼/灯塔专业版各地区票房
    地区电影市场分析:用Python爬虫抓取猫眼/灯塔专业版各地区票房
    |
    1月前
    |
    数据采集 存储 Web App开发
    Python爬虫库性能与选型实战指南:从需求到落地的全链路解析
    本文深入解析Python爬虫库的性能与选型策略,涵盖需求分析、技术评估与实战案例,助你构建高效稳定的数据采集系统。
    203 0
    |
    18天前
    |
    数据采集 监控 调度
    应对频率限制:设计智能延迟的微信读书Python爬虫
    应对频率限制:设计智能延迟的微信读书Python爬虫
    |
    18天前
    |
    API Python
    Python采集淘宝店铺所有商品API接口指南
    淘宝没有公开的官方API供采集店铺商品数据,但可以通过以下几种方法获取商品信息。需要注意的是,淘宝有严格的反爬机制,直接采集可能违反其服务条款。
    |
    21天前
    |
    数据采集 机器学习/深度学习 数据可视化
    Python量化交易:结合爬虫与TA-Lib技术指标分析
    Python量化交易:结合爬虫与TA-Lib技术指标分析
    |
    28天前
    |
    算法 程序员 API
    电商程序猿开发实录:淘宝商品python(2)
    本文分享了开发者在对接淘宝商品详情API过程中的真实经历,涵盖权限申请、签名验证、限流控制、数据解析及消息订阅等关键环节,提供了实用的Python代码示例,帮助开发者高效调用API,提升系统稳定性与数据处理能力。

    热门文章

    最新文章

    推荐镜像

    更多