Yahoo!的HTML抓取工具!财务使用lxml和请求返回错误的值

时间:2019-02-28 01:13:07

标签: python html request lxml

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”],则上面的结果可以达到预期的结果,即207.5.74。有人知道为什么会这样吗?我原本希望得到81.48,这可以在AMZN股票的源代码中看到。

编辑:我发现了一些奇怪的事情。.在HTML脚本中看到的东西始终在26岁时消失。因此,当我使用[@ data-reactid =“ 66”]时,我得到了想要的东西。类似地,118-92 =26。这延续到其他几种情况。任何想法为什么会这样?

1 个答案:

答案 0 :(得分:3)

看起来是个错误?数据反应堆值按升序排序,与相应范围的文本值不匹配。因此,跨度的文本值按文档顺序打印,而对数据反应堆值进行排序后,它们将被错误地匹配。 IE 15返回1,636.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']
相关问题