我找不到使用start_requests和规则的任何解决方案,也没有在互联网上看到这两个示例。我的目的很简单,我想重新定义start_request函数以获取捕获请求期间所有异常的能力,并在请求中使用meta。这是我的蜘蛛的代码:
Class TestSpider(CrawlSpider): 名称=“测试” allowed_domains = ['www.oreilly.com'] start_urls = ['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和规则吗?我将很高兴获得有关该主题的任何信息。有一个不错的编码!
答案 0 :(得分:0)
要捕获rules
中的错误,您需要为errback
定义Rule()
。但是不幸的是,这不可能。
您需要自己解析和yield
request
(这样您就可以使用errback
)或使用response
处理每个middleware
。
答案 1 :(得分:0)
我找到了一个解决方案,但坦白说我不知道它是如何工作的,但是它确实做到了。
class TSpider(CrawlSpider):
name = 't'
allowed_domains = ['books.toscrapes.com']
start_urls = ['https://books.toscrapes.com']
login_page = 'https://books.toscrapes.com'
rules = (
Rule(LinkExtractor(), callback='parse_item', follow=True),
)
def start_requests(self):
yield Request(url=self.login_page, callback=self.login, errback=self.errback_httpbin, dont_filter=True)
def login(self, response):
return FormRequest.from_response(response)
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))
答案 2 :(得分:0)
这里是solution,用于LinkExtractor中的句柄错误
谢谢这个家伙!