有时候爬取网站的时候需要登录,在Scrapy中可以通过模拟登录保存cookie后再去爬取相应的页面。
重写start_requests方法
要使用cookie,第一步得打开它,默认scrapy使用CookiesMiddleware中间件,并且打开了。如果你之前禁止过,请设置如下
COOKIES_ENABLES = True
这里我重写了start_requests方法
def start_requests(self):
return [scrapy.Request("http://www.*******.com/login.html",
meta={
'cookiejar': 1}, callback=self.post_login)]
Request指定了cookiejar的元数据,用来往回调函数传递cookie标识。
使用FormRequest
Scrapy为我们准备了FormRequest类专门用来进行Form表单提交的
def post_login(self,response):
# 登陆成功后, 会调用after_login回调函数,如果url跟Request页面的一样就省略掉
return [scrapy.FormRequest.fr