一日一技:Scrapy 如何正確 Post 發送 JSON 數據

      網友投稿 951 2025-04-01

      我們知道,HTTP請求的 POST 方式,提交上去的數據有很多種格式。例如JSON/form-data/x-www-form-urlencoded等等。我們在 Postman 的 POST 請求里面,可以看到這些數據格式,如下圖所示:

      雖然同樣都是 POST 方式,但是有些網站只能使用特定的格式才能正常返回數據。我們來看一個例子,現在向網址:http://exercise.kingname.info/ajax_1_postbackend?POST 提交一個 JSON 字符串:{“name”:”xx”,”age”:24}可以正常得到返回:

      但如果提交的數據格式不是 JSON,而是form-data,那么就會報錯,如下圖所示:

      這也就是為什么在使用 requests 的時候,post 方法的第二個參數有data=和json=的區別,如下圖所示:

      在使用 Scrapy 的時候,很多人都知道怎么提交 GET 請求,但卻不太清楚怎么提交 POST 請求。如果你在網上搜索,那么,你會看到有兩種回答:

      第一種回答,會建議你使用scrapy.FormRequest。但這個方法提交的數據是form-data格式,如果網站需要接收 JSON 格式的數據,那么提交就會失敗。

      第二種回答,會建議你使用scrapy.Request(url, method='POST', body=json.dumps(xxx))。這種方式確實可以成功提交 JSON 數據,但寫起來比較麻煩。

      一日一技:Scrapy 如何正確 Post 發送 JSON 數據

      但如果你看過 Scrapy 的官方文檔Requests and Responses[1],你就會知道,實際上 Scrapy 原本就提供了一個專門用來POST 提交 JSON 數據的方式——JsonRequest。它的位置在scrapy.http.JsonRequest。并且使用起來跟?scrapy.Request一樣簡單:

      import scrapy from scrapy.http import JsonRequest class ExampleSpider(scrapy.Spider): name = 'example' allowed_domains = ['xxx.com'] # start_urls = ['http://xxx.com/'] def start_requests(self): body = { 'name': 'kingname', 'age': 28 } url = 'http://exercise.kingname.info/ajax_1_postbackend' yield JsonRequest(url, data=body, callback=self.parse) def parse(self, response, *args, **kwargs): print(response.body.decode())

      運行效果如下圖所示:

      JsonRequest本來就是scrapy.Request的一個子類,所以所有能在scrapy.Request使用的參數,都可以直接在JsonRequest中使用。同時,它額外支持兩個參數,分別是data和dumps_kwargs。其中data參數的值就是一個可以被json.dumps序列化的對象,例如字典或者列表。而dumps_kwargs里面的參數,就是?json.dumps支持的那些參數,例如ensure_ascii=False、sort_keys=True等等。

      大家遇到問題多看官方文檔,少在網上搜索些雜七雜八裝逼貨的爛博客。官方文檔是你最好的朋友。

      參考資料

      JSON Scrapy

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:TI Sitara AM335x一款高性能嵌入式32位工業級Cortex-A8開發板
      下一篇:怎么查找詳細內容(怎么顯示查找的全部內容)
      相關文章
      在线观看亚洲人成网站| 亚洲无线电影官网| 亚洲jjzzjjzz在线观看| 久久久久亚洲av无码专区喷水 | 亚洲精品无码MV在线观看| 亚洲欧洲日本在线| 亚洲乱码中文字幕手机在线 | 久久亚洲精品人成综合网| 亚洲情a成黄在线观看动漫尤物| 国产亚洲人成网站观看| 亚洲AV综合色一区二区三区| 亚洲av永久无码精品漫画| 久久精品国产亚洲av成人| 图图资源网亚洲综合网站| 亚洲网址在线观看你懂的| 亚洲黄色片免费看| 亚洲视频在线观看网址| 亚洲成人黄色网址| 亚洲香蕉久久一区二区| 亚洲日韩国产欧美一区二区三区| 亚洲精品美女久久久久久久| 在线视频亚洲一区| 亚洲精品视频免费观看| 亚洲日韩aⅴ在线视频| 久久精品亚洲视频| 亚洲国产精品日韩在线观看| 激情内射亚洲一区二区三区爱妻 | 精品亚洲成在人线AV无码| 亚洲精品无码日韩国产不卡av| 亚洲AV无码一区二区乱子仑 | 亚洲国产精品一区二区九九| 中文字幕专区在线亚洲| 亚洲国产精品VA在线观看麻豆| 亚洲国产高清视频| 亚洲免费黄色网址| 亚洲精品中文字幕| 国产精品亚洲mnbav网站| 亚洲AV一宅男色影视| 亚洲啪啪免费视频| 亚洲国产精品日韩av不卡在线 | 久久精品亚洲男人的天堂|