从响应文本获取HTML

时间:2019-02-16 17:12:38

标签: scrapy python-requests httpresponse

我正在尝试抓取使用Scrapy使用AJAX的网站,我正在发送请求,有时我不完全了解执行结果。现在这是我的代码:

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')
       ....

请注意,我使用try / except来避免该错误:
 ValueError: No JSON object could be decoded

在大多数情况下,我收到3个请求,所有请求的代码都为200 OK,我得到了所需的所有结果。但有时:

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 的结果。在这种情况下,spider进入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 />

任何人都可以给我解释发生的事情吗?

0 个答案:

没有答案