国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python使用scrapy發(fā)送post請求的坑

2020-02-15 22:53:17
字體:
供稿:網(wǎng)友

使用requests發(fā)送post請求

先來看看使用requests來發(fā)送post請求是多少好用,發(fā)送請求

Requests 簡便的 API 意味著所有 HTTP 請求類型都是顯而易見的。例如,你可以這樣發(fā)送一個 HTTP POST 請求:

>>>r = requests.post('http://httpbin.org/post', data = {'key':'value'})

使用data可以傳遞字典作為參數(shù),同時也可以傳遞元祖

>>>payload = (('key1', 'value1'), ('key1', 'value2'))>>>r = requests.post('http://httpbin.org/post', data=payload)>>>print(r.text){ ... "form": {  "key1": [   "value1",   "value2"  ] }, ...}

傳遞json是這樣

>>>import json>>>url = 'https://api.github.com/some/endpoint'>>>payload = {'some': 'data'}>>>r = requests.post(url, data=json.dumps(payload))

2.4.2 版的新加功能:

>>>url = 'https://api.github.com/some/endpoint'>>>payload = {'some': 'data'}>>>r = requests.post(url, json=payload)

也就是說,你不需要對參數(shù)做什么變化,只需要關(guān)注使用data=還是json=,其余的requests都已經(jīng)幫你做好了。

使用scrapy發(fā)送post請求

通過源碼可知scrapy默認發(fā)送的get請求,當我們需要發(fā)送攜帶參數(shù)的請求或登錄時,是需要post、請求的,以下面為例

from scrapy.spider import CrawlSpiderfrom scrapy.selector import Selectorimport scrapyimport jsonclass LaGou(CrawlSpider):  name = 'myspider'  def start_requests(self):    yield scrapy.FormRequest(      url='https://www.******.com/jobs/positionAjax.json?city=%E5%B9%BF%E5%B7%9E&needAddtionalResult=false',      formdata={        'first': 'true',#這里不能給bool類型的True,requests模塊中可以        'pn': '1',#這里不能給int類型的1,requests模塊中可以        'kd': 'python'      },這里的formdata相當于requ模塊中的data,key和value只能是鍵值對形式      callback=self.parse    )  def parse(self, response):    datas=json.loads(response.body.decode())['content']['positionResult']['result']    for data in datas:      print(data['companyFullName'] + str(data['positionId']))

官方推薦的 Using FormRequest to send data via HTTP POST

return [FormRequest(url="http://www.example.com/post/action",          formdata={'name': 'John Doe', 'age': '27'},          callback=self.after_post)]

這里使用的是FormRequest,并使用formdata傳遞參數(shù),看到這里也是一個字典。

但是,超級坑的一點來了,今天折騰了一下午,使用這種方法發(fā)送請求,怎么發(fā)都會出問題,返回的數(shù)據(jù)一直都不是我想要的

return scrapy.FormRequest(url, formdata=(payload))

在網(wǎng)上找了很久,最終找到一種方法,使用scrapy.Request發(fā)送請求,就可以正常的獲取數(shù)據(jù)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南平市| 威远县| 长沙县| 合作市| 繁昌县| 蕉岭县| 万年县| 乡宁县| 井陉县| 壤塘县| 黑河市| 大同县| 庆安县| 当涂县| 天峻县| 开原市| 山阴县| 古田县| 永昌县| 南涧| 大名县| 巴中市| 新疆| 达日县| 昂仁县| 太仆寺旗| 新干县| 甘孜| 凤城市| 宜君县| 景谷| 岑巩县| 牙克石市| 喀喇沁旗| 龙江县| 樟树市| 孝昌县| 南昌市| 彰化市| 洞口县| 临沂市|