技巧:面试官:比如有10万个网站,有什么方法快速的采集到的数据吗?
优采云 发布时间: 2020-08-31 21:23采访者: 例如,有100,000个网站,有什么方法可以快速采集数据?
Bytedance访谈集(一): Android框架高频访谈问题总结
Bytedance访谈集(二): 项目HR高频访谈摘要
详细分析数据采集采集体系结构中的每个模块
网络爬虫的实现原理和技术
采集器工程师如何有效地支持数据分析师的工作?
基于大数据平台的Internet数据采集平台的基本架构
履带工程师的成长之路
如何在数据采集中建立有效的监控系统?
一个女孩叹了口气: 简历没有打包,也没有面试机会. 我该怎么办?
面试问题的摘要,例如面试准备,HR,Android技术等.
一位网友昨天说,他最近采访了几家公司,并多次问了一个问题,每次回答都不是很好.
采访者: 例如,有100,000个网站需要采集,您需要采用什么方法快速获取数据?
要很好地回答这个问题,实际上,您需要具有足够的知识和足够的技术储备.
最近,我们每周也在招聘和面试十几个人,只有一两个人适合. 他们中的大多数人都与此网民处于同一状况,他们缺乏整体思维,即使是那些拥有三四年工作经验的老司机. 他们具有解决特定问题的强大能力,但是很少站在新的层次上逐点思考问题.
100,000个网站的采集范围已经超过大多数专业民意监测公司的数据采集范围. 为了满足访问者提到的采集要求,我们需要综合考虑网站从采集到数据存储的各个方面,并提出合适的计划,以达到节省成本,提高工作效率的目的.
下面,我们将从网站集合到数据存储的各个方面进行简要介绍.
1. 100,000个网站来自哪里?
通常来说,采集的网站是根据公司业务的发展逐渐积累的.
我们现在假设这是一家初创公司的需求. 该公司刚刚成立,所以很多网站基本上都是冷门. 那么,我们如何采集这100,000个网站呢?有几种方法:
1)历史业务的积累
无论是冷门还是什么,由于需要采集,因此必须有一个具有这种需求的项目或产品. 相关人员必须在早期就调查了一些数据源并采集了一些更重要的{mask2}. 这些可以用作我们采集网站和采集的原创*敏*感*词*.
2)关联网站
在某些网站的底部,通常有一个与网站相关的链接. 特别是对于政府型网站,通常会有相关下级部门的官方网站.
3)网站导航
某些网站可能出于特定目的(例如排水系统等)采集某些网站,并将其分类以进行显示,以便人们可以轻松找到它们. 这些网站可以迅速为我们提供第一批*敏*感*词*网站. 然后,我们可以通过网站关联和其他方法获得更多的网站.
4)搜索引擎
您还可以准备一些与公司业务相关的关键字,在百度和搜狗等搜索引擎中进行搜索,并通过处理搜索结果来提取相应的网站作为我们的*敏*感*词*网站.
5)第三方平台
例如,某些第三方SaaS平台将有7到15天的免费试用期. 因此,我们可以利用这段时间来采集与我们的业务有关的数据,然后从中提取网站作为我们的初始采集*敏*感*词*.
尽管这种方法是最有效,最快的网站采集方法. 但是,在试用期内,获得100,000个网站的可能性非常小,因此需要结合其他方法(例如上述关联网站)来快速获得所需的网站.
通过以上五种方法,我相信我们可以迅速采集我们需要的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作为捕获任务缓存队列.
4. 如何网站采集?
这就像您想获得一百万的年薪. 最大的机会是去华为,阿里和腾讯等一线制造商,您需要达到一定水平. 这条路注定是困难的.
类似地,如果您需要采集数百万个列表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个需要采集的网站. 如何快速获取数据?”如果您能回答这些问题,那么毫无悬念就能得到一个好报价.
最后,我希望所有正在寻找工作的朋友都能得到满意的报价并找到一个好的平台.