Strava

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,方便进行访问,获取信息。

posted @ 2020-09-21 08:59  cheflone  阅读(787)  评论(0编辑  收藏  举报