在没有driver.refresh()的情况下搜索直播体育数据?

时间:2017-01-29 10:41:34

标签: python ajax selenium web-scraping phantomjs

我的目标是在网站发生变化时从网站上删除实时数据。 这是一个示例URL: http://www.liveticker.com/spiel/6HXLRTtd/#spiel-statistiken;0

我使用python,selenium和time来循环。虽然我有点想得到我想要的Firefox我想使用PhantomJS(没有几个浏览器窗口打开),但它会在1-4刷新后停止刮擦。

我猜测为什么会发生这种情况:如果您手动访问该页面几次点击刷新,则会收到一条屏幕消息,告知您无需刷新。但这只是猜测,因为Firefox似乎仍然可以抓取数据。

所以我想知道为什么PhantomJS会停止刮擦以及如何处理它。是否有一个方法用python连续刮取实时数据(我猜是AJAX)而无需刷新或重新加载页面?

希望你能提供帮助,我对这一切都很陌生,到目前为止还没有找到任何相关线索。

以下是我的功能:

def get_games_stats(url): 
  driver.get(url)
  t=2
  starttime=time.time()
  t=float(t)

  while True:
    time.sleep(t - ((time.time() - starttime) % t))
    driver.refresh()        
    time.sleep(5)

    tabelle = driver.find_element_by_id("tab-statistics-0-statistic")
    text_tabelle = tabelle.text
    x = text_tabelle.encode( "utf-8" )
    x= [int(s) for s in re.findall(r'\b\d+\b', x)]

    team_a =  x[::2]
    team_b = x[1::2]
    print team_a, team_b

1 个答案:

答案 0 :(得分:0)

正如您所提到的,有时可能会出现页面刷新警报。这可能会阻止您的代码执行。尝试处理此警报,如下所示:

from selenium.common.exceptions import NoAlertPresentException

while True:
    time.sleep(t - ((time.time() - starttime) % t))
    driver.refresh()        
    time.sleep(5)

    # This might not work with PhantomJS
    #try:
    #    driver.switch_to_alert().accept()
    #except NoAlertPresentException:
    #    pass

    try:
        driver.execute_script("window.confirm = function(msg) { return true; }")
    except:
        pass

    tabelle = driver.find_element_by_id("tab-statistics-0-statistic")
    text_tabelle = tabelle.text
    x = text_tabelle.encode( "utf-8" )
    x= [int(s) for s in re.findall(r'\b\d+\b', x)]

    team_a =  x[::2]
    team_b = x[1::2]
    print team_a, team_b