|
|
@@ -1,9 +1,11 @@ |
|
|
|
(待续,未完...)
|
|
|
|
(待续,未完... )
|
|
|
|
|
|
|
|
|
|
|
|
## 项目简述
|
|
|
|
|
|
|
|
舆情系统中数据采集是一个关键部分,此部分核心技术虽然由爬虫技术框架构建,但抓取海量的互联网数据绝不是靠一两个爬虫程序能搞定,特别是抓取大量网站的情况下,每天有大量网站的状态和样式发生变化以后,爬虫程序能快速的反应和维护。一旦分布式的爬虫规模大了以后将会出现很多问题,都是种种技术挑战,会有很多门槛,例如:
|
|
|
|
舆情系统中数据采集是一个关键部分,此部分核心技术虽然由爬虫技术框架构建,但抓取海量的互联网数据绝不是靠一两个爬虫程序能搞定,特别是抓取大量网站的情况下,每天有大量网站的状态和样式发生变化以后,爬虫程序能快速的反应和维护。
|
|
|
|
|
|
|
|
一旦分布式的爬虫规模大了以后会出现很多问题,都是种种技术挑战,会有很多门槛,例如:
|
|
|
|
|
|
|
|
1.检测出你是爬虫,拉黑你IP(人家究竟是通过你的ua、行为特则还是别的检测出你是爬虫的?你怎么规避?)
|
|
|
|
|
|
|
@@ -74,7 +76,7 @@ |
|
|
|
|
|
|
|
## 站点画像
|
|
|
|
|
|
|
|
采用模拟浏览器请求技术实现深度和广度抓取算法,总体分3个环节,对整个站点进行 1)全站扫描、2)数据储存、3)特性分析。 <br>
|
|
|
|
采用模拟浏览器请求技术实现深度和广度抓取算法,总体分3个环节,对整个站点进行 1)全站扫描、2)数据储存、3)特性分析。 <br>
|
|
|
|
- siteMeta <br>
|
|
|
|
识别整个网站的结构,并且解析存储,给每一个抓取的网站都建立一个“小档案”库。 <br><br>
|
|
|
|
- siteIndex <br>
|
|
|
@@ -82,7 +84,7 @@ |
|
|
|
- siteFeatures<br>
|
|
|
|
最后将整体分析演算的结果,还原成这个网站的抓取画像和特性,以便于机器将会知道采用哪种抓取策略自动去匹配这个网站的特性抓取,基于这样的设计可以实现大规模数据采集无人值守的效果,也就是百度、谷歌 这些大型搜索引擎实现的数据效果。<br>
|
|
|
|
|
|
|
|
用“探头机器人”对整个网站预抓取一遍,相当于一个先头部队,把抓取网站的情况搞清楚以后,很快机器就知道采取哪种采集策略,大量需要采集的网站,只有极小的部分需要人工干预采集,而且更不需要编写一行爬虫采集代码,完全是自动化及低代码化大规模数据采集。
|
|
|
|
用“探头机器人”对整个网站预抓取一遍,相当于一个先头部队,把抓取网站的情况搞清楚以后,很快机器就知道采取哪种采集策略,大量需要采集的网站,只有极小的部分需要人工干预采集,而且更不需要编写一行爬虫采集代码,完全是自动化及低代码化大规模数据采集。
|
|
|
|
|
|
|
|
|
|
|
|
## 数据抓取
|
|
|
@@ -119,7 +121,6 @@ |
|
|
|

