专业知识:面试官:比如有10万个网站,有什么快速采集数据的方法吗?

优采云 发布时间: 2022-10-12 19:16

  专业知识:面试官:比如有10万个网站,有什么快速采集数据的方法吗?

  昨天有网友表示,他最近采访了几家公司,被问了好几次问题,但每次的答案都不是很好。

  采访者:比如有10万个网站需要采集,你是怎么快速拿到数据的?

  要回答好这个问题,其实需要有足够的知识和足够的技术储备。

  最近,我们也在招人。我们每周面试十几个人,觉得合适的只有一两个。大部分都和这位网友差不多,都缺乏大局观。即使是那些有三四年工作经验的司机。他们有很强的解决具体问题的能力,但很少能点到点,站在新的高度,全面思考问题。

  采集的10万网站s的覆盖范围已经比大多数专业舆情监测公司的数据采集还要广。为了满足面试官提出的采集要求,我们需要综合考虑从网站的采集到数据存储的方方面面,给出合适的解决方案,以节省成本,提高工作效率。的目标。

  下面我们就从网站的集合到数据存储的各个方面做一个简单的介绍。

  1. 100,000 网站 是从哪里来的?

  一般来说,采集的网站是随着公司业务的发展而逐渐积累起来的。

  现在让我们假设这是一家初创公司的需求。公司刚成立,那么多网站,基本可以说是冷启动。那么我们如何采集这 100,000 个 网站 呢?有几种方法:

  1)历史业务的积累

  不管是冷启动还是什么,既然有采集的需求,那肯定有项目或产品有这种需求。相关人员前期一定研究过一些数据源,采集了一些比较重要的网站。这些可以用作我们采集的 网站 和 采集 的原创*敏*感*词*。

  2) 关联网站

  在一些网站的底部,一般都有相关的网站链接。尤其是政府类网站,一般都有下级相关部门的官网。

  3)网站导航

  有的网站可能会为了某些目的(比如吸引流量等)采集一些网站,分类展示,方便人们找到。这些网站可以快速为我们提供第一批*敏*感*词*网站。然后,我们会通过网站关联等其他方式获得更多的网站。

  4) 搜索引擎

  也可以准备一些与公司业务相关的关键词,去百度、搜狗等搜索引擎,对搜索结果进行处理,提取出对应的网站作为我们的*敏*感*词*网站。

  5) 第三方平台

  例如,一些第三方 SaaS 平台会有 7 到 15 天的免费试用期。因此,我们可以利用这段时间来采集我们业务相关的数据,然后提取其中的网站作为我们初始的采集*敏*感*词*。

  虽然,这种方法是采集 网站 最有效和最快的方法。不过在试用期间,获得10万网站的可能性极小,所以还是需要结合上述关联网站等方法快速获得所需的网站。

  通过以上五种方法,相信我们可以快速采集到我们需要的100,000个网站。但是有这么多网站,我们该如何管理呢?如何知道是否正常?

  2、如何管理100,000个网站?

  

  当我们采集到100,000个网站s,我们首先要面对的是如何管理,如何配置采集规则,如何监控网站是否正常。

  1)如何管理

  100,000网站,如果没有专门的系统来管理,那将是一场灾难。

  同时由于业务需求,比如智能推荐等,我们需要对网站进行一些预处理(比如打标签)。此时,将需要一个 网站 管理系统。

  2)如何配置采集规则

  前期我们采集的10万个网站只是首页。如果我们只把首页作为采集的任务,那么我们只能采集获取到很少的首页信息,泄露率非常高。

  如果要基于首页URL进行全站采集,会消耗大量服务器资源,成本太高。所以,我们需要配置我们关心的列并 采集 他们。

  但是,100,000 网站,如何快速高效地配置列呢?目前,我们通过自动解析HTML源代码来进行列的*敏*感*词*配置。

  当然,我们也尝试过机器学习的方法,但结果并不理想。

  由于采集的网站的数量需要达到10万,所以对于采集绝对不要使用xpath之类的精确定位方法。否则,当你配置100,000 网站时,黄花菜会冷。

  同时,数据采集必须使用通用爬虫,使用正则表达式匹配列表数据。在采集文本中,使用算法解析时间、文本等属性;

  3) 如何监控

  由于有 100,000 个 网站s,这些 网站s 每天都会有 网站 修订,或列修订,或新/删除列等。因此,有必要根据采集的数据简要分析网站的情况。

  例如,如果一个 网站 几天没有新数据,那么一定有问题。网站 的修订导致信息经常失效,或者 网站 本身存在问题。

  为了提高采集的效率,可以使用单独的服务定期检查网站和列的条件。首先是检查网站和列是否可以正常访问;二是检查配置的列信息的正则表达式是否正常。以便运营商对其进行维护。

  3.任务缓存

  100,000 网站,配置栏目后,采集的入口URL应该达到百万级别。采集器如何高效获取采集的这些入口URL?

  如果将这些URL放入数据库,无论是MySQL还是Oracle,采集器获取采集任务的操作都会浪费大量时间,大大降低采集的效率。

  如何解决这个问题呢?内存数据库是首选,如Redis、Mongo DB等。一般采集使用Redis进行缓存。因此,在配置列时,可以将列信息作为采集任务缓存队列同步到Redis。

  4. 如何网站采集?

  就好像你想达到一百万的年薪,大概率是去华为、阿里、腾讯等一线厂商,需要达到一定的水平。这条路注定是艰难的。

  同样,如果你需要采集百万级别的列表URL,常规的方法肯定是不可能的。

  

  必须使用分布式+多进程+多线程。同时,还需要结合内存数据库Redis等缓存,实现采集信息的高效任务获取和重排序;

  同时,对信息的分析,如发布时间、文字等,也必须经过算法处理。比如现在比较流行的GNE,

  在列表采集中可以获取一些属性,所以尽量不要和文本放在一起进行解析。例如:标题。正常情况下,从列表中得到的标题的准确度要远大于从信息html源码中算法得到的准确度。

  同时,如果有一些特殊的网站,或者一些特殊的需求,我们可以使用自定义开发来处理。

  5.统一的数据存储接口

  为了保持采集的及时性,采集的100,000个网站可能需要十几二十台服务器。同时,每台服务器上部署N个采集器,加上一些自定义开发的脚本,采集器总数将达到数百个。

  如果每个采集器/custom脚本都开发了自己的数据存储接口,会浪费大量的开发调试时间。而后续的运维也将是一件不坏的事情。尤其是当业务发生变化需要调整时。因此,仍然需要统一的数据存储接口。

  由于统一的数据存储接口,当我们需要对数据做一些特殊的处理,比如:清理、修正等,不需要修改每个采集存储部分,只需修改接口和重新部署它。

  快,简单,快。

  6.数据和采集监控

  10万网站s的采集的覆盖率绝对是每天200万以上。因为无论数据解析算法多么准确,也不能总是达到 100%(90% 就很好了)。因此,数据解析中必然存在异常。例如:发布时间大于当前时间,文字收录相关新闻信息等。

  但是,由于我们已经统一了数据存储接口,此时我们可以在接口处进行统一的数据质量检查。为了优化采集器,根据异常情况自定义脚本。

  同时,还可以统计每个网站或列的数据采集。为了能够及时判断采集的当前网站/列信息源是否正常,从而保证始终有10万个有效采集网站 .

  7.数据存储

  由于每天都有大量的数据采集,普通的数据库(如mysql、Oracle等)已经无法胜任。甚至像 Mongo DB 这样的 NoSql 数据库也不再适用。这时,ES、Solr等分布式索引是目前最好的选择。

  至于是否使用Hadoop、HBase等大数据平台,还要看具体情况。在预算不多的情况下,可以先搭建分布式索引集群,再考虑大数据平台。

  为了保证查询的响应速度,尽量不要将body信息保存在分布式索引中。可以保存标题、发布时间、URL等信息,从而减少显示列表数据时的二次查询。

  在没有大数据平台的情况下,可以将文本保存到具有固定数据标准的txt等文件系统中。在大数据平台上跟进之后,就可以转入HBASE了。

  八、自动化运维

  由于大量的服务器、采集器、自定义脚本,单纯依靠手动部署、启动、更新、运行监控等变得非常繁琐,容易出现人为错误。

  因此,必须有一个可以部署、启动、关闭、运行采集器/脚本的自动化运维系统,以便在发生变化时能够快速响应。

  “比如有10万个网站需要采集,怎么快速获取数据?” 如果你能回答这些,应该没有悬念拿到好offer。

  最后希望各位找工作的朋友都能拿到满意的offer,找到一个好的平台。

  测评:[实战]渗透测试,你真的会收集信息吗?

  在战争时期,情报应该是最重要的因素之一。

  那么当我们进行渗透测试时呢?

  有人会说,你说蛋没有图,你说鸡巴没有壳。

  表哥真的不是这样的人,本文文章将分享我表哥的信息采集过程和真实案例。

  可能我的采集方法不是很全面,请多多指教。

  废话不多。上图:

  有人会说流程图看起来很乱。事实上,如果每一行都连贯,就不会杂乱无章。你想打我吗?

  不要慌,下面我们拆分流程图来解释。

  信息采集,待测站点明确

  ①站点信息:采集测试站点、服务器信息、网站语言、网站框架、是否有waf拦截

  目录结构:采集方式包括爬虫采集、目录扫描等。分析是否有备份文件,一般编辑器路

  路径,网站框架漏洞。

  这部分目录结构中有一种语言要特别说明:网站.NET语言开发,MVC框架,Model(模型)View(视图)Controller(控制器)简称MVC。因为MVC框架开发的网站是用来配置路由的,当然可以配置路由功能的不仅仅是MVC框架。普通站点也是可以的。遇到这样的目录结构,希望知道为什么是这样的路径。

  路由信息:

  配置好后显示方式如://index/getinfo/2,这种分析方式

  (index为Controller,getinfo为Controller中的方法,2为getinfo的参数)

  所以一般扫描遇到这样的发呆。

  ①

  

  邮箱/用户名等:邮箱页面采集就可以了,一般都有联系我们的模块。如何采集用户名,一般网站published文章都会存在,作者。对不起,作者通常是 网站 用户。

  那为什么要采集呢?结合以上目录集合,是否有管理登录页面,是否有爆破企图,弱密码检测等。

  ②

  主机端口:检测开放端口,如PHPMYADMIN、FTP、3389、21、3306等可以爆破的,webservice地址,通用站点管理框架,tomcat,weblogic,其他端口是否有站点(跳转回目录结构)、webservice() 是否泄露敏感信息(跳转回email/username)

  ③

  子域名的采集:有些网站会使用二级域名甚至三级域名作为后台()或者二级域名网站不严谨,那么我们可以做side-site(如果主站有CDN,可以使用二级域名获取真实IP)。

  ④

  Whios:Whios信息采集,分为注册人、域名反查

  ⑤

  Registrant Information:采集联系邮箱、联系人姓名、联系电话、注册地址、公司信息 使用采集到的信息进行社会工程,我不太擅长。一般都是找95zz的老板组队工作,他们的利润会破钱。

  ⑥域名逆向查询:根据联系人/注册名,重新查询此人注册的所有域名,便于后续分析。

  ⑦站点信息采集:根据上面找到的站点对比站点,是否与待测站点相关,共享程序,解析同一个IP,使用另一个域名到昨晚主站点的后台地址等.(跳转站点信息节点)

  ⑧ 信息比对归档:是信息的分类。很多情况下,不乏顿悟,只是想不起来在哪里可以找到相关的网站,所以信息的对比和分类很重要。

  下面是一个示例说明。域名不是图片上的明文编码的,绝对不是虚拟的。

  站点信息:.net语言、MVC框架、360主机、CDN加速

  目录结构:没有找到任何可用的,伪静态站点,结构比较奇怪

  子域存在:视频网站

  文章网站

  端口:82、8001、8003

  82是webservice,8001,8003,没用

  

  写一个工具把所有的信息都爬出来

  管理信息

  公司信息

  部门信息

  如果信息有登录地址怎么办?Whios信息采集

  注册邮箱 -> 社工,我不能放弃,

  域名反查:,,等

  对比站点信息,是否要将其与要测试的站点关联起来?答案是肯定的哈哈,主程序是一样的,但是二级域名作为内部程序还有很多,比如项目管理系统、后台管理系统、cms系统等等,还有很多没用的二级域名,

  有注入漏洞,普通权限,单库权限,先获取admin数据

  好的,我正在集中我刚刚从主站点采集的管理信息来组装一个自定义爆破字典

  爆破,所以最好打破所有能找到的管理系统

  采集信息的最佳结构如下:

  如图在杂项中放一些东西:

  全文已完结,请多多指教。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线