Ich habe ein Skript, das ich geschrieben habe, wo ich Beautiful Soup verwenden, um eine Website für Suchergebnisse zu scrappen. Ich habe es geschafft, die Daten, die ich möchte, über seinen Klassennamen zu isolieren.Wie man durch mehrere Ergebnisseiten iteriert, wenn Web Scraping mit Beautiful Soup
Die Suchergebnisse sind jedoch nicht auf einer einzelnen Seite. Stattdessen sind sie über mehrere Seiten verteilt, also möchte ich sie alle bekommen. Ich möchte, dass mein Skript prüfen kann, ob es eine nächste Ergebnisseite gibt, und sich selbst dort ausführen. Da die Ergebnisse in der Anzahl variieren, weiß ich nicht, wie viele Seiten von Ergebnissen existieren, so dass ich einen Bereich nicht vordefinieren kann, um darüber zu iterieren. Ich habe auch versucht, einen "if_page_exists" Check zu verwenden. Wenn ich jedoch eine Seitenzahl außerhalb der Ergebnisbereiche einstelle, existiert die Seite immer, sie hat nur keine Ergebnisse, aber sie hat eine Seite, die besagt, dass keine Ergebnisse angezeigt werden.
Was ich jedoch festgestellt habe, ist, dass jedes Seitenergebnis einen 'Next' Link hat, der id 'NextLink1' hat und das letzte Seitenergebnis hat dies nicht. Also ich denke, das war die Magie könnte sein. Aber ich weiß nicht, wie und wo ich diesen Check implementieren soll. Ich habe endlose Schleifen und so Sachen bekommen.
Das folgende Skript findet die Ergebnisse für den Suchbegriff 'x'. Hilfe wäre sehr willkommen.
from urllib.request import urlopen
from bs4 import BeautifulSoup
#all_letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o","p","q","r","s","t","u","v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
all_letters= ['x']
for letter in all_letters:
page_number = 1
url = "https://www.co.dutchess.ny.us/CountyClerkDocumentSearch/Search.aspx?q=nco1%253d2%2526name1%253d" + letter + "&page=" + str (page_number)
html = urlopen(url)
bsObj = BeautifulSoup(html)
nameList = bsObj.findAll("td", {"class":"party-name"})
for name in nameList:
print(name.get_text())
Auch weiß jemand einen kürzeren Weg, um eine Liste von alphanumerischen Zeichen thata besser als die von Instanziierung i oben im Skript auf Kommentar?
Also im Grunde willst du 'if bsObj.find ('a', id = 'NextLink1'): Seitennummer + = 1'? –
Das Problem ist, dass meine URL erstellt und geparst wird, bevor ich die bsObj instanziiere. Also ich weiß nicht, wie ich die URL ändern kann, nachdem ich diese Prüfung gemacht habe –
Bitte ** nicht erneut Fragen ** [Wie kann ich einen Web-Scraper mehrere Seiten von Suchergebnissen mit Beautiful Soup traversieren?] (Http://stackoverflow.com/questions/38364642/how-can-i-make-a-web-scraper-traverse-multiple-pages-of-search-results-using-bea) –