阿C的博客

Tag: Crawl

什么是爬虫和反爬虫?

  • 爬虫:使用技术手段,批量获取网站信息。关键在于批量。
  • 反爬虫:使用技术手段,阻止别人批量获取自己的网站信息。关键也在于批量。
  • 误伤:在反爬虫的过程中,错误的将普通用户识别为爬虫。误伤率高的反爬虫策略,效果再好也不能用。
  • 拦截:成功地阻止爬虫访问。这里会有拦截率的概念。通常来说,拦截率越高的反爬虫策略,误伤的可能性就越高。因此需要做个权衡。
  • 成本:机器成本与人力成本的总和。

注意:人力成本也是资源,而且比机器更重要。因为,根据摩尔定律,机器越来越便宜。而根据IT行业的发展趋势,程序员工资越来越贵。因此,让对方加班才是王道,机器成本并不是特别值钱。

传统反爬虫手段

  • 封IP:后台对访问进行统计,如果单个IP访问超过阈值,予以封锁。
    这个虽然效果还不错,但是其实有两个缺陷,一个是非常容易误伤普通用户,另一个就是,IP其实不值钱,几十块钱甚至有可能买到几十万个IP。所以总体来说是比较亏的。不过针对三月份呢爬虫,这点还是非常有用的。
  • 封session:后台对访问进行统计,如果单个session访问超过阈值,予以封锁。
    session即账号。这个看起来更高级了一些,但是其实效果更差,因为session完全不值钱,重新申请一个就可以了。
  • 封UA:后台对访问进行统计,如果单个UserAgent访问超过阈值,予以封锁。
    这个是大招,类似于抗生素之类的,效果出奇的好,但是杀伤力过大,误伤非常严重,使用的时候要非常小心。至今为止我们也就只短暂封杀过mac下的火狐。(因为爬虫通常使用火狐的UserAgent居多)

注意:组合起来能力变大,误伤率下降,在遇到低级爬虫的时候,还是比较好用的。

纯JAVASCRIPT反爬虫示例

  • 更改连接地址:让对方抓取到错误数据。这种方法简单,但是如果对方针对性的来查看,十分容易被发现。
  • 静态更改密钥:手工操作,做法简单,不易被发现。key即是密钥,通过有意爬取错误数据的方式来迷惑,实际数据已经下来用计算拿到。
  • 动态更改密钥:程序操作,做法简单,不易被发现,代价更低。将静态更改密钥的代码变为0
  • 复合更改密钥:让对方很难分析,如果加了浏览器检测,更难被爬取。

我抓到你了——该怎么办

  • 不会引发生产事件 —— 直接拦截
  • 可能引发生产事件 —— 给假数据(投毒)

注意:一旦发现,技术压制心理战放水……

一些想法

  • 越是低级的爬虫,越容易被封锁,但是性能好,成本低。越是高级的爬虫,越难被封锁,但是性能低,成本也越高。
  • 当成本高到一定程度,我们就可以无需再对爬虫进行封锁。因为考虑边际效应,应该寻找黄金点,该放则放,超过这个点,那就让它爬好了。毕竟我们反爬虫不是为了面子,而是为了商业因素。

更多内容参看: 关于反爬虫,看这一篇就够了 & 缓存图
关注一下技术:PhantomJS & Selenium

爬虫第一炮-福利网站:妹子图

基础环境

  • python环境:2.7.13
  • python类库:Requests[1]、beautifulsoup[2]、LXML[3]
pip install Requests
pip install beautifulsoup4
pip install LXML

流程示例图

爬虫教程第一炮之流程示意图

  • 爬虫入口:顾名思义我们需要程序从什么地方开始爬取网页
  • 存储数据:如果获取的网页有你需要的内容则取出数据保存
  • 提取页面URL:如果你你获取到的网页没有你需要的数据,但是有前往该数据页面的地址URL,则获取该地址URL,再次循环爬虫入口爬取

准备工作完了 ヽ(●-`Д´-)ノ ,我们马上开搞码代码了。

一个简单爬虫的诞生大慨需要下面几个步骤(图很简陋、将就着看看)。


第一步、获取顶级爬虫入口

好啦!现在来开始看看网站找一个爬虫入口(开始爬取的页面):http://www.mzitu.com/all/

爬虫教程第一炮之入口页面

Continue reading

Copyright © 2020 阿C的博客

Theme by AC.AsiaUp ↑