一、前言
-
你是否又遇到scrapy框架中FormRequests的参数选择?formdata还是body?
-
遇到下面这样的网页,你该如何选择参数导入呢?注意对比红色框框内的区别
-
for两个橘子
二、scrapy框架中FormRequest请求的formdata和body
两者的区别不大,主要是多尝试使用即可,具体如下:
1.formdata
scrapy源码中
class FormRequest(Request):
valid_form_methods = ['GET', 'POST']
def __init__(self, *args, **kwargs):
formdata = kwargs.pop('formdata', None)
if formdata and kwargs.get('method') is None:
kwargs['method'] = 'POST'
super(FormRequest, self).__init__(*args, **kwargs)
if formdata:
items = formdata.items() if isinstance(formdata, dict) else formdata
querystr = _urlencode(items, self.encoding)
if self.method == 'POST':
self.headers.setdefault(b'Content-Type', b'application/x-www-form-urlencoded')
self._set_body(querystr)
else:
self._set_url(self.url + ('&' if '?' in self.url else '?') + querystr)
- 其中有一行,items = formdata.items() if isinstance(formdata, dict) else formdata,要求的formdata为dict
- 这下我们知道了,使用formdata时要传入一个dict
- dict的值传入时需要注意: dict的value,不能为int,例如3要转化为"3"
- for一个橘子
yield scrapy.FormRequest(
url=f"http://example.com",
headers=self.fake_headers(jsessionid),
callback=self.handle_response,
formdata=self.fake_data({
"page": "123",
"TimeStr": "2000-01-01,2021-01-30",