分布式爬虫的登录

Session是一段保存在服务器上面的信息,用来验证用户的身份。在客服端的Cookie中,保存了Session ID,服务器通过这个Session ID来找到对应的这个用户的Session。

不论是模拟登录还是在爬取数据的过程中输入突然出现的验证码,归根到底是修改服务器上面对应你的那一段Session。

只有你的Session被服务器允许直接访问页面,你的爬虫才可以访问页面。否则就会让你登录,或者弹出一个验证码输入框。

分布式爬虫的登录

如果网站需要登录才能爬取数据,那么登录的过程应该在爬虫开始爬取需要的内容之前先完成,并获取(足够多的)Cookie来供我们的爬虫使用。这里我把“足够多的”打上了括号,是因为有些时候只需要一个或者不需要Cookie,但有时候如果只使用一个账号的Cookie,很容易被屏蔽,所以需要注册很多的账号,并用这些账号的Cookie来运行爬虫。

登录网站获取Cookie这件事,还是使用中间件来完成。

假设获取Cookie的中间件叫做CookieMiddleware, 那么它可以这样写:

分布式爬虫的登录_第1张图片

假设我有100个账号和密码,那么我就得到100个账号的Cookie,然后再随机选择一个赋值给request.cookies即可。

上面的代码演示了设定Cookie的过程。但是如果有100个账号,我们不可能在访问每个网页的时候,都把每个账号重新登录一次,这样会大大降低访问的速度。正确的做法是,把使用requests往服务器post账号并返回Cookie的这部份代码单独存放到另外一个文件中,一次性获取所有的Cookie,再将Cookie放到一个列表中,供CookieMiddleware的process_request随机选用。如下面两张图所示:

分布式爬虫的登录_第2张图片
分布式爬虫的登录_第3张图片

当然,在实际的登录中,很少网站只需要用户名和密码就可以登录的,大多数情况下还需要一些其他的东西,像是验证码啊,是否保持登录啊,或者网页中的一些ID啊。所以需要根据实际情况来修改login.py。

一些不会经常改变的常量信息可以使用settings.py来存放,如下图所示:

分布式爬虫的登录_第4张图片

当然,账号也可以像代理IP一样,存放在一个数据库中,爬虫定期使用新的账号的Cookie来替换旧的账号的Cookie。

你可能感兴趣的:(分布式爬虫的登录)