美文网首页
一周一技 | 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