2017-01-29 4 views
1

mein Ziel ist es, Live-Daten von einer Website zu schaben, wie es sich ändert. Hier ist ein Beispiel URL: http://www.liveticker.com/spiel/6HXLRTtd/#spiel-statistiken;0Scrappen von Live-Sport-Daten ohne driver.refresh()?

Ich benutze Python, Selen und Zeit für die Schleife. Während ich mit Firefox irgendwie das gewollt habe, was ich will, wollte ich PhantomJS benutzen (um nicht mehrere Browser-Fenster öffnen zu müssen), aber es hört auf nach 1 bis 4 Aktualisierungen zu scrapen.

Meine Vermutung, warum dies passiert: Wenn Sie die Seite manuell besuchen, um einen Treffer zu aktualisieren, erhalten Sie eine Bildschirmmeldung, die Ihnen sagt, dass eine Aktualisierung nicht notwendig ist. Aber das ist nur eine Vermutung, da Firefox immer noch in der Lage ist, die Daten zu kratzen.

Also frage ich mich, warum PhantomJS aufhört zu kratzen und was man dagegen tun kann. Gibt es eine Methode mit Python, um kontinuierlich Live-Daten zu scratzen (AJAX, denke ich), ohne die Seite aktualisieren oder neu laden zu müssen?

Hoffe, du kannst helfen, ich bin ziemlich neu in all dem und habe bisher keine relevanten Hinweise gefunden.

Hier ist meine Funktion nur für den Fall:

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 

Antwort

0

Wie Sie erwähnt haben, manchmal nach Aktualisierung der Seite Alarm Macht erscheint. Dies könnte die Ausführung von Code blockieren. Versuchen Sie, diese Warnung wie folgt zu behandeln:

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 
+0

Danke für die schnelle Antwort! Dies warf mir einen Fehler: WebDriverException: Nachricht: Ungültige Befehlsmethode und verwiesen nach dem Funktionsaufruf auf Zeile 'driver.switch_to_alert(). Accept()' – user2822564

+0

Überprüfen Sie die aktualisierte Antwort – Andersson

+0

Funktioniert wie ein Charme! Danke noch einmal. – user2822564

Verwandte Themen