|
|
|
|
|
|
|
|
<br>
|
|
|
|
|
|
|
|
## 分布式采集
|
|
|
|
- 控制器(master)
|
|
|
|
|
|
|
@@ -139,59 +140,69 @@ |
|
|
|
## 爬虫管理
|
|
|
|
- 爬虫状态
|
|
|
|
|
|
|
|
爬虫分布式在很多台服务器上,不知道在哪个服务器上的哪个爬虫程序出了问题是很痛苦的事情。所以,我们需要能对服务器监控,对服务器上每一个爬虫程序进行监控。监控每个爬虫运行是否正常,监控每个运行爬虫的服务器是否正常。
|
|
|
|
爬虫分布式在很多台服务器上,不知道在哪个服务器上的哪个爬虫程序出了问题是很痛苦的事情,甚至抓取数据量猛增导致服务器挂掉都不知道。所以,需要能对服务器监控,对服务器上每一个爬虫程序进行监控。监控每个爬虫运行是否正常,监控每个运行爬虫的服务器是否正常。
|
|
|
|
|
|
|
|
- 采集状态
|
|
|
|
|
|
|
|
抓取的站点时常发生变化,我们就需要知道每个目标采集的站点抓取的数据是否都正常的采集下来了,通过给每个爬虫编上采集任务编号,展示在web界面上,就可以直观的看见数据采集下来的效果。通过邮件告警和每天发送邮件统计数据,可以实时对采集状态进行监控。
|
|
|
|
|
|
|
|
<br>
|
|
|
|
|
|
|
|
## 反爬策略
|
|
|
|
|
|
|
|
- 模拟请求头
|
|
|
|
|
|
|
|
- 代理IP池
|
|
|
|
抓取的站点时常发生变化,我们就需要知道每个目标采集的站点抓取的数据是否都正常的采集下来了,通过给每个爬虫编上采集任务编号,展示在web界面上,就可以直观的看见数据采集下来的效果。通过邮件告警和每天发送邮件统计数据,可以实时对采集状态进行监控。
|
|
|
|
|
|
|
|
<br>
|
|
|
|
|
|
|
|
|
|
|
|
## 采集分类
|
|
|
|
|
|
|
|
- 网站采集
|
|
|
|
|
|
|
|
一般采取两种模式,直接http请求查看HTML代码;另一种是模拟浏览器技术,把请求的JS渲染结果还原成HTML代码,找到HTML标签和URL路径进行抓取。
|
|
|
|
|
|
|
|
x
|
|
|
|
- 公众号采集
|
|
|
|
|
|
|
|
目前基本上就两个路径:通过搜狗微信 和 通过公众号管理后台。但是这两个都封的实在太厉害了,经过多种尝试采用RPA的模式模拟请求人工的操作+代理IP地址,对公众号数据抓取。但是同时需要有大量的微信公众号,因为,这种抓取方法是根据公众号的号进行采集的,没有公众号就不知道抓取的目标。
|
|
|
|
|
|
|
|
- app 采集
|
|
|
|
|
|
|
|
x
|
|
|
|
之前采用在开发环境的电脑上搭建一个WIFI共享让手机APP连接电脑就能看见传输的数据了。目前app的数据采集代价越来越高,上档次的APP几乎没有不加密的。所以,采用Xposed框架对数据采集是最稳定的采集方案了。
|
|
|
|
|
|
|
|
- 公众号采集
|
|
|
|
<br>
|
|
|
|
|
|
|
|
x
|
|
|
|
## 反爬策略
|
|
|
|
|
|
|
|
- 小程序采集
|
|
|
|
- 模拟请求头
|
|
|
|
|
|
|
|
x
|
|
|
|
专门有一个数据表记录存储及更新各种浏览器请求的模拟请求头,例如:Host、Connection、Accept、User-Agent、Referrer、Accept-Encoding、Accept-Language 等各种组合请求头参数。
|
|
|
|
|
|
|
|
- (短)视频采集
|
|
|
|
- 代理IP池
|
|
|
|
|
|
|
|
光是有代理IP是不够的,一般稳定的ip池都很贵,而且代理IP资源对于需要采集的数据源来说永远是匮乏的。换句话说,就需要能充分的利用好代理IP资源。主要实现两大功能:1)实时检查代理IP的有效性,抛弃无效的IP,提高爬虫
|
|
|
|
请求效率。2) IP_1抓取过 A_网站被封掉了,但是不代表IP_1马上抓取 B_网站和N_网站也会被封掉,这样就充分的利用了代理IP。
|
|
|
|
|
|
|
|
x
|
|
|
|
<br>
|
|
|
|
|
|
|
|
## 采集日志
|
|
|
|
- 日志跟踪ID
|
|
|
|
|
|
|
|
|
|
|
|
- 数据生命周期
|
|
|
|
<br><br>
|
|
|
|
- 日志收集
|
|
|
|
|
|
|
|
系统采用了一台独立强劲的服务器专门做日志处理的服务器。这台服务器收集来自四面八方爬虫执行端和各个不同电信机房传输过来的错误日志信息。每个应用程序通过logback的kafak插件,写入消息队列,再批量写入专门的 Elasticsearch 日志分析服务器。
|
|
|
|
|
|
|
|
- 跟踪ID
|
|
|
|
|
|
|
|
为了能更加有效对问题排查,我们从抓取请求开始到数据存储完毕。系统就给每个作业打上了唯一的日志标号,这样的话,无论中间出了什么问题,上一步做了什么操作,执行了什么程序,都能有效的跟踪和追溯。
|
|
|
|
|
|
|
|
|
|
|
|
- 日志分析
|
|
|
|
|
|
|
|
通过数据分析能看出目前哪类采集的数据有问题,当天或者这段时间内大面积的问题主要集中在什么地方,以及具体是哪些网站出了问题,这些抓取出问题的网站是不是重点关注的对象,等等。从面到点的去分析问题。
|
|
|
|
|
|
|
|
|
|
|
|
## 数据解析
|
|
|
|
- 自动解析
|
|
|
|
|
|
|
|
自动解析主要是用于资讯、招标、招聘,系统采用[文本密度算法](https://www.cnblogs.com/aisir/p/6142323.html)实现。因为这3个类型的数据虽然大致相同,但是网站多了以后还是千差万别。如果依靠人工的方式一个个配置或者编写代码,将会是一场灾难。
|
|
|
|
|
|
|
|
- 手动解析
|
|
|
|
|
|
|
|
只有在机器无法自动识别的情况下,采用人工配置,将网页上的字段一一对应的填写到低代码爬虫开发平台。
|
|
|
|
|
|
|
|
|
|
|
|
<br>
|
|
|
|
|
|
|
|
|
|
|
|