这是崔斯特的第五十四篇原创文章
我快绝望了 (๑• . •๑)
这几天接手了一个很急的项目,要在几天爬取某网站的数据。该站是我知道国内反爬比较严重的网站之一,我也做好了心理准备。
分析
该网站数据需要登录才能查看,APP抓包了但是没有发现相关数据,所以选择从PC站入手。
既然需要登录,那就需要验证一个新鲜的cookies
可以访问多少链接;验证方法是:
直接拷贝已经登录该网站请求的Curl,转换为Python代码,加一个循环,测试,单个账号可以跑多少页
经过10多次测试,发现单个Cookies可以下载,至少50个网页。
那么就很好做了,可以开始写思路了。
思路
首先我们需要多个可以登录的Cookies,然后利用这些Cookies去下载网页;一旦返回状态码不是200,就拉黑该Cookies。
具体的方法看下图:
有几点说明下:
- 如何模拟注册。有两种方法,模拟请求和浏览器模拟。模拟请求就是去分析注册过程中的每一步操作,这个请求是发送验证码的,那个是注册的,我优先推荐该方法,但是这种方法遇到一些携带有大量签名参数的变态网站时,难度较大,需要自己一步步断点
JavaScript
。浏览器模拟大家应该很熟悉,Python中就是selenium
傻瓜操作,需要哪里点哪里。注意的坑是何时切换iframe
- Cookies的搭建。其实非常简单,这里利用了
redis
的集合,取Cookies使用spop
即可。这里并没有做验活,因为基本上Cookies产生之后就会被使用。
我要崩溃了
不做不知道,一做吓一跳。
但我以为该网站很简单,搭建一个简单的Cookies池就可以解决,但是我明显太年轻了。
我先把采集链接推到redis
中,使用了scrapy_redis
。
该网站的反爬:
- 代理问题。其实这里有一个悖论,到底该不该使用代理。首先,我不用代理,刚开始还好,但是很快我的本地代理就被拉黑了;那好上代理,但是接下来问题来了,开始出现一个个的验证码需要填了,作为一个单独的用户,我是不可能频繁的改变自己的
IP
去访问网站的,解决方法只有一个,Cookies和代理绑定,但是这种方法真的不好实现,尤其是使用Scrapy
开发的爬虫。 - 验证码问题。既然出现了验证码,那就去解决它。验证码一般是和Cookies绑定的,那么我需要把访问该账号的
IP
、User-Agent
、Cookies
全部拿出来,再去发送新的请求,而且需要注意,此过程中不能再进行IP
的变化。
最后
今天了大概两天的斗智斗勇,现在基本上可以爬到数据了,希望明天可以交差,不然端午就要加班了。
希望这只小猫咪可以给我带来好远。