IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python爬虫与反爬虫 -> 正文阅读

[Python知识库]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知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:07:15  更:2021-09-12 13:09:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:22:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码