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,方便進行訪問,獲取信息。
