Scrapy -无法从表中获取正确的数据

iibxawm4  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(129)

我正在尝试从链接https://www.moneycontrol.com/mutual-funds/canara-robeco-blue-chip-equity-fund-direct-plan/portfolio-holdings/MCA212enter image description here上的特定表中提取数据
HTML中的表ID是-equityCompleteHoldingTable请参考上面的屏幕截图,并帮助从网站表中获取股票数据作为字典。
谢谢。

    • 我所尝试的**在Scrapy Shell中,我正在尝试以下命令-

scrapy shell 'https://www.moneycontrol.com/mutual-funds/canara-robeco-蓝筹股-股票-基金-直接计划/投资组合-控股/MCA212'

table = response.xpath('//*[@id="equityCompleteHoldingTable"]')
rows = table.xpath('//tr')
row =  rows[2]
row.xpath('td//text()')[0].extract()
  • --〉返回"股票数量"。这里提取的数据来自上面网页的另一个表。
    我发现这个表正在使用的类也在其他表中使用。其中一个表实际上返回了数据"股票数量"。
    • 我所期望的**我期望数据来自equityCompleteHoldingTable表(上面的屏幕截图)
khbbv19g

khbbv19g1#

您的主要问题是没有使用相对XPath表达式。
例如,rows = table.xpath("//tr")是一个绝对xpath路径。无论选择器嵌套得有多深,绝对路径都是从页面的根开始分析的。
相对路径查询从当前选择器元素开始解析。要使用相对xpath表达式,您只需添加.作为第一个字符,类似于文件系统相对路径。例如:rows = table.xpath(".//tr")
记住这一点,你可能会有更多的运气与以下:

>>> table = response.xpath('//*[@id="equityCompleteHoldingTable"]')
>>> rows = table.xpath('.//tr')
>>> row = rows[2]
>>> row.xpath('.//td/text()').extract()[3:]
['Banks', '30.99', '8247.9', '9.34%', '0.14%', '9.69% ', '7.66% ', '86.56 L', '0.00 ', 'Large Cap', '75.79']
>>>

相关问题