ScrapyCrawlSpider-start_urlsのerrback
Sep 23 2020
をCrawlSpider持っているルールlinkextractorで使用していerrbackます。
私はparse_start_url解析できるようにするために使用していますstart_urlsがerrback、それらも必要です。
class CS(CrawlSpider):
name = "CS"
rules = (Rule(LinkExtractor(allow=[], deny=[]), follow=True, callback='my_parse', errback='my_errback'),)
custom_settings = {
'DEPTH_LIMIT': 3,
#etc
}
start_urls = ['url']
allowed_domains = ['domain']
def my_errback(self, failure):
# log all failures
def parse_start_url(self, response):
return self.my_parse(response)
def my_parse(self, response):
# parse responses
私が直面している問題は、errbackが抽出されたリンクに対してのみ呼び出され、start_urlsに対しては呼び出されないことです。
CrawlSpiderとルールを使用しているため、start_requestsメソッドを使用できません(以下のとおり)。私がそうするとき、start_urlsだけがこすり落とされます:
def start_requests(self):
for u in self.start_urls:
yield scrapy.Request(u, callback=self.my_parse,
errback=self.my_errback)
回答
J_Z Sep 24 2020 at 07:20
これが答えです: https://stackoverflow.com/a/34345668/13903397
基本的に、start_requestsコールバックパラメータを使用する必要がありますが、削除する必要があります。そうすれば、デフォルトのself.parseが呼び出され、ルールが尊重されます。
class CS(CrawlSpider):
name = "CS"
rules = (Rule(LinkExtractor(allow=[], deny=[]), follow=True, callback='my_parse', errback='my_errback'),)
custom_settings = {
'DEPTH_LIMIT': 3,
#etc
}
start_urls = ['url']
allowed_domains = ['domain']
def start_requests(self):
for u in self.start_urls:
yield scrapy.Request(u, errback=self.my_errback)
def my_errback(self, failure):
# log all failures
def parse_start_url(self, response):
return self.my_parse(response)
def my_parse(self, response):
# parse responses