python爬虫与反爬虫

一、爬虫与反爬虫

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

二、爬虫的攻与防

攻:Day 1 小莫想要某站上所有的电影,写了标准的爬虫(基于HttpClient 库),不断地遍历某
站的电影列表页面,根据Html 分析电影名字存进自己的数据库。
守:Day 1 这个站点的运维小黎发现某个时间段请求量陡增, 分析日志发现都是
IP(xxx.xxx.xxx.xxx) 这个用户,并且user-agent 还是Python-urllib/3.6 ,基于这两点判断非人类
后直接在服务器上封杀。
攻:Day 2 小莫电影只爬了一半,于是也针对性的变换了下策略:1. user-agent 模仿百度
("Baiduspider..."),2IP 每爬半个小时就换一个IP 代理。
守:Day 2 小黎也发现了对应的变化,于是在服务器上设置了一个频率限制,每分钟超过120
次请求的再屏蔽IP。同时考虑到百度家的爬虫有可能会被误伤,想想市场部门每月几十万的投
放,于是写了个脚本,通过hostname 检查下这个ip 是不是真的百度家的,对这些ip 设置一个白
名单。
攻:Day 3 小莫发现了新的限制后,想着我也不急着要这些数据,留给服务器慢慢爬吧,于是
修改了代码,随机1-3 秒爬一次,爬10 次休息10 秒,每天只在8-12,18-20 点爬,隔几天还休
息一下。
守:Day 3 小黎看着新的日志头都大了,再设定规则不小心会误伤真实用户,于是准备换了一
个思路,当3 个小时的总请求超过50 次的时候弹出一个验证码弹框,没有准确正确输入的话就

把IP 记录进黑名单。
攻:Day 4 小莫看到验证码有些傻脸了,不过也不是没有办法,先去学习了图像识别(关键词
PIL,tesseract),再对验证码进行了二值化,分词,模式训练之后,总之最后识别了小黎的验证码
(关于验证码,验证码的识别,验证码的反识别也是一个恢弘壮丽的斗争史...),之后爬虫又跑了
起来。
守:Day 4 小黎是个不折不挠的好同学,看到验证码被攻破后,和开发同学商量了变化下开发
模式,数据并不再直接渲染,而是由前端同学异步获取,并且通过JavaScript 的加密库生成动态
的token,同时加密库再进行混淆(比较重要的步骤的确有网站这样做,参见淘宝和微博的登陆
流程)。
攻:Day 5 Day 5 混淆过的加密库就没有办法了么?当然不是,可以慢慢调试,找到加密原理,
不过小莫不准备用这么耗时耗力的方法,他放弃了基于HttpClient 的爬虫,选择了内置浏览器引
擎的爬虫(关键词:PhantomJS,Selenium),在浏览器引擎运行页面,直接获取了正确的结果,又
一次拿到了对方的数据。
守:Day 5 小黎:.....

三、常见的反爬与反反爬


守: 通过User-Agent 来控制访问:
      从用户请求的Headers 反爬虫是最常见的反爬虫策略。由于正常用户访问网站时是通过浏
览器访问的,所以目标网站通常会在收到请求时校验Headers 中的User-Agent 字段,如果
不是携带正常的User-Agent 信息的请求便无法通过请求。

(笔记)User Agent 中文名为用户代理,简称UA,它是一个特殊字符串头,使得服务器能够识
别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、
浏览器插件等。
破:应对措施:如果遇到了这类反爬虫机制,可以直接在自己写的爬虫中添加Headers,将
浏览器的User-Agent 复制到爬虫的Headers 中


守: 基于行为检测(限制IP)
      还有一些网站会通过用户的行为来检测网站的访问者是否是爬虫,例如同一IP 短时间内多
次访问同一页面,或者同一账户短时间内多次进行相同操作。大多数网站都是前一种情况,
对于这种情况有两种策略:
破:应对措施:
      1. 可以专门写一个在网上抓取可用代理ip 的脚本,然后将抓取到的代理ip 维护到代理
池中供爬虫使用,当然,实际上抓取的ip 不论是免费的还是付费的,通常的使用效果
都极为一般,如果需要抓取高价值数据的话也可以考虑购买宽带adsl 拨号的VPS,如
果ip 被目标网站被封掉,重新拨号即可。
      2. 降低请求频率。例如每个一个时间段请求一次或者请求若干次之后sleep 一段时间。由
于网站获取到的ip 是一个区域网的ip,该ip 被区域内的所有人共享,因此这个间隔
时间并不需要特别长, 对于第二种情况,可以在每次请求后随机间隔几秒再进行下一
次请求。对于有逻辑漏洞的网站,可以通过请求几次,退出登录,重新登录,继续请
求来绕过同一账号短时间内不能多次进行相同请求的限制,如果能有多个账户,切换
使用,效果更佳。


守: 通过账号权限反爬(ookie 限制)
      部分网站需要登录才能继续操作,这部分网站虽然并不是为了反爬虫才要求登录操作,但
确实起到了反爬虫,的作用, 可是网页上有一部分内容如: 新浪微博是需要用户登录才能查

看更多内容。限制每个每天下载300 张.
破:应对措施:
      因此可以通过注册账号,访问时带cookie, 模拟登录的方法进行规避。


守: 验证码限制
      这是一个相当古老但却不失有效性的反爬虫策略。更早的时候,这种验证码可以通过OCR
技术进行简单的图像识别破解,但是现在来说,验证码的干扰线,噪点已经多到肉眼都无
法轻易识别的地步。所以目前而言,由于OCR 技术发展不力,验证码技术反而成为了许多
网站最有效的手段之一。
破:应对措施:
      1. 神经网络训练NLP(图像识别)
      2. 人工识别
      3. 打码平台
      4. 第三方OCR 库


守: 动态页面的反爬虫(通过变换网页结构反爬)
       一些社交网站常常会更换网页结构,而爬虫大部分情况下都需要通过网页结构来解析需要
的数据,所以这种做法也能起到反爬虫的作用。在网页结构变换后,爬虫往往无法在原本
的网页位置找到原本需要的内容.
破:应对措施:
      1. 只爬取一次时,在其网站结构调整之前,将需要的数据全部爬取下来;使用脚本对网
站结构进行监测,结构变化时,发出告警并及时停止爬虫。
      2. 逆向分析,抓包
      3. selenium 库

更多爬虫内容可下载:Python网络爬虫教程详解.pdf_python网页爬虫教程-互联网文档类资源-CSDN下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易小侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值