访者: 例如,有100,000个网站,有什么方法可以快速采集数据?
优采云 发布时间: 2020-08-08 11:16Bytedance访谈集(一): Android框架高频访谈问题总结
Bytedance访谈集(二): 项目HR高频访谈摘要
详细分析数据采集框架中的每个模块
采集器工程师如何有效地支持数据分析师的工作?
基于大数据平台的Internet数据采集平台的基本架构
如何建立有效的数据采集监控系统?
面试问题摘要,如面试准备,HR,Android技术等.
昨天,一位网友说他最近采访了几家公司,一个问题被问了好几次,每次回答都不是很好.
采访者: 例如,如果有100,000个网站需要采集,您如何快速获取数据?
要很好地回答这个问题,实际上,您需要具有足够的知识和足够的技术储备.
最近,我们也在招聘. 我们每周都会采访十几个人. 只有一两个人感到合适. 他们中的大多数人都与此网民处于同一状况. 即使他们工作了三到四年,他们也缺乏整体思维. 经验丰富的老司机. 他们具有解决特定问题的能力,但很少能从一点到一点地思考问题并站在一个新的高度.
100,000个网站的采集范围已经比大多数专业的舆论监测公司广泛. 为了满足访问者提到的采集要求,我们需要综合考虑从网站采集到数据存储的各个方面,并提出适当的计划,以达到节省成本和提高工作效率的目的.
现在,我们将简要介绍从网站采集到数据存储各个方面的情况.
1. 100,000个网站来自哪里?
通常来说,采集的网站是根据公司业务的发展逐渐积累的.
我们现在假设这是一家初创公司的需求. 该公司刚刚成立,因此许多网站基本上都是冷门. 那么,我们如何采集这100,000个网站?有几种方法:
1)历史业务的积累
无论是冷门还是类似的东西,由于需要采集,因此必须有项目或产品的需求. 有关人员必须尽早调查一些数据源并采集一些更重要的网站. 这些可以用作我们在网站上采集并采集的原创*敏*感*词*.
2)关联网站
在某些网站的底部,通常有指向相关网站的链接. 特别是,政府型网站通常具有相关下级部门的官方网站.
3)网站导航
某些网站可能出于特定目的(例如交通堵塞等)采集某些网站,并将其分类以进行显示,以便人们可以轻松找到它们. 这些站点可以迅速为我们提供第一批*敏*感*词*站点. 然后,我们可以通过网站关联等其他方法来获得更多网站.
4)搜索引擎
您还可以准备一些与公司业务相关的关键字,在百度和搜狗等搜索引擎中进行搜索,并处理搜索结果以提取相应的网站作为我们的*敏*感*词*网站.
5)第三方平台
例如,某些第三方SaaS平台将提供7到15天的免费试用期. 因此,我们可以利用这段时间来采集与我们的业务有关的数据,然后从其中提取网站作为我们的初始采集*敏*感*词*.
尽管如此,这种方法是采集网站的最有效,最快的方法. 但是,在试用期间,获得100,000个网站的可能性非常小,因此需要结合上述相关网站之类的其他方法来快速获得所需的网站.
通过以上五种方法,我相信我们可以迅速采集所需的100,000个网站. 但是,有这么多的网站,我们应该如何管理它们?如何知道这是否正常?
2. 如何管理100,000个网站?
当我们采集100,000个网站时,我们面临的第一件事是如何管理,如何配置采集规则以及如何监视网站是否正常.
1)如何管理
100,000个网站,如果没有专门的系统来管理,那将是一场灾难.
同时,由于业务需求(例如智能建议),我们需要对网站进行预处理(例如标记). 此时,将需要一个网站管理系统.
2)如何配置采集规则
我们在早期采集的100,000个网站只是首页. 如果仅将主页用作采集任务,那么我们只能在主页上采集很少的信息,并且错失获取率很高.
如果要基于主页的URL采集整个站点,则服务器资源消耗相对较大,并且成本过高. 因此,我们需要配置我们关心的列并采集它们.
但是,如何为100,000个网站快速高效地配置列?当前,我们通过自动解析HTML源代码来执行列的*敏*感*词*配置.
当然,我们也尝试使用机器学习来解决它,但是效果不是很令人满意.
由于需要采集的网站数量达到100,000个,因此您不得使用xpath和其他精确的定位方法进行采集. 否则,当您配置这100,000个网站时,黄花菜会变得很冷.
同时,必须使用常规采集器进行数据采集,并使用正则表达式来匹配列表数据. 采集文本时,请使用算法来解析时间和文本等属性;
3)如何监视
因为有100,000个网站,所以这些网站每天都有网站修订版,列修订版或新的/已删除的列等. 因此,有必要根据采集到的数据简要分析网站的状况.
例如,如果一个网站几天没有任何新数据,那就一定有问题. 网站已被修改且信息常规性经常失败,或者网站本身存在问题.
为了提高采集效率,可以使用单独的服务来定期检查网站和专栏的状况. 一种是检查网站和专栏是否可以正常访问;二是检查配置的列信息的正则表达式是否正常. 这样运维人员才能对其进行维护.
三,任务缓存
对于100,000个网站,在配置了列之后,采集的条目URL应该达到百万级. 采集器如何有效地获取这些用于采集的条目URL?
如果将这些URL放置在数据库中(无论是MySQL还是Oracle),采集器获取采集任务的操作将浪费大量时间,并大大降低采集效率.
如何解决这个问题?内存数据库是首选,例如Redis,Mongo DB等. 通常,Redis用于缓存. 因此,您可以在配置列时将列信息同步到Redis,并将其用作采集任务缓存队列.
四个. 如何采集网站?
这就像您要达到数百万的年薪. 最大的机会是去华为,阿里和腾讯等一线制造商,您需要达到一定水平. 这条路注定是困难的.
类似地,如果您需要采集数百万个列表URL,则必须无法实现常规方法.
必须使用分布式+多进程+多线程. 同时,它需要与内存数据库Redis结合使用以进行缓存,从而实现了任务的高效获取和对所采集信息的重复数据删除;
同时,信息分析(例如发布时间和文本)也必须由算法处理. 例如,现在比较流行的GNE,
可以在列表采集期间获得某些属性,因此请尽量不要将它们与文本放在一起进行分析. 例如: 标题. 在正常情况下,从列表中获得标题的准确性比从信息html源代码中解析出的算法要高得多.
同时,如果有一些特殊网站或某些特殊需求,我们可以使用定制开发来处理它们.
五个统一的数据存储界面
为了保持采集的及时性,100,000个网站的采集可能需要超过十或二十个服务器. 同时,每台服务器上部署了N个采集器,再加上一些定制开发的脚本,采集器总数将达到数百个.
如果每个采集器/自定义脚本都开发自己的数据保存接口,则将浪费大量时间进行开发和调试. 而且后续的操作和维护也将是无后顾之忧. 尤其是当业务发生变化且需要调整时. 因此,仍然需要一个统一的数据存储接口.
由于采用了统一的数据存储接口,当我们需要对数据进行一些特殊处理时,例如: 清理,校正等,因此不需要修改每个采集和存储部分,只需修改接口然后重新部署.
快速,方便,快捷.
六. 数据和采集监控
集合了100,000个网站,每天的数据量肯定超过200万. 无论数据分析算法多么精确,它都不能始终达到100%(90%非常好). 因此,数据分析中一定存在异常. 例如: 发布时间大于当前时间,正文中收录相关的新闻信息,等等.
但是,由于我们已经统一了数据存储接口,所以此时可以在该接口上执行统一的数据质量检查. 为了根据异常情况优化采集器和自定义脚本.
同时,您还可以采集每个网站或列上的统计信息. 为了能够及时判断当前采集的网站/栏目信息的来源是否正常,以确保始终有100,000个有效的采集网站.
七,数据存储
由于每天采集大量数据,普通数据库(例如mysql,Oracle等)已不再足够. 甚至像Mongo DB这样的NoSql数据库也不再适用. 目前,ES和Solr等分布式索引是当前的最佳选择.
关于是否使用Hadoop和HBase等大数据平台,取决于具体情况. 在预算较小的情况下,可以先构建分布式索引集群,然后再考虑使用大数据平台.
为了确保查询的响应速度,请尝试不要将主体信息保存在分布式索引中. 可以保存标题,发布时间,URL等内容,以便在显示列表数据时减少辅助查询.
在没有大数据平台的情况下,可以将文本保存在具有固定数据标准的txt等文件系统中. 大数据平台随后上传之后,可以将其传输到HBASE.
八项自动化操作和维护
由于服务器,采集器和自定义脚本数量众多,因此仅依靠手动部署,启动,更新和操作监视非常麻烦,并且容易发生人为错误.
因此,必须有一个自动化的运维系统,该系统可以实现采集器/脚本的部署,启动,关闭和操作,以便能够在发生更改时迅速做出响应.
“例如,有100,000个网站需要采集. 如何快速获取数据?”如果您能回答这些问题,那么毫无悬念就可以得到一个很好的报价.
最后,我希望所有正在寻找工作的人都能获得满意的报价并找到一个好的平台.
访谈#数据采集