Fork me on GitHub

从cookie池搭建说起

这是崔斯特的第五十四篇原创文章

我快绝望了 (๑• . •๑)

这几天接手了一个很急的项目,要在几天爬取某网站的数据。该站是我知道国内反爬比较严重的网站之一,我也做好了心理准备。

分析

该网站数据需要登录才能查看,APP抓包了但是没有发现相关数据,所以选择从PC站入手。

既然需要登录,那就需要验证一个新鲜的cookies可以访问多少链接;验证方法是:

直接拷贝已经登录该网站请求的Curl,转换为Python代码,加一个循环,测试,单个账号可以跑多少页

经过10多次测试,发现单个Cookies可以下载,至少50个网页。

那么就很好做了,可以开始写思路了。

思路

首先我们需要多个可以登录的Cookies,然后利用这些Cookies去下载网页;一旦返回状态码不是200,就拉黑该Cookies。

具体的方法看下图:

有几点说明下:

  1. 如何模拟注册。有两种方法,模拟请求浏览器模拟。模拟请求就是去分析注册过程中的每一步操作,这个请求是发送验证码的,那个是注册的,我优先推荐该方法,但是这种方法遇到一些携带有大量签名参数的变态网站时,难度较大,需要自己一步步断点JavaScript。浏览器模拟大家应该很熟悉,Python中就是selenium傻瓜操作,需要哪里点哪里。注意的坑是何时切换iframe
  2. Cookies的搭建。其实非常简单,这里利用了redis的集合,取Cookies使用spop即可。这里并没有做验活,因为基本上Cookies产生之后就会被使用。

我要崩溃了

不做不知道,一做吓一跳。

但我以为该网站很简单,搭建一个简单的Cookies池就可以解决,但是我明显太年轻了。

我先把采集链接推到redis中,使用了scrapy_redis

该网站的反爬:

  1. 代理问题。其实这里有一个悖论,到底该不该使用代理。首先,我不用代理,刚开始还好,但是很快我的本地代理就被拉黑了;那好上代理,但是接下来问题来了,开始出现一个个的验证码需要填了,作为一个单独的用户,我是不可能频繁的改变自己的IP去访问网站的,解决方法只有一个,Cookies和代理绑定,但是这种方法真的不好实现,尤其是使用Scrapy开发的爬虫。
  2. 验证码问题。既然出现了验证码,那就去解决它。验证码一般是和Cookies绑定的,那么我需要把访问该账号的IPUser-AgentCookies全部拿出来,再去发送新的请求,而且需要注意,此过程中不能再进行IP的变化。

最后

今天了大概两天的斗智斗勇,现在基本上可以爬到数据了,希望明天可以交差,不然端午就要加班了。

希望这只小猫咪可以给我带来好远。