爬虫目的
网络爬虫,主要目的是代替人工收集网络数据。
应用场景主要包括两个方面:
- 网页收集的数据量少,但重复操作频率高;
- 通过网页搜集数据的量大。
只要满足以上两个应用场景,其实都可以考虑使用爬虫技术降低人工成本。
爬虫技术
爬虫的本质,就是模拟人的操作,把网页下载下来,然后通过网页内容找到目标数据。
主要可以分为两个步骤:
- 下载目标网页
- 找到目标数据
第 2 步的操作,就是从已有的网页文本内容中,找到目标目标数据。
这个相对而言,是比较简单的,利用正则匹配 或者是 HTML DOM 结构解析查询都能够比较容易实现目的。
但一般提到的爬虫技术,其实是针对如何下载目标网页的技术。
没经验的朋友可能觉得下载网页很简单,直接一个 GET 域名请求,就可以拿到网页数据。
本质上确实就是这么简单,但复杂点在于:
几乎每一个有内容、数据的网站,都会有一套自己的反爬虫策略。
所以,在有爬取目标的情况下,我们就需要具体测试出来的这个网站的反爬虫策略。
这个 测试、验证、解决反爬虫机制的过程,其实就是所谓的爬虫技术。
反爬虫/爬虫策略
常见的反爬虫策略主要有以下 6 个方向的考虑:
1. 动态页面结构
- 定期更改页面结构- 反爬虫策略:通过定期更改网站的页面结构、标签、关键数据对应的标签属性,这样可以使爬虫难以长期有效地抓取网站。- 爬虫策略:这种方式基本无解,爬虫必须跟随目标网站重新适配爬虫的页面解析逻辑。
- 动态加载内容- 反爬虫策略:使用 JavaScript 动态加载内容,使静态爬虫无法抓取到完整的页面信息。- 爬虫策略:使用 JavaScript 去触发动态加载内容或者用类似于 Python 的 Selenium 模拟人的操作。
2. 内容混淆和加密
- 数据加密- 反爬虫策略:将关键数据进行加密,增加爬虫解析的难度。- 爬虫策略:如果要爬取的数据是加密后的结果,除非是知道解密方式和密钥,否则没办法。
- 图片化关键信息- 发爬虫策略:将一些关键信息(如价格,电话号码等)转化为图片,这样可以防止简单的文本爬虫抓取这些信息。- 爬虫策略:通过 OCR 等技术识别出来图片信息。
3. 隐藏和混淆链接
- 链接混淆- 反爬虫策略:对网站内的链接进行混淆,使得爬虫难以识别和跟踪链接。- 爬虫策略:这种情况只能观察已有混淆的链接和网站真实链接有什么样的关系,进行猜测和验证 。
- 使用JavaScript生成链接- 反爬虫策略:使用 JavaScript 动态生成链接,可以防止静态爬虫抓取链接。- 爬虫策略:使用 JavaScript 去触发动态加载内容或者用类似于 Python 的 Selenium 模拟人的操作加载出来对应的链接信息。
4. 增加验证和检测机制
- 验证码验证:- 反爬虫策略:在关键页面增加验证码验证,可以有效防止自动化的爬虫访问。- 爬虫策略:简单文字字母验证码可以通过 OCR,但复杂验证码基本无解。
- 行为检测:- 反爬虫策略:通过检测用户行为(如鼠标移动,点击等)来识别和阻止自动化的爬虫。- 爬虫策略:这种可以通过类似于 Python 的 Selenium 模拟人的操作解决。
5. 服务端限制和监控
- 访问请求头检查:- 反爬虫策略:检查 HTTP 请求的 User-Agent、Cookie、及其他请求头信息的有效性。- 爬虫策略:模拟或直接使用网站网络请求的 UA 、Cookie 及请求头信息。
- 访问频率限制:- 反爬虫策略:通过限制单一 IP 或用户的访问频率,可以防止爬虫的大量访问。- 爬虫策略:用动态的代理 IP 解决单一 IP 问题。
- 用户代理****检测:- 反爬虫策略:检测和限制使用已知的爬虫用户代理的访问。- 爬虫策略:用更多的动态代理 IP,遇到被禁的 IP 直接再换一个。
6. 合法及法律方面的考虑
- 法律法规- 反爬虫策略:清楚标示网站的使用条款,明确禁止非法爬虫的行为。- 爬虫策略:不要公开使用和展示,仅限于方便自家数据的流转和使用。
- 维权行动:- 反爬虫策略:在检测到非法爬虫时,可以考虑通过法律手段来保护网站的数据和资源。- 爬虫策略:如果被人发律师函,被举报,则自求多福~
在用法律维权前,现在常见的做法都是通过服务端限制和监控,检查 User-Agent、Cookie、Ip 的方式做反爬虫的处理,毕竟,不管怎么爬取,最后都得请求目标网站的服务器,所以直接检查你的服务请求活动是否异常就可以。
所以,一般爬虫主要用 动态**UA+动态Cookie+动态IP代理** 执行 HTTP 请求就够了。
动态 IP 代理
动态 UA、动态 Cookie 都可以自己任意组装生成,这部分没有难度。
大部分人遇到的问题,主要是获取动态 IP 代理。
这个问题,本质上是一个资源限制问题。
我们都知道,能在互联网上公开进行网络访问的 IP 地址,都是需要由合法的 IP 地址机构分配得到,并且全球唯一。
普通人肯定是拿不到很多的公网 IP 地址,居民楼一般一栋楼也就的一个公网 IP 而已。
遇到根据 IP 的反爬虫策略,要么被禁止,要么只能以普通人访问的速度爬取网页,且还不能过于规律。
如果爬取的场景,不要求频率很高,不要求多个地区节点进行访问,那单个 IP 也问题不大,每次爬取的时间间隔长一点就行。
但如果爬取的场景,要求频率 或者 要求不同区域节点访问,那这种情况,就只能找合适的代理 IP。
代理 IP,有很多现成的服务商。
但这种 IP 代理服务的价格都不低,收费模式也多样化,包括:
- 按获取的代理 IP 个数收费
- 按租用 IP 代理的时长收费
- 按经过 IP 代理的流量收费
我了解到的按流量收费价格,最高的 80 元/GB,最低的也要 10 元/GB。
所以,在考虑爬虫开发时,除了人工时长成本,还要考虑到动态 IP 代理的费用。
免费 IP 代理池开源项目
互联网上,有一些平台会分享一些免费的 IP 代理。
但很少,很多人用。
Github 上有一些项目,是专门收集这种可免费使用的 IP 代理数据。
- scrapy-proxies:用于 Scrapy 的中间件,用于设置代理 IP。
- proxybroker:可以找到和检查代理的 Python 包,项目地址是。
- gimmeproxy-api:提供免费代理的 API。
- free-proxy:这是一个可以从多个网站收集免费代理的 Python 脚本。
- proxy-pool:这是一个 Python 编写的代理池项目,可以自动爬取和验证代理。
版权归原作者 追风2019 所有, 如有侵权,请联系我们删除。