2016-07-14 15 views
-2

Ich versuche, einen Schaber zu schreiben ergibt sich aus der folgenden Seite zu erhalten:Wie kann ich mithilfe von Beautiful Soup einen Web-Scraper durch mehrere Seiten von Suchergebnissen ziehen lassen?

https://www.co.dutchess.ny.us/CountyClerkDocumentSearch/Search.aspx?q=nco1%253d2%2526name1%253da&page=1

Ich versuche, alle Ergebnisse zu erhalten, nicht nur „A“ Ergebnisse, aber ich dachte, ich mit einem Buchstaben beginnen könnte und dann durch das ganze Alphabet laufen. Wenn jemand mit diesem Teil helfen kann, wäre das auch toll.

Wie auch immer, ich möchte auf alle Party Names, das heißt, Elemente mit der Eigenschaft Klasse Party-Name.

Ich habe den folgenden Code:

from urllib.request import urlopen 
from bs4 import BeautifulSoup 
html = urlopen("https://www.co.dutchess.ny.us/CountyClerkDocumentSearch/Search.aspx?q=nco1%253d2%2526name1%253da&page=1") 
bsObj = BeautifulSoup(html) 
nameList = bsObj.findAll("td", {"class":"party-name"}) 
for name in nameList: 
print(name.get_text()) 

Dies ist jedoch nur für eine Seite funktioniert. Die Ergebnisse erstrecken sich über mehrere Seiten. Wie kann ich dies für mehrere Seiten erreichen?

Auch wenn Sie mit allen Ergebnissen helfen können, nicht nur A, das wäre großartig.

BEARBEITEN Ich habe meinen Code jetzt verbessert und kann über alle Suchen gehen. Ich kann jedoch immer noch nicht zur nächsten Seite gehen. Ich habe versucht, page_number ++ zu verwenden, aber das weiß nicht, wo ich aufhören soll, da die Anzahl der Seitenergebnisse variiert. Wie könnte ich es auf die nächste Seite brechen auf der letzten Seite haben ???

Neuer Code:

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"] 
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()) 
+0

Sie könnten versuchen, Generatoren – Quill

+4

Plase ** nicht Fragen zu verwenden **: [Wie mehrere Ergebnisseiten beim Web Scraping mit Beautiful Soup iterieren (http : //stackoverflow.com/questions/38407661/how-to-iterate-through-multiple-results-pages-when-web-scraping-with-beautiful-s) –

Antwort

-1

Ich würde es auf diese Weise lösen (Pseudo-Code)

for letter in all_letters: 
    page = 1 
    while True: 
     url = letter + page 
     # scrape the page 
     # check with bs if there is an a-element with id "NextLink1" 
     if not link_to_next_page_found: 
      break 
     page += 1 
+0

Ich habe meinen Code aktualisiert (siehe aktualisierten Code oben) . Ich baue jetzt meine URL, wie Sie gesagt haben, und ich kann eine Liste aller möglichen Anfänge der Suche erstellen. So habe ich jetzt alle Suchen abgedeckt. Ich kann jedoch den nächsten Seitenteil nicht lösen. Ich habe mit page_number ++ gebastelt, aber das geht bis ins Unendliche und hört nicht auf. Wie kann ich es auf die Seiten beschränken, die für jedes Suchergebnis gültig sind? –

0

Von dem, was ich verstehe, Sie wollen die "starts_with" Parameter auf der Seite ändern am über alle iterieren die Alphabete. Wenn mein Verständnis der Frage richtig ist, dann könnte dies hilfreich sein.

Wenn Sie die URL analysieren, erhalten Sie Ihre Antwort.

url = "https://www.co.dutchess.ny.us/CountyClerkDocumentSearch/Search.aspx?q=nco1%253d2%2526name1%253da&page=1"

der Brief nach "% 253d" diktiert den "starts_with" Begriff. Derzeit ist es ‚a‘ daher gibt es mit beginnt mit ‚a‘, wenn Sie einfach die URL

ändern iterieren wollen

url = 'https://www.co.dutchess.ny.us/CountyClerkDocumentSearch/Search.aspx?q=nco1%253d2%2526name1%253d' + starts_with + '&page=1'

starts_with sein kann alles entweder ein Zeichen (a, b, c, ...) oder eine Zeichenfolge (abc, asde, ...)

+0

Ich habe meinen Code aktualisiert (siehe aktualisierten Code oben). Ich baue jetzt meine URL, wie Sie gesagt haben, und ich kann eine Liste aller möglichen Anfänge der Suche erstellen. So habe ich jetzt alle Suchen abgedeckt.Ich kann jedoch den nächsten Seitenteil nicht lösen. Ich habe mit page_number ++ gebastelt, aber das geht bis ins Unendliche und hört nicht auf. Wie kann ich es auf die Seiten beschränken, die für jedes Suchergebnis gültig sind? –