首页 > 解决方案 > Scrapy - 从页面上的其他文本构建 xpath 响应时谓词无效

问题描述

尝试从页面上的文本构建表 id 的页面中抓取数据。由于每个页面都有不同的文本,因此每个页面的 table id 都是唯一的。我可以通过将字符串放在一起来获取表 id,但无法让 id 在我的 xpath 语句中工作。

当我在下面的语句中对表 ID 进行硬编码时,我得到了成功的响应

for zodiac in response.xpath('//table[@id="Taurus-the-Bull"]/tbody/tr'):

但是当我尝试从页面上的字符串构建 id

theid = "Taurus-the-Bull"

for zodiac in response.xpath('//table[@id=f"{theid}"]/tbody/tr'):

我不断得到ValueError: XPath error: Invalid predicate in //table[@id=f"{theid}"]/tbody/tr&我不知道为什么?我很确定f"{theid}"评估为Taurus-the-Bull但不知道为什么存在 xpath 错误...

标签: pythonweb-scrapingxpathscrapylxml

解决方案


我认为您确实以错误的方式使用了f 字符串- 您应该放在f字符串的开头。所以这就是你应该写的:

for zodiac in response.xpath(f'//table[@id="{theid}"]/tbody/tr'):

推荐阅读