Scrapy爬取返回指定元素外数据的问题排查
问题排查与解决办法
核心原因:XPath路径未限定搜索范围
你使用的//a[contains(@href,'/player/')]/span/span/text()是全局搜索路径(//代表从文档根节点开始遍历所有匹配节点),哪怕你先获取了batting_scorecard节点,但后续XPath没有基于这个节点做相对搜索,会直接遍历整个页面,自然会命中裁判表、投球表等其他区域的球员链接。次要原因:目标表格的class存在复用
页面里不止击球得分表使用ci-scorecard-table这个class,投球表、裁判相关表格也可能复用了该类名。如果获取batting_scorecard时没有更精准的筛选,拿到的可能是多个表格,进一步扩大了无关数据的匹配范围。
解决办法
限定XPath相对搜索范围
基于已获取的batting_scorecard节点,使用相对路径搜索(开头用.//,表示从当前节点内部查找):.//a[contains(@href,'/player/')]/span/span/text()这样只会从目标击球表内部提取球员姓名,不会涉及页面其他区域。
精准定位击球得分表
为避免误获取同class的其他表格,可结合击球表的专属容器特征来定位://div[contains(@class,'ci-batting-table')]/table[contains(@class,'ci-scorecard-table')]先锁定击球表的专属父容器,再获取内部表格,确保拿到的是正确的目标数据区域。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

