2017-06-03 1 views
1

Ich lerne, wie man mit Python webscrape und ich frage mich, ob es möglich ist, zwei Seiten mit requests.get() zu greifen, so dass ich nicht zwei separate Aufrufe und Variablen machen muss. Zum Beispiel:Python Anfragen .get() von mehreren Seiten?

r1 = requests.get("page1") 
r2 = requests.get("page2") 

pg1 = BeautifulSoup(r1.content, "html.parser") 
pg2 = BeautifulSoup(r2.content, "html.parser") 

Wie Sie sehen können, gibt es wiederholten Code. Irgendwie in der Nähe? Vielen Dank!

Antwort

5

Sie können die Listenzuweisung und -übersichten verwenden, obwohl sie mit nur zwei Seiten nicht viel kürzer ist.

pg1, pg2 = [ BeautifulSoup(requests.get(page).content, "html.parser") 
       for page in ["page1","page2"] ] 
+0

Ich erhalte einen Syntaxfehler gefunden werden, ich bin mir nicht sicher, warum. Es sagt, am Ende fehlt mir ein] oder für? – dj1121

+0

Nevermind, hab es! – dj1121

3

Ich mag die grequests Bibliothek für mehrere URLs auf einmal zu holen, anstelle von Anfragen. Vor allem, wenn es sich um viele URLs oder eine einzelne URL mit vielen Unterseiten handelt.

import grequests 
urls = ['http://google.com', 'http://yahoo.com', 'http://bing.com'] 
unsent_request = (grequests.get(url) for url in urls) 

results = grequests.map(unsent_request) 

Danach kann results verarbeitet werden jedoch die Sie benötigen. Das funktioniert gut mit JSON-Daten: = results[0] ersten URL-Daten, results[1] = zweiten URL-Daten, etc ..

mehr kann here