scrapy的post简单请求
1.
重写start_requests(self) 方法
2.start_requests(self)的返回值
yield scrapy.FormRequest(url=url,
callback=self.parse_post,
formdata=data, )
url:请求的post地址
callback:回调函数
headers:可以定制头信息(setting也可以)
formdata:post携带的数据,是一个字典
2.1如果是表单登陆,scrapy在Fromrequest基础上还提供了简便方法
data={'login':'name','password':'content'} yield scrapy.FormRequest.from_response( response,
formname=xxx,
formid=xxx,
formnumber=xxx,
formxpath=xxx, callback=self.parse_post, formdata=data, )
spider最好请求的是干净的login页面,如果存在多个表单
可以利用一下四个参数来定位你需要的form表单
formname,
formid,
formnumber,
formxpath,
重要返回值:
resposne:自动从response里寻找from表单
formdata:只需要提交网页表单里的需求值即可
附:scrapy是非常强大的,post请求后,就直接自动保存了cookie。
setting.py
# Disable cookies (enabled by default)
# COOKIES_ENABLED = False
默认开启
可以应用于一下场景:
1.cookie过期时间很长,常见于一些不规范网站
2.能在cookie过期之前把所有的数据拿到
3.配合其他程序使用,例如先使用selenium登陆之后的cookie保存到本地,scrapy发送请求之前先读取本地cookies。
当然,如果你不想post就携带cookie在scrapy里也是可以的。
1.直接请求需要cookie信息的url
2.重写start_requests(self),迭代器返回值加上cookie
1 def start_requests(self): 2 cookies=dict(a='content',b='content') 3 yield scrapy.Request(url=self.start_1, 4 cookies=cookie #cookie是一个字典 5 callback=self.parse_save)
然后在start_1里也可以直接成功回调函数请求需要登录的url
注意:这里的cookie如果放在返回值的headers里是不会起效果的,scrapy只会从cookies参数里读取
总而言之,不论是上诉方式还是创建session的方式,都是为了携带cookie,方便进行访问,获取信息。