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)

这时候返回来的数据是,中文都是问号:在这里插入图片描述

原因分析

数据已经返回了,为啥中文是问号呢,还不是那种编码乱码,是问号,然后我就看到response回来的header里边是这样的数据:
在这里插入图片描述
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,是这样的,得到的数据就是正常的。
在这里插入图片描述
问题原因应该是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编写博客,排版还有点不适应。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值