爬虫目的
网络爬虫,主要目的是代替人工收集网络数据。
应用场景主要包括两个方面:
-
网页收集的数据量少,但重复操作频率高;
-
通过网页搜集数据的量大。
只要满足以上两个应用场景,其实都可以考虑使用爬虫技术降低人工成本。
爬虫技术
爬虫的本质,就是模拟人的操作,把网页下载下来,然后通过网页内容找到目标数据。
主要可以分为两个步骤:
-
下载目标网页
-
找到目标数据
第 2 步的操作,就是从已有的网页文本内容中,找到目标目标数据。
这个相对而言,是比较简单的,利用正则匹配 或者是 HTML DOM 结构解析查询都能够比较容易实现目的。
但一般提到的爬虫技术,其实是针对如何下载目标网页的技术。
没经验的朋友可能觉得下载网页很简单,直接一个 GET 域名请求,就可以拿到网页数据。
本质上确实就是这么简单,但复杂点在于:
几乎每一个有内容、数据的网站,都会有一套自己的反爬虫策略。
所以,在有爬取目标的情况下,我们就需要具体测试出来的这个网站的反爬虫策略。
这个 测试、验证、解决反爬虫机制的过程,其实就是所谓的爬虫技术。
反爬虫/爬虫策略
常见的反爬虫策略主要有以下 6 个方向的考虑:
1. 动态页面结构
-
定期更改页面结构
-
动态加载内容
2. 内容混淆和加密
-
数据加密
-
图片化关键信息
3. 隐藏和混淆链接
-
链接混淆
-
使用JavaScript生成链接
4. 增加验证和检测机制
-
验证码验证:
-
行为检测:
5. 服务端限制和监控
-
访问请求头检查:
-
访问频率限制:
-
用户代理检测:
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 编写的代理池项目,可以自动爬取和验证代理。