Ich folgte einem Tutorial, um mehrere Seiten von einer Website mit Scrapy-Bibliothek zu kratzen. Das Tutorial verwendete yield-Anweisung, um Informationen aus der HTML- und CSS-Struktur der Seite mit CSS-Selektoren und Xpath-Selektoren zu erhalten. Ich entscheide mich, eine if-Anweisung zu verwenden, um zu überprüfen, ob eine Suchabfrage ein Ergebnis und eine else-Anweisung findet, um auszugeben, was zu tun ist, wenn eine Suchanfrage nicht auf ein Ergebnis trifft. Das Problem tritt auf, wenn der Code die else-Anweisung ausführt, die den Firmennamen extrahiert, und für das Feld Location and Sales eine benutzerdefinierte Ausgabezeichenfolge, die "Not Found" enthält.Verwenden von Yield-Anweisung, um Ausgabe zurückzugeben, wenn Suchabfrage mit Scrapy Python nicht gefunden wird
Als ich das Skript, das ich die folgende Fehlermeldung aus:
File "C:\Users\....\hoover-scraper\scraper.py", line 28
'Location': 'Not Found'
^
Ich denke, das ist kein richtiger Weg, um die yield-Anweisung zu verwenden, das ist, warum ich die Syntax Nachricht bin immer. Daher habe ich mich gefragt, ob es eine Möglichkeit gibt, die Strings "Nicht gefunden" für Verkaufs- und Standortfelder auszugeben, wenn eine Abfrage auf eine leere Suche stößt.
Dieser Teil meines Codes:
def parse(self, response):
NAME_SELECTOR ="td a::text"
LOCATION_SELECTOR ='.//tr/td/text()' #using xpath to grab information for Location and Sales
SALES_SELECTOR = './/tr/td/text()'
if response.css(NAME_SELECTOR).extract_first(): #Checks to see if the company name field has data if not prints 'No results found'
yield {
'Company Name': response.css(NAME_SELECTOR).extract_first(),
'Location' : response.xpath(LOCATION_SELECTOR)[0].extract(), #Location comes first inside the td tags thus the [0]
'Sales' : response.xpath(SALES_SELECTOR)[1].extract(),
}
else:
yield {
'Company Name': response.css("dd.value.term::text").extract_first() #identifies company name which data was not found
'Location': 'Not Found'
'Sales': 'Not Found'
}
Siehe auch: https://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do – MrT