Я использую скрапс для сканирования сайта. Первый звонок кажется нормальным и собирает некоторые данные. Для каждого последующего запроса мне нужна информация из другого запроса. Для упрощения программирования я разделил разные запросы на разные вызовы методов. Но похоже, что scrapy не предоставляет вызовы методов с каким-то особым параметром. Каждый дополнительный вызов не будет выполнен.
Я уже пробовал несколько разных вещей:
Вызывается метод экземпляра с помощью self.sendQueryHash (response, tagName, afterHash)
Вызвал статический метод с помощью sendQueryHash (response, tagName, afterHash) и изменил отступ
Удалил вызов метода, и он заработал. Я видел выходные данные sendQueryHash на регистраторе.
import scrapy
import re
import json
import logging
class TestpostSpider(scrapy.Spider):
name = 'testPost'
allowed_domains = ['test.com']
tags = [
"this"
,"that" ]
def start_requests(self):
requests = []
for i, value in enumerate(self.tags):
url = "https://www.test.com/{}/".format(value)
requests.append(scrapy.Request(
url,
meta={'cookiejar': i},
callback=self.parsefirstAccess))
return requests
def parsefirstAccess(self, response):
self.logger.info("parsefirstAccess")
jsonData = response.text
# That call works fine
tagName, hasNext, afterHash = self.extractFirstNextPageData(jsonData)
yield {
'json':jsonData,
'requestTime':int(round(time.time() * 1000)),
'requestNumber':0
}
if not hasNext:
self.logger.info("hasNext is false")
# No more data available stop processing
return
else:
self.logger.info("hasNext is true")
# Send request to get the query hash of the current tag
self.sendQueryHash(response, tagName, afterHash) # Problem occures here
## 3.
def sendQueryHash(self, response, tagName, afterHash):
self.logger.info("sendQueryHash")
request = scrapy.Request(
"https://www.test.com/static/bundles/es6/TagPageContainer.js/21d3cb18e725.js",
meta={'cookiejar': response.meta['cookiejar']},
callback=self.parseQueryHash,
dont_filter=True)
request.cb_kwargs['tagName'] = tagName
request.cb_kwargs['afterHash'] = afterHash
yield request
def extractFirstNextPageData(self, json):
return "data1", True, "data3"
Я ожидаю, что вывод sendQueryHash будет показан, но этого никогда не произойдет. Только когда я закомментирую строки self.sendQueryHash
и def sendQueryHash
.
Это только один пример поведения, которого я не ожидаю.