2016-05-22 17 views
0

Ich versuche, Text von einer Reihe von Hyperlinks auf einer Hauptseite zu kratzen und dann speichern Sie die Ergebnisse als eine Liste von String-Objekten. Der Code, den ich geschrieben habe, funktioniert, wenn ich ihn auf einem einzelnen Link ausführe, aber er bricht zusammen, wenn ich versuche, alle Links zu durchlaufen.Python Web Scraping, in Schleife zu brechen

FYI, sieht meine Basis-URL wie folgt aus:

base_url = "http://www.achpr.org" 

Und meine Hyperlinks wie folgt aussehen:

hyperlinks = ['/sessions/58th', 
'/sessions/58th/resolutions/337/', 
'/sessions/58th/resolutions/338/', 
'/sessions/58th/resolutions/339/', ...] 

So funktioniert das gut:

r = requests.get('http://www.achpr.org' + "/sessions/19th-eo/resolutions/328/") 
    soup = BeautifulSoup(r.text, "lxml") 
    soup.find('b').span.string 
    text = soup.findAll('span') 

y = [] 
for i in text: 
    x = i.strings #returns string within tags 
    y.extend(x) 

y = "".join(y) 
y = y.replace("\n", " ") 
y = y.replace("\xa0*", " ") 
print(ok) 

Aber wenn ich versuche, Um dies in eine Schleife zu verwandeln:

output = [] 

for item in hyperlinks: 
    r = requests.get('http://www.achpr.org' + link) 
    soup = BeautifulSoup(r.text, "lxml") 
    soup.find('b').span.string 
    text = soup.findAll('span') 

    y = [] 
    for i in text: 
     x = i.strings #returns string within tags (so no tags) 
     y.extend(x) 

    y = "".join(y) 
    y = y.replace("\n", " ") 
    y = y.replace("\xa0*", " ") 
    output.extend(y) 

bekomme ich folgende Fehlermeldung:

Error message

Es fühlt sich an wie ich bin ein wirklich einfachen Looping Fehler (Putting Einzüge an der falschen Stelle) zu machen, aber ich habe an diesem zu lange angestarrt und ich hätte gerne ein neues Paar Augen. Kann jemand sehen, was ich falsch mache?

Antwort

1

Es ist kein Einzugfehler, nehme ich an.

for item in hyperlinks: 
    r = requests.get('http://www.achpr.org' + link) 
    soup = BeautifulSoup(r.text, "lxml") 
    if soup.find('b').span is None: 
     continue 
    soup.find('b').span.string 
    text = soup.findAll('span') 

ein, wenn der Test vor soup.find('b').span.string hinzufügen.

+0

Ahhhh danke! So einfach. – chickpeaze