2017-08-04 2 views
0

Ich möchte von mehreren Websites mit ähnlichen URLs wie https://woollahra.ljhooker.com.au/our-team, https://chinatown.ljhooker.com.au/our-team und https://bondibeach.ljhooker.com.au/our-team kratzen.Scraping mehrerer Webseiten mit Python

Ich habe bereits ein Skript geschrieben, das für die erste Website funktioniert, aber ich bin mir nicht sicher, wie ich es von den anderen beiden Websites kratzen soll.

Mein Code:

from urllib.request import urlopen as uReq 
from bs4 import BeautifulSoup as soup 

my_url = "https://woollahra.ljhooker.com.au/our-team" 

page_soup = soup(page_html, "html.parser") 
containers = page_soup.findAll("div", {"class":"team-details"}) 

for container in containers: 
    agent_name = container.findAll("div", {"class":"team-name"}) 
    name = agent_name[0].text 

    phone = container.findAll("span", {"class":"phone"}) 
    mobile = phone[0].text 

    print("name: " + name) 
    print("mobile: " + mobile) 

Gibt es eine Möglichkeit, dass ich einfach den anderen Teil der URL-Liste kann (Woollahra, Chinatown, Bondi Beach), so dass das Skript durch jede Webseite Schleife den Code I mit Hast du schon geschrieben?

+0

Machen Sie eine Liste URLs und iterieren durch sie und legen Sie einige Sekunden Schlaf zwischen ihnen –

+0

Ich würde vorschlagen, 'lxml' als Parser zu verwenden, um die Leistung zu verbessern. Sie können 'SoupStrainer' auch verwenden, um relevante Segmente der Quelle zu analysieren, um die Leistung weiter zu verbessern. –

Antwort

2
locations = ['woollahra', 'chinatown', 'bondibeach'] 
for location in locations: 
    my_url = 'https://' + location + '.ljhooker.com.au/our-team' 

durch den Rest des Codes gefolgt, die über jedes Element der Liste aussehen wird, können Sie später weitere Standorte hinzufügen

+0

Danke @ JoséGarcia für die Antwort, aber mein Code druckt nur den letzten Ort in der Liste (bondibeach). Ich bin mir nicht sicher warum oder wie zu beheben. – Oren

+0

Dies ist nicht die Frage, die Sie gestellt haben, damit wir sehen können, was mit Ihrem Code vor sich geht, den Arbeitscode zur Verfügung stellen, da dieser nicht einmal die Variable 'my_url' verwendet. Ich schätze, Sie haben einen Code-Ausschnitt im Internet gefunden und versucht, Dinge zu ersetzen, ohne zu sehen, wie es funktioniert. Wenn dies der Fall ist, lesen Sie bitte zuerst die Dokumentation. Wenn nicht, aktualisieren Sie bitte Ihre Frage, damit wir Ihnen bei der Lösung Ihres Problems helfen können. –

2

Sie wollen einfach nur eine Schleife

for team in ["woollahra", "chinatown", "bondibeach"]: 
    my_url = "https://{}.ljhooker.com.au/our-team".format(team) 
    page_soup = soup(page_html, "html.parser") 

    # make sure you indent the rest of the code 
+0

Danke @ cricket_007 für die Antwort, aber mein Code druckt nur den letzten Ort in der Liste (bondibeach). Ich bin mir nicht sicher warum oder wie zu beheben. – Oren

+0

Dieser Code ist nicht anders als die angenommene Antwort ... Und ein 'für Team in []' wird immer über jedes Team laufen –