Я пытаюсь очистить сайт, который использует AJAX с Scrapy, я отправляю запрос, и иногда я не до конца понимаю результат выполнения.Теперь это мой код:
class BaseSpider(scrapy.Spider):
results = []
def parse(self, response):
...
yield Request(url = 'https://www.books.com/ajax_more?book=book1', callback = self.parse_after_filtering1, dont_filter = True)
yield Request(url = 'https://www.books.com/ajax_more?book=book2', callback = self.parse_after_filtering2, dont_filter = True)
def parse_after_filtering1(self,response):
try:
jsonresponse = json.loads(response.text)
except:
self.results = []
return self.parse(response)
response_string = jsonresponse['content']
response = HtmlResponse(url=response_string, body=response_string, encoding='utf-8')
....
def parse_after_filtering2(self,response):
try:
jsonresponse = json.loads(response.text)
except:
return
response_string = jsonresponse['content']
response = HtmlResponse(url=response_string, body=response_string, encoding='utf-8')
....
Обратите внимание, что я использую попытку / исключение, чтобы избежать ошибки:
ValueError: No JSON object could be decoded
В большинстве случаев я получаю 3 запроса, всеиз них с кодом 200 ОК, и я получаю все результаты, которые мне нужны.Но иногда:
1 ) Выполнение показывает 4 запроса: первый из них - запрос 200 (начальный), второй - запрос 502 (при входе в parse_after_filtering2), а затем третий и четвертый:200 Запрос.В этом случае моя переменная результатов содержит только результаты, полученные в parse_after_filtering1 .Разве он не должен включать все результаты?
Более того, когда 4 запроса: первый запрос 200, второй запрос 200, третий запрос 502 и четвертый запрос 200, я получаю все результаты из обоих parse_after_filtering1и parse_after_filtering2 !!!
2 ) Иногда я получаю 3 запроса с кодом состояния 200, но это результат только parse_after_filtering1 .В этом случае паук входит в исключающую часть parse_after_filtering2, но не должен ли он войти в исключающую часть после запроса 502?В этом случае моя переменная response.text
включает в себя:
<b>Fatal error</b>: Class 'MacroTemplateExecutord73621dd6570e9ea1a73cb2498fc5982' not found in <b>/var/www/html/lib/limb/macro/src/lmbMacroTemplate.class.php</b> on line <b>63</b><br />
<br />
Кто-нибудь может дать мне объяснение того, что происходит?