Ich bin ein Neuling und baue einen Web Scraper, der alle britischen McDonalds Adressen, Postleitzahlen und Telefonnummern (und schließlich nach csv exportieren) greifen wird. Ich verwende einen Aggregator anstelle der McDonalds-Website.Python Web Scraper - was habe ich falsch gemacht?
https://www.localstore.co.uk/stores/75639/mcdonalds-restaurant/
Ich habe geliehen und umgewidmet einige Code:
from bs4 import BeautifulSoup
from urllib2 import urlopen
BASE_URL = "https://www.localstore.co.uk/stores/75639/mcdonalds-restaurant/"
def get_category_links(section_url):
html = urlopen(section_url).read()
soup = BeautifulSoup(html, "lxml")
boccat = soup.find("tr")
category_links = [BASE_URL + tr.a["href"] for tr in boccat.findAll("h2")]
return category_links
def get_restaurant_details(category_url):
html = urlopen(category_url).read()
soup = BeautifulSoup(html, "lxml")
streetAddress = soup.find("span", "streetAddress").string
addressLocality = [h2.string for h2 in soup.findAll("span", "addressLocality")]
addressRegion = [h2.string for h2 in soup.findAll("span", "addressRegion")]
postalCode = [h2.string for h2 in soup.findAll("span", "postalCode")]
phoneNumber = [h2.string for h2 in soup.findAll("td", "b")]
return {"streetAddress": streetAddress,
"addressLocality": addressLocality,
"postalCode": postalCode,
"addressRegion": addressRegion,
"phoneNumber": phoneNumber}
Das glaube ich nicht, dass ich die Daten gepackt haben - wie wenn ich laufe die folgende Zeile:
print(postalCode)
oder
print(addressLocality)
bekomme ich folgende Fehler
NameError: name 'postalCode' is not defined
eine Idee, mit dem, was ich falsch mache?
gut zu starten, müssen Sie Ihre Funktionen aufrufen ... oh die Gefahr des Coping und Einfügen ... –
'get_restaurant_details' gibt ein dict. Wenn Sie auf die Daten in diesem Diktat zugreifen möchten, müssen Sie es indizieren. Es wird nicht automatisch eine Menge neuer Variablen in dem Bereich erstellen, der es aufgerufen hat. Diese 'postalCode' und andere Variablen sind lokal. – user2357112
Wo ist 'postalCode' definiert? Liegt Ihre Print-Anweisung in dem Bereich, in dem 'postalCode' existiert? Namen, die in Funktionen definiert sind, werden nicht einfach ausgeleert, so dass Sie sie überall verwenden können! Stellen Sie sich vor, Sie versuchen zu verfolgen, was wo definiert ist. –