【发布时间】:2014-12-04 11:50:46
【问题描述】:
我想获得一些 html 爬取的经验,所以我想看看我是否可以获取以下站点的一些值:http://www.iex.nl/Aandeel-Koers/11890/Royal-Imtech/koers.aspx
此网站显示 imtech 股票的价格。 如果您查看该网站,您会看到 1 个以粗体显示的数字,这是股票的价格。
您可能已经看到,这个价格会发生变化,这没关系。我只想要此时运行脚本时的值。
但如果您重新加载页面,您可能会注意到它首先显示“laatste koers”,然后在延迟 1 秒后显示“实时”
您现在可能已经知道,我对“实时”值感兴趣。
这是我的问题,我如何获得这个值,我在不同的地方尝试过 time.sleep(2)。我已经根据请求尝试了超时。两者都不起作用。
我该如何解决这个问题?
from lxml import html
import requests
pagina = 'http://www.iex.nl/Aandeel-Koers/11890/Royal-Imtech/koers.aspx'
page = requests.get(pagina)
tree = html.fromstring(page.text)
koers = tree.xpath('//span[@class="RealtimeLabel"]/text()')
prices = tree.xpath('//span[@id="ctl00_ctl00_Content_LeftContent_PriceDetails_lblLastPrice"]/text()')
print koers[0], pagina.split("/")[5], prices[0]
我得到这样的输出
Laatste koers Royal-Imtech 0,093
虽然我想要这样的输出
Realtime Royal-Imtech 0,093
【问题讨论】:
-
我怀疑“Laatste koers”正在被页面上的某些 javascript 更改为“Realtime”,在这种情况下,无法轻松查看脚本执行后页面的外观。我认为
requests根本不执行用户端脚本。 -
它是通过javascript更改的,但是“Laatste koers”也是通过javascript插入的
-
@zazga:
requests和lxml永远不会执行页面中的 JS;您必须对这种行为进行逆向工程并自己进行,或使用 Selenium 之类的东西来驱动 确实执行 JavaScript 的实际浏览器。 -
因此在这里延迟是没有意义的;该延迟是由浏览器执行的额外代码(JavaScript 代码)引起的。这不会在您的脚本中发生。
-
该死!!观察到几乎每一个请求,但找不到一个获取该数据的请求(当然是它的 js,但我想也必须有一个请求)我现在可以说的是,无论你等待多长时间,你永远找不到那个页面源中的元素,因为即使在页面完全加载后它也不存在于请求的响应中。必须有另一个电话,只是找不到它:-(
标签: python python-2.7 lxml python-requests