2017-03-23 1 views
0

Ich schaute auf verschiedene Post mit ähnlicher Frage, aber ich bin nicht in der Lage, den bestimmten Wert zu finden, die ich suche.BeautifulSoup für Div innerhalb div (s) in Python

Ich verwende diesen Code:

import bs4 as bs 
import urllib2 

response = urllib2.urlopen('https://www.meteomedia.com/ca/meteo/quebec/montreal?wx_auto_reload=') 
html = response.read() 
soup = bs.BeautifulSoup(html, 'lxml') 


for div in soup.find_all('div', id="main-container"): 
    print (div.get_text()) 

Ich bin nicht in der Lage diese besondere Linie zu finden (Die einzige hervorgehoben): https://i.stack.imgur.com/OIlrc.png

Ich weiß, dass ich eine API verwenden könnte, aber ich Ich versuche zu verstehen, wie Web Scraping für zukünftige Projekte funktioniert. Vielen Dank!!

Antwort

1

Die Website, die Sie ausgewählt haben, erstellt wahrscheinlich den Großteil ihres Inhalts mit Javascript, da Sie mit einer einfachen Python-Anfrage nicht den gesamten endgültigen HTML-Code erhalten. Eine Problemumgehung wäre die Verwendung eines Elements wie , um einen Browser fernzusteuern und den HTML-Code vom Browser rendern zu lassen. Python kann dann das endgültige HTML über Selen extrahieren.

Wie bereits erwähnt, in diesem Fall wäre es sinnvoller, zu extrahieren, die Informationen unter Verwendung des API machen, der verwendet wird, zum Beispiel:

import bs4 as bs 
import urllib2 
import json 

response = urllib2.urlopen('https://www.meteomedia.com/api/data/caqc0363/cm?ts=1012') 
json_response = json.loads(response.read()) 
print json_response['obs']['t'] 

Dies würde die aktuelle Temperatur Anzeige als:

-10 

Wenn Sie print json_response können Sie alle verfügbaren Informationen sehen, die verwendet werden könnten.

+0

Vielen Dank, es ist genau das, was ich gesucht habe! –

+0

Gern geschehen! Vergessen Sie nicht, auf den grauen Haken unter den Auf-/Ab-Pfeilen zu klicken, um eine der Antworten als akzeptierte Lösung auszuwählen. –

0

öffnen Chrome development Tools, Schalter auf NetWork tab, aktualisieren Sie die Seite:

enter image description here

Sie die Datenverbindung in den XHR Registerkarte finden können, dann Python Anfrage, um es zu machen.

+0

Vielen Dank, sehr nützlich, um den richtigen Code zu finden! –

Verwandte Themen