10万个网站从哪里来?如何快速获取数据?
优采云 发布时间: 2021-08-01 07:4310万个网站从哪里来?如何快速获取数据?
昨天有网友表示,他最近面试了几家公司,一个问题被问了好几次,但每次的回答都不是很好。
采访者:比如有10万个网站需要采集,怎么快速拿到数据?
要回答好这个问题,其实你需要有足够的知识和足够的技术储备。
最近,我们也在招聘。我们每周采访十几个人。只有一两个人觉得合适。他们中的大多数人都与这位网友的情况相同。他们缺乏整体思维,即使是工作了三四年的人。有经验的老司机。他们有很强的解决具体问题的能力,但很少点对点思考问题,站在一个新的高度。
100,000个网站的采集的覆盖范围已经超过了大多数专业舆情监测公司的数据采集。为了满足面试官提到的采集需求,我们需要从网站的采集到数据存储的各个环节综合考虑,给出合适的方案,以达到节约成本、提高工作效率的目的。
下面我们将从网站的采集到数据存储的方方面面做一个简单的介绍。
一、10万个网站哪里来的?
一般来说,采集的网站是随着公司业务的发展逐渐积累起来的。
我们现在假设这是一家初创公司的需求。公司刚刚成立,这么多网站,基本上可以说是冷启动。那么我们如何采集这 100,000 个网站?有几种方法:
1)历史业务的积累
不管是冷启动还是什么的,既然有采集的需求,就一定有有这个需求的项目或产品。相关人员一定是前期调查了一些数据来源,采集了一些比较重要的网站。这些可以作为我们采集网站和采集的原创*敏*感*词*。
2)Association网站
在一些网站的底部,通常会有相关网站的链接。尤其是政府类网站,一般都有相关下级部门的官网。
3)网站Navigation
有些网站可能会出于某种目的(如引流等)采集一些网站,并进行分类展示,方便人们查找。这些网站可以快速为我们提供第一批*敏*感*词*网站。然后,我们可以通过网站association 等方式获得更多的网站。
4)搜索引擎
你也可以准备一些与公司业务相关的关键词,在百度、搜狗等搜索引擎中搜索,通过对搜索结果的处理,提取出对应的网站作为我们的*敏*感*词*网站。
5)第三方平台
例如,一些第三方 SaaS 平台会有 7-15 天的免费试用期。因此,我们可以利用这段时间下载与我们业务相关的采集数据,然后从中提取网站作为我们最初的采集*敏*感*词*。
虽然,这个方法是最有效最快的网站采集方法。不过在试用期间,获得10万个网站的可能性极小,所以需要结合上述关联网站等方式,快速获取所需的网站。
通过以上五种方法,相信我们可以快速采集到我们需要的10万个网站。但是,这么多网站,我们应该如何管理呢?怎么知道正常不正常?
二、10万个网站如何管理?
当我们采集到10万个网站时,我们面临的第一件事就是如何管理,如何配置采集规则,以及如何监控网站正常与否。
1)如何管理
100,000网站,如果没有专门的系统来管理,那将是一场灾难。
同时,由于业务需要,比如智能推荐,我们需要对网站做一些预处理(比如打标签)。这时候就需要一个网站管理系统。
2)如何配置采集rules
我们前期采集的10万网站只是首页。如果我们只使用首页作为采集task,那么只有采集才能到达首页,信息很少,漏获取率很高。
如果要整个网站采集使用首页的URL,服务器资源消耗比较大,成本太高。因此,我们需要配置我们关心的列,以及采集他们。
但是,100,000个网站,如何快速高效地配置列?目前我们通过自动解析HTML源代码进行列的*敏*感*词*配置。
当然,我们也尝试过机器学习来处理,但效果不是很理想。
因为采集的网站的数量需要达到10万级,所以一定不要对采集使用xpath等精准定位方法。不然配置100000网站时,黄花菜就凉了。
同时数据采集必须使用通用爬虫,使用正则表达式匹配列表数据。在采集body中,使用算法解析时间和body等属性;
3)如何监控
因为网站有100,000个,这些网站每天都会有网站修改,或者栏目修改,或者新增/删除栏目等等,所以我们需要简单分析一下网站基于的情况关于采集的数据情况。
比如一个网站几天没有新数据,那肯定是有问题。要么网站被修改,经常导致信息规律失效,要么网站本身有问题。
为了提高采集的效率,您可以使用单独的服务定期检查网站和该列的情况。首先是检查网站和列是否可以正常访问;二是检查配置的列信息的正则表达式是否正常。以便运维人员对其进行维护。
三、任务缓存
100,000 网站,配置列后,采集的入口URL应该达到百万级别。 采集器如何高效获取采集的这些入口网址?
如果把这些网址放到数据库中,不管是MySQL还是Oracle,采集器获取采集任务的操作都会浪费很多时间,大大降低采集的效率。
如何解决这个问题?内存数据库是首选,比如Redis、Mongo DB等,一般采集使用Redis做缓存。因此,您可以在配置列的同时将列信息同步到Redis作为采集task缓存队列。
四、网站How to采集?
这就像你想达到百万年薪一样。最大的概率是去华为、阿里、腾讯等一线厂商,需要达到一定的水平。这条路注定是艰难的。
同理,如果需要采集百万级列表网址,常规方法肯定是无法实现的。
必须使用分布式+多进程+多线程。同时需要结合内存数据库Redis等进行缓存,实现任务的高效获取,对采集信息进行排序;
同时,发布时间、文字等信息的分析,也必须经过算法的处理。比如现在比较流行的GNE,
有些属性可以在列表采集中获取,所以尽量不要和正文放在一起分析。例如:标题。一般情况下,从列表中得到的title的准确率要比从信息html源码中解析出来的算法要高很多。
同时,如果有一些特殊的网站或者一些特殊的需求,我们可以使用定制开发来处理。
五、统一数据存储接口
为了保持采集的时效性,10万个网站采集可能需要十几二十台服务器。同时在每台服务器上部署了N个采集器,加上一些自定义开发的脚本,采集器的总数将达到数百个。
如果每个采集器/custom 脚本都开发自己的数据保存接口,开发调试会浪费大量时间。而后续的运维也将是一件无忧无虑的事情。尤其是当业务发生变化需要调整时。因此,统一的数据存储接口还是很有必要的。
因为数据存储接口是统一的,当我们需要对数据做一些特殊的处理时,比如:清洗、校正等,不需要修改每个采集存储部分,只需要修改接口和重新部署。 .
快速、方便、快捷。
六、data 和 采集monitoring
覆盖10万网站采集,每天的数据量肯定超过200万。数据分析算法再准确,也永远达不到100%(90%已经很好了)。因此,数据分析必然存在异常。例如:发布时间大于当前时间,正文收录相关新闻信息等。
但是,因为我们统一了数据存储接口,这个时候可以在接口上进行统一的数据质量检查。为了根据异常情况优化采集器和自定义脚本。
同时还可以统计每个网站或列的数据采集。为了能够及时判断当前采集网站/列源是否正常,保证始终有10万个有效采集网站。
七、数据存储
由于采集每天的数据量很大,普通数据库(如mysql、Oracle等)已经无法胜任。甚至像 Mongo DB 这样的 NoSql 数据库也不再适用。这时候,ES、Solr等分布式索引是目前最好的选择。
至于是否使用Hadoop、HBase等大数据平台,要看具体情况。在预算较小的情况下,可以先搭建分布式索引集群,再考虑大数据平台。
为了保证查询的响应速度,分布式索引中尽量不要保存body信息。可以保存标题、发布时间、网址等内容,以便在显示列表数据时减少二次查询。
当没有大数据平台时,可以将文本保存在txt等固定数据标准的文件系统中。大数据平台后续上传后,即可转入HBASE。
八、自动化运维
由于服务器、采集器、自定义脚本较多,单纯依靠人工部署、启动、更新、运行监控变得非常繁琐,容易出现人为错误。
因此,必须有一个自动化的运维系统,可以部署、启动、关闭和运行采集器/scripts,以便他们在发生变化时能够快速响应。
“比如有100000个网站需要采集,如何快速获取数据?”如果你能回答这些,就应该没有悬念拿到好offer了。
最后希望大家找工作都能拿到满意的offer,找到好的平台。