【问题标题】:how to make python request.get wait a few seconds?如何让 python request.get 等待几秒钟?
【发布时间】: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: requestslxml 永远不会执行页面中的 JS;您必须对这种行为进行逆向工程并自己进行,使用 Selenium 之类的东西来驱动 确实执行 JavaScript 的实际浏览器。
  • 因此在这里延迟是没有意义的;该延迟是由浏览器执行的额外代码(JavaScript 代码)引起的。这不会在您的脚本中发生。
  • 该死!!观察到几乎每一个请求,但找不到一个获取该数据的请求(当然是它的 js,但我想也必须有一个请求)我现在可以说的是,无论你等待多长时间,你永远找不到那个页面源中的元素,因为即使在页面完全加载后它也不存在于请求的响应中。必须有另一个电话,只是找不到它:-(

标签: python python-2.7 lxml python-requests


【解决方案1】:

我建议等待元素发生变化。

找到下面的代码块来帮助你。

def wait_while(condition, timeout, delta=1):
    """
    @condition: lambda function which checks if the text contains "REALTIME"
    @timeout: Max waiting time
    @delta: time after which another check has to be made
    """
    max_time = time.time() + timeout
    while max_time > time.time():
        if condition():
            return True
        time.sleep(delta)
    return False

【讨论】:

  • 您需要接受答案或提出自己的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 2017-07-20
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多