Kann nicht herausfinden, warum meine close-Methode nicht ausgeführt wird. Ich muss zwei Listen von URLs verarbeiten. Eine Liste muss zuerst verarbeitet und exportiert werden und die zweite Liste sollte dann verarbeitet werden.Scrapy - close-Methode Körper wird nicht ausgeführt
Das Problem ist, dass close-Methode nur aufgerufen wird (Haltepunkt stoppt bei der def
), aber nicht ausgeführt. Weißt du, warum?
# coding=utf-8
from bot.items import TestItem
from scrapy import Spider, Request, signals
from scrapy.exceptions import DontCloseSpider
from scrapy.xlib.pydispatch import dispatcher
class IndexSpider(Spider):
name = 'index_spider'
allowed_domains = ['www.doman.org']
def start_requests(self):
for url in ["https://www.doman.org/eshop"]:
yield Request(url, callback=self.parse_main_page)
def parse_main_page(self, response):
self.categories = [some tuples]
self.subcategories = [some tuples]
def close(self, spider): # Execution ends here
pass # This is not being executed
if self.categories:
for cat in self.categories:
url = "https://www.doman.org/search/getAjaxResult?categoryId={}".format(cat[0])
yield Request(url, meta={'tup': cat, 'priority': 0}, priority=0, callback=self.parse_category)
self.categories = []
raise DontCloseSpider
Wie sollte ich die Methode definieren? Ich habe @staticmethod versucht und wenn ich das tue, wird es nicht einmal aufgerufen. –
Ich glaube nicht, dass das Hinzufügen zusätzlicher URLs in der 'close'-Methode (da Sie sie nicht überschreiben können) eine gute Lösung ist. Sie könnten Callback-Methoden definieren, um die Kategorien zu analysieren, sobald Sie diese in Ihrer 'parse_main_page'-Methode gefunden haben. –