一周一技 | Scrapy如何POST提交空J(rèn)SON數(shù)據(jù)

Scrapy的請(qǐng)求設(shè)計(jì)跟requests相差很大,對(duì)比之下,能深刻感受到requests的好用,Scrapy則會(huì)撞見一些坑。
就比如提交一個(gè)空json給來獲取數(shù)據(jù)。

一個(gè)請(qǐng)求的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實(shí)現(xiàn)

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())

但是卻很不給力的請(qǐng)求失敗,body=json.dumps({}) 是scrapy標(biāo)準(zhǔn)的傳遞json數(shù)據(jù)方式。但是為什么沒成功呢?

通過requests找原因


我們可以看到請(qǐng)求頭和響應(yīng)頭里都被加上了Content-Type并帶有json子,但是在scrapy的請(qǐng)求頭中卻沒有,于是我推斷原因跟它有關(guān)。

試一下在scrapy請(qǐng)求頭中加上Content-Type

果然成功的獲取到了數(shù)據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容