美文网首页玩耍PythonPythoner集中营
关于解决scrapy请求http 500 502的问题

关于解决scrapy请求http 500 502的问题

作者: Vissioon | 来源:发表于2016-07-21 20:11 被阅读3025次

    http 500 502是内部服务器错误,这个大家都晓得。
    但有的网站在针对爬虫访问的时候也会利用错误码500或502来反扒

    大致分为以下两种情况


    1.第一次给出500或502的错误码,然后给出200的正常返回

    这样的情况很好处理,只要遇到这两个错误码就重新请求就好了。
    如果错误500,scrapy会自动重新请求,但502貌似不会,这时候只要在setting里面修改一下设置

    RETRY_HTTP_CODES = [500, 502, 503, 504, 400, 403, 404, 408]
    

    这个设置项的意思是遇到这些错误码就重新发送请求,但是如果错误码不在这里就不会重新请求,所以一定要填写所有需要重新请求的情况。如果想要遇到错误就忽略掉,从来都不重新请求,就把它设成等于[]就好了。

    2.返回502的错误,内嵌一段js代码,js代码解析为cookies,然后带着cookies重新请求
    这样在scrapy就不好处理了,因为scrapy遇到500或者502这样的错误就不会返回给你response也就是说程序根本不会进入回调函数就会报错结束。这样我们就拿不到里面的js代码,也就不能解析。

    一种解决办法是用requests代替scrapy发请求,得到返回的js后用phantomjs解析,得到结果再用scrapy继续访问

    另一种解决办法是修改scrapy下载器中间件,在setting里面做如下设置

    DOWNLOADER_MIDDLEWARES = {
    'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 110,   
    'cnca.middlewares.ProxyMiddleware': 100,}
    

    然后在setting同级目录下创建middlewares.py文件

    class ProxyMiddleware(object):
        def process_response(self, request, response, spider):
            if response.status == 502:      
                return response
    

    相关文章

      网友评论

        本文标题:关于解决scrapy请求http 500 502的问题

        本文链接:https://www.haomeiwen.com/subject/fnwbjttx.html