Scrapy抓取接口中文数据显示问号问题

scrapy.FormRequest抓取接口数据中文显示问号

问题表象

近期在抓取数据的时候,数据是用Js通过接口加载的,需要POST form-data数据过去抓取。

yield scrapy.FormRequest(url=url, method='POST',headers=self.headers, formdata=self.data,
  callback=self.parse,
  dont_filter=True, errback=self.errback)

这时候返回来的数据是,中文都是问号:《Scrapy抓取接口中文数据显示问号问题》

原因分析

数据已经返回了,为啥中文是问号呢,还不是那种编码乱码,是问号,然后我就看到response回来的header里边是这样的数据:
《Scrapy抓取接口中文数据显示问号问题》
Content-Type是’text/html; charset=utf-8’,而我自己写的抓取程序里的header是这样写的

    headers = {          
        'Cookie': 'JSESSIONID=2A152F94CADDCBD472F8F4B4BFC235D0; Hm_lvt_c08a19591b74fa5d84b25c45965983f9=1605776233; '
                  'Hm_lpvt_c08a19591b74fa5d84b25c45965983f9=1605776239',
        'Host': 'xxx.sss.com',
        'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
        "Accept-Language": 'zh-CN,zh;q=0.9'
    }

这时候回来的就是中文就是问号,然后我又看浏览器的Content-Type,是这样的,得到的数据就是正常的。
《Scrapy抓取接口中文数据显示问号问题》
问题原因应该是Content_Type的问题,改成程序返回的类型。

处理办法

抓取程序的Header改成如下:

    headers = {
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Cookie': 'JSESSIONID=2A152F94CADDCBD472F8F4B4BFC235D0; Hm_lvt_c08a19591b74fa5d84b25c45965983f9=1605776233; '
                  'Hm_lpvt_c08a19591b74fa5d84b25c45965983f9=1605776239',
        'Host': 'xxx.sss.com',
        'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
        "Accept-Language": 'zh-CN,zh;q=0.9'
    }

增加’Accept’: ‘application/json, text/javascript, /; q=0.01’问题就解决了。Header中Accept的介绍如下:

Accept
作用: 浏览器端可以接受的媒体类型,
例如: Accept: text/html 代表浏览器可以接受服务器回发的类型为 text/html 也就是我们常说的html文档,
如果服务器无法返回text/html类型的数据,服务器应该返回一个406错误(non acceptable)
通配符 * 代表任意类型
例如 Accept: / 代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)

以上记录在抓取过程中遇到的一个问题,希望能帮到遇到同样问题的人,欢迎指正。

PS:第一次用Markdown编写博客,排版还有点不适应。

    原文作者:二月十六
    原文地址: https://blog.csdn.net/sinat_28984567/article/details/109842388
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