一周一技 | Scrapy如何POST提交空JSON数据

Scrapy的请求设计跟requests相差很大,对比之下,能深刻感受到requests的好用,Scrapy则会撞见一些坑。
就比如提交一个空json给来获取数据。

一个请求的requests版本

import requests

url = 'http://gs.amac.org.cn/amac-infodisc/api/pof/fund?rand=0.9006151119982766&page=1&size=50'

resp = requests.post(url, json={})
print(resp.json())

用scrapy实现

import scrapy
import json


class Spider(scrapy.Spider):
    name = 'spider'

    def start_requests(self):
        url = 'http://gs.amac.org.cn/amac-infodisc/api/pof/fund?rand=0.9006151119982766&page=1&size=50'
        yield scrapy.FormRequest(url, method='POST', callback=self.parse, body=json.dumps({}))

    def parse(self, response):
        print(json.loads(response.body.decode()))


if __name__ == '__main__':
    from scrapy import cmdline

    cmdline.execute('scrapy crawl spider'.split())

但是却很不给力的请求失败,body=json.dumps({}) 是scrapy标准的传递json数据方式。但是为什么没成功呢?

通过requests找原因


我们可以看到请求头和响应头里都被加上了Content-Type并带有json子,但是在scrapy的请求头中却没有,于是我推断原因跟它有关。

试一下在scrapy请求头中加上Content-Type

果然成功的获取到了数据。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容