我在Scrapy中面临parse_node
方法的一些问题:
class s1(scrapy.spiders.XMLFeedSpider):
name = "s1"
handle_httpstatus_list = [400,401,403,404,408,410,500,502,503,504]
allowed_domains = ["xxx"]
start_urls = ["xxx"]
main_url = start_urls[0]
jobs_list = []
tracker = SummaryTracker()
itertag = "miojob"
counter = 0
def parse_node(self, response, node):
if response.status in [400,401,403,404,408,410,500,502,503,504]:
time.sleep(60)
yield scrapy.Request(self.main_url, callback=self.parse_node, errback=self.err1, dont_filter = True)
else:
#Some Code #
yield scrapy.Request(self.main_url, callback=self.parse_node, errback=self.err1, dont_filter = True)
这是scrapy-bot的一部分,它以递归方式抓取同一页面以提取最后十个项目。一切都有效,除了最后一个scrapy.Request
,因为它给了我这个错误:
“parse_node()正好接受3个参数(2个给定)”
相反,如果我使用简单的Request(self.main_url)
它可以工作,但我不能使用errback,因为它需要回调。我试图将其他参数传递给parse_node
,如下所示:
yield scrapy.Request(self.main_url, callback=self.parse_node(arg1,arg2), errback=self.err1, dont_filter = True)
但它给我一个断言错误,可能是因为参数错误了?
你知道如何解决这个问题吗?将正确的args传递给parse_node
,以我可以使用的方式调用errback。
答案 0 :(得分:0)
尝试
def parse_node(self, response):
<yourcode>
答案 1 :(得分:0)
我通过阅读源代码解决了这个问题: https://github.com/scrapy/scrapy/blob/master/scrapy/spiders/feed.py
旧请求现在是:
yield scrapy.Request(self.main_url, callback=self.parse,errback=self.err1, dont_filter = True)
这里的调整是调用parse方法而不是parse_node,因为“parse”会将Selector(节点)传递给parse_node。