怎么在python中使用scrapy发送一个帖子请求

  介绍

这期内容当中小编将会给大家带来有关怎么在python中使用scrapy发送一个帖子请求,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

<强>使用请求发送帖子请求

先来看看使用请求来发送帖子请求是多少好用,发送请求

请求简便的API意味着所有HTTP请求类型都是显而易见的,例如,你可以这样发送一个HTTP post请求:

在祝辞祝辞r =, requests.post (& # 39; http://httpbin.org/post& # 39;,, data =,{& # 39;关键# 39;:& # 39;价值# 39;})

使用数据可以传递字典作为参数,同时也可以传递元祖

在祝辞祝辞payload =, ((& # 39; key1& # 39;,, & # 39; value1 # 39;),, (& # 39; key1& # 39;,, & # 39; value2 # 39;))   在祝辞祝辞r =, requests.post (& # 39; http://httpbin.org/post& # 39;,, data=https://www.yisu.com/zixun/payload)>>打印(r.text)   {   …   “形式”:{   “key1”:(   “value1”,   “value2”   ]   },   …   }

传递json是这样

在祝辞祝辞import  json      祝辞祝辞祝辞url =, & # 39; https://api.github.com/some/endpoint& # 39;   祝辞祝辞祝辞payload =,{& # 39;一些# 39;:,& # 39;数据# 39;}      祝辞祝辞祝辞r =, requests.post (url, data=https://www.yisu.com/zixun/json.dumps(载荷))

2.4.2版的新加功能:

在祝辞祝辞url =, & # 39; https://api.github.com/some/endpoint& # 39;   祝辞祝辞祝辞payload =,{& # 39;一些# 39;:,& # 39;数据# 39;}      祝辞祝辞祝辞r =, requests.post (url, json=有效载荷)

也就是说,你不需要对参数做什么变化,只需要关注使用数据=https://www.yisu.com/zixun/还是json=,其余的请求都已经帮你做好了。

<强>使用scrapy发送帖子请求

通过源码可知scrapy默认发送的会请求,当我们需要发送携带参数的请求或登录时,是需要,请求的,以下面为例

得到scrapy.spider  import  CrawlSpider   得到scrapy.selector  import 选择器   import  scrapy   import  json   class  LaGou (CrawlSpider):   时间=name 才能;& # 39;myspider& # 39;   def 才能start_requests(自我):   ,,,油品收率scrapy.FormRequest (   ,,,,,url=& # 39; https://www。* * * * * *.com/jobs/positionAjax.json?city=%E5%B9%BF%E5%B7%9E& needAddtionalResult=假# 39;   ,,,,,formdata=https://www.yisu.com/zixun/{   “第一次”:“真实”,#这里不能给bool类型的事实,请求模块中可以   “pn”:“1”,这号里不能给int类型的1,请求模块中可以   “kd”:“python”   },这里的formdata相当于requ模块中的数据,键和值只能是键值对形式   回调=self.parse   )   def解析(自我,反应):   数据=json.loads (response.body.decode())(“内容”)(“positionResult”)(“结果”)   数据资料:   打印(数据[' companyFullName '] + str(数据[' positionId ']))

官方推荐的使用FormRequest通过HTTP POST发送数据

return  [FormRequest (url=? http://www.example.com/post/action",,   ,,,,,,,,,formdata=https://www.yisu.com/zixun/{“名称”:“John Doe”,“年龄”:“27”},   回调=self.after_post)

这里使用的是FormRequest,并使用formdata传递参数,看到这里也是一个字典。

但是,超级坑的一点来了,今天折腾了一下午,使用这种方法发送请求,怎么发都会出问题,返回的数据一直都不是我想要的

return  scrapy.FormRequest (url, formdata=https://www.yisu.com/zixun/(载荷))

在网上找了很久,最终找到一种方法,使用scrapy.Request发送请求,就可以正常的获取数据。

代码如下:

scrapy返回。请求(url,身体=json.dumps(载荷),方法=& # 39;文章# 39;,标题={& # 39;内容类型# 39;:& # 39;application/json # 39;},)

参考:发送Post请求Scrapy

my_data =, {& # 39; field1 # 39;:, & # 39; value1 # 39;,, & # 39; field2 # 39;:, & # 39; value2 # 39;}   时间=request  scrapy.Request (url,大敌;方法=& # 39;文章# 39;,,   ,,,,,,,,,,,,身体=json.dumps (my_data),   ,,,,,,,,,,,,头={& # 39;内容类型# 39;:& # 39;application/json # 39;},)

<强> FormRequest与请求区别

在文档中,几乎看不到差别,

FormRequest类添加一个新的构造函数的参数。剩余的参数是一样的为请求类和记录在这里。
参数:formdata (dict或元组iterable) -是一个字典(或iterable(键,值)元组)包含HTML表单数据将url编码和分配给请求的主体。

怎么在python中使用scrapy发送一个帖子请求