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

Scrapy XPath选择器无法提取指定URL目标元素问题求助

解决Scrapy爬取Basketball Reference数据时XPath返回None的问题

问题原因

Basketball Reference网站的部分表格内容(包括Four Factors表格)会将<tbody>标签包裹在HTML注释中,Scrapy默认不会解析注释内的HTML结构,导致直接使用包含tbody的XPath无法定位到目标元素。

解决方案

方案1:提取注释内的HTML内容解析

在Scrapy Shell中执行以下代码,先提取注释中的表格内容,再进行解析:

# 获取Four Factors表格内的注释节点
comment_node = response.xpath("//div[@id='div_four_factors']/table/comment()").get()
if comment_node:
    # 去除注释标签,提取内部HTML
    table_html = comment_node.strip()[4:-3]
    # 将HTML转为Scrapy Selector
    table_selector = scrapy.Selector(text=table_html)
    # 提取目标文本
    target_text = table_selector.xpath("//tr[1]/td[1]/text()").get()
    print(target_text)

方案2:使用JS渲染工具获取动态页面

如果网站大量内容依赖JS渲染,可以使用scrapy-playwright来加载渲染后的页面,此时直接使用原XPath即可:

  1. 安装依赖:pip install scrapy-playwright
  2. 在Scrapy项目的settings.py中添加配置:
DOWNLOAD_HANDLERS = {
    "http": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
    "https": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
}
PLAYWRIGHT_LAUNCH_OPTIONS = {"headless": True}
  1. 在Scrapy Shell中请求渲染后的页面:
fetch("https://www.basketball-reference.com/boxscores/202110190LAL.html", meta={"playwright": True})
target_text = response.xpath("//div[@id='div_four_factors']/table/tbody/tr[1]/td[1]/text()").get()
print(target_text)

方案3:调整XPath路径(简易尝试)

部分情况下,原始HTML中可能没有tbody标签,可尝试去掉tbody节点:

target_text = response.xpath("//div[@id='div_four_factors']/table/tr[1]/td[1]/text()").get()
print(target_text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:50:23