问题背景
没想到,拉勾再次进行了一番反爬策略的更新,不再是针对爬取频率、user-agent锁定等方案去反爬了,爬取的难度也增加了一些。
今天发现,如果单纯地使用scrapy的crawlspider去做全网爬取,会出现如下问题:
就是重定向到登录页面,增加了登录验证才能进行内容访问的逻辑,但接下来却发现并没有这么简单。
问题分析
分析一:
如果单纯只是需要登录才能爬取,那么只需要用selenium去模拟登陆就好了,但是事实证明,登陆进去之后,依然会报302,那到底是登录逻辑有问题还是访问本身有某些限制?
分析二:
通过用“分析一”中的试验,可以确定,首页登录是必须的,但是深度爬取却不仅仅需要登录验证这么简单,那么肯定是需要请求中携带一些特征才能被“拉勾”接收,到底是什么东西呢?
解决问题
为了搞清楚,到底登录后去访问各个模块和爬虫自己爬取有什么区别,我用chrome的调试窗口不断点击各个标签的同时,留意着header的变化。。。
发现,如果要正经地对拉勾发起请求,必须要带上登录时就分配好的cookie,通过用PostMan试验,得到了这个结论:
这里所谓的携带cookie,不是登录时才携带,而是对拉勾每次的请求都必须携带,点击每一个页面都需要携带
那么问题就好办了,如何把cookie放到每一次默认的header中呢?
从crawlspider源码发现,它继承的还是spider,那么就好办了,在重写start_requests
方法前,就设置好head