美文网首页
一周一技 | Scrapy如何POST提交空JSON数据

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

作者: 绝世一只猫 | 来源:发表于2019-05-11 13:05 被阅读0次

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

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

相关文章

网友评论

      本文标题:一周一技 | Scrapy如何POST提交空JSON数据

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