|
|
使用scrapy发送post请求的坑
使用requests发送post请求
先来看看使用requests来发送post请求是多少好用,发送请求
Requests 简便的 API 意味着所有 HTTP 请求类型都是显而易见的。例如,你可以这样发送一个 HTTP POST 请求:
|
|
使用data可以传递字典作为参数,同时也可以传递元祖
|
|
传递json是这样
|
|
2.4.2 版的新加功能:
|
|
也就是说,你不需要对参数做什么变化,只需要关注使用data=还是json=,其余的requests都已经帮你做好了。
使用scrapy发送post请求
官方推荐的 Using FormRequest to send data via HTTP POST
|
|
这里使用的是FormRequest,并使用formdata传递参数,看到这里也是一个字典。
但是,超级坑的一点来了,今天折腾了一下午,使用这种方法发送请求,怎么发都会出问题,返回的数据一直都不是我想要的
|
|
在网上找了很久,最终找到一种方法,使用scrapy.Request发送请求,就可以正常的获取数据。
|
|
参考:Send Post Request in Scrapy
|
|
FormRequest 与 Request 区别
在文档中,几乎看不到差别,
The FormRequest class adds a new argument to the constructor. The remaining arguments are the same as for the Request class and are not documented here.
Parameters: formdata (dict or iterable of tuples) – is a dictionary (or iterable of (key, value) tuples) containing HTML Form data which will be url-encoded and assigned to the body of the request.
说FormRequest新增加了一个参数formdata,接受包含表单数据的字典或者可迭代的元组,并将其转化为请求的body。并且FormRequest是继承Request的
|
|
最终我们传递的{‘key’: ‘value’, ‘k’: ‘v’}会被转化为’key=value&k=v’ 并且默认的method是POST,再来看看Request
|
|
默认的方法是GET,其实并不影响。仍然可以发送post请求。这让我想起来requests中的request用法,这是定义请求的基础方法。
|
|