美文网首页
scrapy豆瓣登录响应结果乱码问题

scrapy豆瓣登录响应结果乱码问题

作者: 三无架构师 | 来源:发表于2020-02-03 14:26 被阅读0次

    在使用scrapy登录豆瓣时,发现其返回结果为乱码,使用各种方式对其response进行转码,均无效,spider代码如下:

    import scrapy
    
    class DoubanSpider(scrapy.Spider):
        name = 'douban'
        allowed_domains = ['www.douban.com/people/210172987/']
        start_urls = ['https://www.douban.com/people/210172987/']
    
        def start_requests(self):
            url = "https://accounts.douban.com/j/mobile/login/basic"
            data = {
                "name":"138xxxxxx",
                "password": "xxxxxx",
                "remember": "false",
            }
            yield scrapy.FormRequest(url=url, formdata=data, callback=self.parse_login)
    
        def parse_login(self, response):
            print(response.text)
    

    乱码如下:


    Jietu20200203-135349.jpg

    测试发现postman下结果是正常,经对比,发现其返回正文内容编码为br,如:Content-Encoding: br

    br 指的是 Brotli,是一种全新的数据格式,无损压缩,压缩比极高(比gzip高的)。

    默认环境没有提供br编码的支持,因此乱码。

    其解决方法:

    • 把默认header中的Accept-Encoding中的br去除
    • 提供br压缩格式支持。

    解决方法一:把默认header中的Accept-Encoding中的br去除,结果如:

    DEFAULT_REQUEST_HEADERS = {
        'Accept': 'application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language': 'zh-cn',
        'Accept-Encoding': 'gzip, deflate',
        'Connection': 'keep-alive',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.4 Safari/605.1.15'
    }
    

    解决方法二:提供br压缩格式支持: 安装Brotli
    通过 pip安装即可,

    pip install Brotli
    

    因为默认scrapy中间件scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware对压缩内容提供了支持(包括br格式),但环境默认没有提供br格式的解压包导致。

    相关文章

      网友评论

          本文标题:scrapy豆瓣登录响应结果乱码问题

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