Ich habe eine scrapy Spinne, die gut funktioniert, solange ich ihm eine Seite geben, die die Links zu den Seiten enthält, die es kratzen sollte. Nun möchte ich nicht alle Kategorien angeben, sondern die Seite, die Links zu allen Kategorien enthält. Ich dachte, ich könnte einfach eine andere Parse-Funktion hinzufügen, um dies zu erreichen.Attribut Fehler beim rekursiven Scraping mit Scrapy
aber die Ausgabe der Konsole gibt mir ein Attribut Fehler
"attributeError: 'zaubersonder' object has no attribute 'parsedetails'"
Das sagt mir, dass some attribute refference nicht richtig funktioniert. Ich bin neu in Objektorientierung, aber ich dachte, scarpy ist Parse aufrufen, die prase_level2 aufgerufen wird, die ihrerseits parse_details aufrufen und das sollte gut funktionieren.
unten ist meine Bemühungen so weit.
import scrapy
class zaubersonder(scrapy.Spider):
name = 'zaubersonder'
allowed_domains = ['abc.de']
start_urls = ['http://www.abc.de/index.php/rgergegregre.html'
]
def parse(self, response):
urls = response.css('a.ulSubMenu::attr(href)').extract() # links to categories
for url in urls:
url = response.urljoin(url)
yield scrapy.Request(url=url,callback=self.parse_level2)
def parse_level2(self, response):
urls2 = response.css('a.ulSubMenu::attr(href)').extract() # links to entries
for url2 in urls2:
url2 = response.urljoin(url2)
yield scrapy.Request(url=url2,callback=self.parse_details)
def parse_details(self,response): #extract entries
yield {
"Titel": response.css("li.active.last::text").extract(),
"Content": response.css('div.ce_text.first.block').extract() + response.css('div.ce_text.last.block').extract(),
}
bearbeiten: fixed den Code für den Fall, jemand
danke, das war es. Ich fühle mich jetzt albern – Nivatius