使用带有规则的start_请求进行Scrapy
我找不到任何使用带规则的start_请求的解决方案,也没有在互联网上看到任何这两个请求的例子。我的目的很简单,我想重新定义start_请求函数,以便能够捕获所有请求中的异常,并在请求中使用meta。这是我的蜘蛛的代码: 类TestSpider(爬行蜘蛛): 名称='test' 允许的_域=['www.oreilly.com'] 开始\u URL=[''] 这段代码只刮一页。我尝试修改它,而不是:使用带有规则的start_请求进行Scrapy,scrapy,web-crawler,Scrapy,Web Crawler,我找不到任何使用带规则的start_请求的解决方案,也没有在互联网上看到任何这两个请求的例子。我的目的很简单,我想重新定义start_请求函数,以便能够捕获所有请求中的异常,并在请求中使用meta。这是我的蜘蛛的代码: 类TestSpider(爬行蜘蛛): 名称='test' 允许的_域=['www.oreilly.com'] 开始\u URL=[''] 这段代码只刮一页。我尝试修改它,而不是: def parse_item(self, response): item = {}
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_请求和规则一起使用吗?我很高兴能得到关于这个话题的任何信息。有一个很好的编码 要从
规则中捕获错误,您需要为规则()定义errback
。但不幸的是,这在现在是不可能的
您需要自己解析并生成请求
(这样您可以使用errback
),或者使用中间件处理每个响应
,我找到了一个解决方案,但坦率地说,我不知道它是如何工作的,但它确实做到了
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))
以下是LinkExtractor中的错误句柄
谢谢这个家伙 有人,有什么想法吗?上周我问了一个类似的问题,但也找不到办法。这就是问题所在@gunesevitan,你看到了吗?这东西让我的规则工作,但它不会爬网,因为parse func是空的。如果我重新定义parse func,它仍然不起作用(可能我写得不太清楚,上面代码中的bur规则不起作用。这段代码只有在页面具有表单时才起作用,因此它是无用的。
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))