我找不到任何使用 start_requests 与规则的解决方案,我也没有在互联网上看到任何关于这两个的示例。我的目的很简单,我想重新定义 start_request 函数以获得捕获请求期间所有异常的能力,并在请求中使用元。这是我的蜘蛛的代码:
类 TestSpider(CrawlSpider):
名称 = '测试'
allowed_domains = ['www.oreilly.com']
开始网址 = ['https://www.oreilly.com/library/view/practical-postgresql/9781449309770/ch04s05.html https://www.oreilly.com/library/view/practical-postgresql/9781449309770/ch04s05.html']
# Base on scrapy doc
def start_requests(self):
for u in self.start_urls:
yield Request(u, callback=self.parse_item, errback=self.errback_httpbin, dont_filter=True)
rules = (
Rule(LinkExtractor(), callback='parse_item', follow=True),
)
def parse_item(self, response):
item = {}
item['title'] = response.xpath('//head/title/text()').extract()
item['url'] = response.url
yield item
def errback_httpbin(self, failure):
self.logger.error('ERRRRROR - {}'.format(failure))
此代码仅抓取一页。我尝试修改它而不是:
def parse_item(self, response):
item = {}
item['title'] = response.xpath('//head/title/text()').extract()
item['url'] = response.url
yield item
根据这个答案,我尝试使用这个
def parse_item(self, response):
item = {}
item['title'] = response.xpath('//head/title/text()').extract()
item['url'] = response.url
return self.parse(response)
它似乎有效,但即使我向蜘蛛添加解析功能,它也不会抓取任何内容。有人知道如何一起使用 start_request 和规则吗?我很高兴获得有关此主题的任何信息。祝你编码愉快!