Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 雅虎的HTML刮刀!使用lxml和请求返回错误值的财务_Python_Html_Request_Lxml - Fatal编程技术网

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

Python 雅虎的HTML刮刀!使用lxml和请求返回错误值的财务,python,html,request,lxml,Python,Html,Request,Lxml,如果我写了[@data reactid=“92”],上面输出了预期的结果,结果是2075.74。有人知道为什么会这样吗?我期望得到81.48,这可以在AMZN股票的源代码中看到 编辑:我发现了一些奇怪的东西。。我在HTML脚本中看到的结果始终是26。所以当我使用[@data reactid=“66”]时,我得到了我想要的东西。同样,118-92=26。这一情况延续到其他几个案例中。你知道为什么吗?看起来是个bug?数据ID值按升序排序,与相应跨距的文本值不匹配。因此,跨距的文本值是按文档顺序打印

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


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

看起来是个bug?数据ID值按升序排序,与相应跨距的文本值不匹配。因此,跨距的文本值是按文档顺序打印的,而数据ID值是按顺序排序的,因此它们的匹配不正确。IE 15返回1636.40,实际上是41

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

看起来像只虫子。您可以省略该类,只需执行数据reactid,它就会给出错误的答案。您对html的阅读是正确的。
<span class="Trsdu(0.3s) " data-reactid="41">1,636.40</span>
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']