Я столкнулся некоторые проблемы с методом parse_node
в Scrapy:Scrapy parse_node() занимает ровно 3 аргумента (2 дано)
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-бот, который рекурсивно скоблить ту же страницу извлеките последние десять предметов. Все работает за последний 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)
, но это дает мне ошибку Assertion, вероятно, потому что аргументы неверны?
Есть ли у вас какие-либо идеи относительно того, как это решить? Передача правильных аргументов parse_node
, в том, как я могу использовать также вызываемый вызов.
метод обратного вызова должен содержать только два аргумента: 'self' и' response', поэтому удалите 'node' – eLRuLL
@eLRuLL Если я удалю узел из parse_node, вы получите ошибку, аналогичную старой! – 0cN