一周一技 | 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如何POST提交空JSON数据_第1张图片

用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())
一周一技 | Scrapy如何POST提交空JSON数据_第2张图片

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

通过requests找原因

一周一技 | Scrapy如何POST提交空JSON数据_第3张图片

一周一技 | Scrapy如何POST提交空JSON数据_第4张图片

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

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

一周一技 | Scrapy如何POST提交空JSON数据_第5张图片

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

一周一技 | Scrapy如何POST提交空JSON数据_第6张图片
微信公众号:爬虫 | 听说智商高的都关注了这个公众号

你可能感兴趣的:(一周一技 | Scrapy如何POST提交空JSON数据)