scrapy和requests的post请求详解

scrapy.Request(url=url,method="POST",body=formdata,cookies=self.cookie,headers=self.headers,callback=self.get_goods_list)
1、scrapy框架发送post请求有两种格式
(1)、scrapy.FormRequest(url=url,formdata=formdata,cookies=self.cookie,headers=self.headers,callback=self.get_goods_list),这里的formdata是dict格式的,里面不能存在数字,如果有数字用引号括起来;
(2)、scrapy.Request(url=url,method="POST",body=formdata,cookies=self.cookie,headers=self.headers,callback=self.get_goods_list),这里的formdata必须得是字符串,如果是表单格式,那么需要用json.dumps()转为字符串格式;

2、requests发送post请求,传递的参数也分两种格式(data和json)
(1)、requests.post(url, data=json.dumps(formdata)),这里面的data用的必须是字符串类型,如果formdata是一个表单(字典),那么用json.dumps(formdata)转化为字符串;
(2)、
requests.post(url, json=formdata),这里面的formdata就必须是表单格式(字典),如果字典用format添加元素了,那么就会变成字符串,这时就需要用evel从字符串转化为字典(eval('{"orderby": "0","productTypeId": "%s","currentPage": "%s","pageSize": "12"}' %(id,i))),然后传递到data。

总结,有时候我们用requests请求能拿到的数据,但是用
scrapy.FormRequest()怎么也拿不到数据,这个时候就需要用scrapy.Request()来发送请求,scrapy.Request()请求与requests.post()请求用法相同,得到的数据也是相同的。
参考资源:https://www.jb51.net/article/146769.htm

如有那里说的不对,请留言,共同进步!!!
posted @ 2019-08-20 18:12  乔儿  阅读(4930)  评论(1编辑  收藏  举报