雅虎的HTML刮刀!使用lxml和请求返回错误值的财务

2024-07-03 06:29:10 发布

您现在位置:Python中文网/ 问答频道 /正文

from lxml import html
import requests

page = requests.get('https://finance.yahoo.com/quote/AMZN?p=AMZN&.tsrc=fin-srch')
tree = html.fromstring(page.content)

peRatio = tree.xpath('//span[@class="Trsdu(0.3s) "] [@data-reactid="92"]/text()')
peRatio

如果我写了[@data reactid=“92”],上面的输出就是预期的结果,它给出了2075.74。有人知道为什么会这样吗?我期望得到81.48,这可以在AMZN股票的源代码中看到。你知道吗

编辑:我发现了一些奇怪的东西。。我在HTML脚本中看到的内容一直是26。所以当我使用[@data reactid=“66”]时,我得到了我想要的。同样,118-92=26。这一点也适用于其他几个案例。你知道为什么吗?你知道吗


Tags: fromhttpsimporttreedatagethtmlpage
1条回答
网友
1楼 · 发布于 2024-07-03 06:29:10

看起来是虫子?数据ID值按升序排序,与相应范围的文本值不匹配。因此,跨域的文本值是按文档顺序打印的,而数据ID值是按顺序排序的,因此它们的匹配不正确。IE 15返回1636.40,实际上是41。你知道吗

<span class="Trsdu(0.3s) " data-reactid="41">1,636.40</span>

我正在检查我的旧代码,看看是否可以修复xpath以使其正常工作。下面是我如何看待这个问题的。如果我找到一个合适的解决方案,会在我回来的几个小时内更新,如果其他人有答案,会删除这个。你知道吗

print(tree.xpath('//span[@class="Trsdu(0.3s) "]/text()'))
print(tree.xpath('//span[@class="Trsdu(0.3s) "]/@data-reactid'))

['1,636.40', '1,628.18', '1,639.00 x 900', '1,640.25 x 900', '3,148,824', '6,293,333', '806.108B', '1.71', '81.48', '20.14', 'N/A', '2,075.74']
['15', '20', '25', '30', '43', '48', '56', '61', '66', '71', '87', '92']

相关问题 更多 >