行为爬行不是万能药吗?

上一篇文章中,我们研究了应用于交互式仪表板上可视化的计算(汇总)数据处理问题的方法。 本文探讨了在分析案例的背景下从主要来源向用户传递信息的阶段,这使得旋转信息立方体成为可能。 所呈现的数据转换模型是动态创建的,提供了一种单一查询格式和构造函数,用于描述所有连接类型的源( 数据库表,服务和文件)的计算,聚合和集成。


列出的源更有可能是结构化的源,这意味着数据格式的可预测性以及其处理和可视化过程的唯一性。 但是对于分析人员而言,非结构化数据同样令人感兴趣,当出现第一个结果时,有时会高估此类系统的期望。 食欲伴随着进食,而失去谨慎可以准确地重复这个故事...


-更多! 更多黄金!
但是他的喘息几乎听不见,他的眼睛里出现了恐怖。

(童话“金羚羊”)


在切入点之下,本文概述了虚拟用户的多角色群集和行为爬网程序的关键功能和设计,这些用户可以自动从复杂的Internet资源中收集信息。 并且仅提出了这种系统的限制的问题。


在考虑爬网方法时,我们需要从中提取信息的任何假定的Internet资源都可以放在两个极端的范围内-从简单的静态资源和API到需要大量用户参与的动态交互式站点。 前者包括老一代的搜索机器人( 至少是现代的搜索机器人,他们学会了如何处理JavaScript ),后者包括具有浏览器场的系统和模拟用户工作或在收集信息时吸引用户的算法。


换句话说,可以将爬网技术置于复杂程度上:


加冕技术规模


一方面,源的复杂性可以理解为获取主要信息所必需的一系列操作,另一方面,必须应用这些技术来获取适合分析的机器可读数据。


实际上,即使从静态页面中看似简单的文本提取也不总是那么简单-为所有类型的页面开发和维护HTML平面化规则,或者自动化和发明启发式方法和复杂的解决方案都是必要的。 在某种程度上,通过微标记( 特别是Schema.orgRDFa链接数据 )的开发简化了结构化,但是仅在狭义的特殊情况下,用于下载公司卡,产品,名片以及其他搜索引擎优化产品和开放数据。


下面我们将故意缩小范围,将重点放在旨在从复杂站点(尤其是社交网络)下载信息的浏览器爬网子集的技术组件上-当其他简单的爬网方法不起作用时,这是正确的情况。


信息带


考虑一种方法,该方法可以减少从社交网络收集信息的任务,从而减少了信息时间轴磁带的形成-带属性和时间戳的对象的更新集合或流。 对象类型及其属性的列表是不同的,可修改的和可扩展的,例如:开发者和分析操作员添加到系统中并由搜寻器加载的帖子,喜欢,评论,重新发布和其他实体。


由于磁带是结构化对象的流,因此出现了填充问题。 我们支持两种类型的磁带:


  • 一个简单的磁带,里面装满了来自固定来源的内容;
  • 根据关键字,词组和搜索词填充内容的主题供稿。

具有固定来源的简单feed的示例( 已设置配置文件和页面的URL列表 ):




一种简单的磁带类型涉及以给定的爬网深度定期加载各种社交网络上的这些配置文件和页面,以及加载用户选择的对象。 磁带填满后,即可用于查看,分析和上传数据:




主题磁带是一个简单的扩展,它提供全文搜索和对加载到磁带中的对象的过滤。 系统自动控制磁带源的设置及其绕过的深度,分析磁带源的相关性和关系。 实施的此功能是由于在社交网络中缺少内置搜索或“奇怪”的搜索工作。 即使有这样的功能,大多数情况下,结果还是不能完全根据某些内部算法生成,这完全与爬虫的要求不兼容。


一种具有一定启发性的特殊机制负责管理系统中的磁带-它分析数据和历史记录,添加相关的源(配置文件和社区提要),在这些源上提及指定的表达式,或者以某种方式与它们相关联,并删除不相关的表达式。


主题磁带的示例:




将来,磁带将用作分析转换的源,并对结果进行后续可视化,例如以图形形式:




在某些情况下,将执行传入对象的流处理,并保存到专门的目标集合或通过REST API上传,以便在第三方系统中使用收集的内容( 例如 )。 在其他情况下,执行计时器的块处理。 操作员使用脚本描述处理脚本或使用控制信号和功能块构造过程,例如:




任务池


活动磁带定义了主要任务池,每个任务池形成了相关的任务。 例如,一个个人资料遍历任务可以生成许多相关的子任务-绕过朋友,订户或下载新帖子和详细信息等。 主题磁带的新对象还有一个预处理阶段,这也构成了与新的相关资源有关的任务。


结果,我们得到了大量彼此相关的不同类型的任务,这些任务具有优先级,时间和执行条件-所有这只动物园都需要正确管理,因此在任何情况下都不会有些任务将所有群集资源拖到自己身上,从而不利于其他磁带上的任务。


为了解决不一致问题,系统实施了共享虚拟资源和动态优先级排序机制,该机制考虑了任务类型,当前时间以及以“圆顶”形式启动的可能性。 一般而言-优先级在某个点变为最大,但很快消失,任务“变酸”,但是在某些情况下它可以再次增长。


这种圆顶的公式考虑了多个因素,尤其是:父任务的优先级,关联源的相关性以及上一次尝试的时间(通过重复爬网以跟踪更改或发生错误)。


虚拟用户


从广义上讲,虚拟用户可以理解为对人类行为的最大模仿,实际上是爬虫应具有的一组属性:


  • 使用与用户相同的工具执行页面代码-操作系统,浏览器,UserAgent,插件,字体集等;
  • 与页面进行交互,使用键盘和鼠标模拟一个人的工作-在页面上移动光标,进行随机移动,暂停,在打印文本时按下键等( 不要忘记移动设备 );
  • 与决策中心进行互动,该决策中心考虑页面的上下文和内容:
    • 考虑重复项,页面上对象的相关性,爬网深度,时间范围等;
    • 应对异常情况-如果出现验证码或错误,请使用第三方服务或在系统操作员的参与下提出请求并等待解决方案;
  • 有一个可靠的传说-保存您的浏览历史记录和cookie(浏览器配置文件),使用某些IP地址,并考虑到大多数活动的时间段(例如,早晨-晚上或午餐-夜晚)。

在理想化的视图中,一个虚拟用户可以拥有多个帐户,可以在不同时间段使用多个浏览器并与其他虚拟用户建立连接,并拥有个人特有的上网行为和习惯。


例如,设想这样一种情况:虚拟的浏览器和IP就像在工作中一样(“同事”可以使用相同的IP),另一种浏览器和IP就像在家里一样(“邻居”使用它们),并且不时地使用手机。 从这个问题的角度来看,阻止Internet服务自动收集似乎是一项不平凡的任务,而且可能是不切实际的任务。


在实践中,一切都简单得多-与爬虫的斗争像波浪一样,并且包括一小套技术:手动审核,用户行为分析(频率和动作的统一性)以及显示验证码。 Claruler至少在某种程度上具有上面列出的属性,完全实现了虚拟用户的概念,并且在操作员的适当注意下,可以长期发挥其功能,仍然是“ 难以捉摸的乔 ”。


但是使用虚拟用户的道德和法律方面又如何呢?


为了不使用公共数据和个人数据的概念,各方各有其自有的理由,我们仅涉及基本点。


内容的自动发布,垃圾邮件,帐户注册和虚拟用户的其他“活动”活动可以很容易地被视为非法或影响第三方的利益。 在这方面,该系统实现了一种方法,其中虚拟用户只是代表用户(其操作员)的好奇的观察者,而是执行例程来收集信息。


共享虚拟资源管理


如上所述,虚拟用户是在该过程中使用多个系统和虚拟资源的集体实体。 一些资源被单独使用,而其他资源则由多个虚拟用户共享和使用,例如:


  • 输出节点地址(外部IP)-与一个或多个虚拟用户相关联;
  • 浏览器配置文件-与单个虚拟用户相关联;
  • 计算资源-连接到服务器的资源,它设置了整个服务器的限制以及每种任务的设置;
  • 虚拟屏幕-设置服务器限制,但由虚拟用户使用。

每个虚拟资源都有一种类型和一组称为插槽的实例。 在群集的每个节点上,定义了虚拟资源和插槽的配置,这些配置已添加到虚拟资源池中,并且可供群集的所有节点访问。 此外,对于一种类型的虚拟资源,可以添加固定数量和可变数量的插槽。


每个插槽可以具有将在链接和分配资源时用作条件的属性。 例如,我们可以将每个虚拟用户与某些类型的任务,服务器,IP地址,帐户,最大爬网活动的时间段以及其他任意属性相关联。


通常,资源的生命周期包括以下几个阶段:


  1. 在共享的虚拟资源池中启动群集节点时,将注册其他开放式插槽以及资源之间的链接。
  2. 当调度程序从虚拟资源池中启动任务时,将选择并阻止一个合适的空闲插槽。 反过来,阻塞父资源会导致阻塞相关资源,并且在没有可用插槽的情况下,会产生故障。
  3. 完成任务后,将释放主资源插槽及其关联的插槽。

除了在节点配置中指定的资源外,还存在用户虚拟资源-系统操作员使用的实体。 特别是,操作员使用虚拟用户注册表界面,该界面同时支持多种有用功能:


  • 细节管理和指示使用细节的附加属性,特别是虚拟用户可以分为几类并用于不同目的;
  • 跟踪虚拟用户的状态和统计信息;
  • 与虚拟屏幕的连接-实时跟踪工作,在浏览器而不是虚拟用户中执行操作(远程桌面小部件)。

用户虚拟资源的示例注册表:




没有扎根的酷案例


除了作为“杀手fit头”的信息磁带外,我们还开发了一个原型搜索图,以执行复杂的搜索并进行在线调查。 主要思想是构建一个可视化图形,其中节点是对象(人,组织,团体,出版物,喜欢的对象等)的模板,链接是找到的对象之间的连接方式。


一个简单的人员及其之间关系的搜索图示例:



该方法假定搜索从最少的已知信息开始。 初始搜索后,用户检查结果,并逐渐向搜索图添加其他条件,从而缩小选择范围并提高结果的爬网深度和准确性。 最终,该图采用以下形式:每个节点都是带有结果的独立信息提要。 该磁带也可用作在仪表板和小部件上进行进一步分析和可视化的来源。




例如...

例如,我们可以考虑一些简单的情况:


  • 找到该名字的人的所有朋友;
  • 查找具有给定名称和其他属性的某人的朋友的所有帖子;
  • 找到提到指定关键短语的页面的所有订户,或者在某些帖子或作者周围收集环境;
  • 或找到交集-曾经发表过有关特定主题的帖子的作者撰写的所有帖子的评论作者。


当我们宣布开发这种拟合时,我们的客户和合作伙伴热烈支持这一想法,这似乎正是现有类似解决方案中所缺少的。 但是在完成工作原型后,实际上证明客户还没有准备好更改其内部流程,因此,Internet调查被认为是在他们突然需要时可以派上用场的事情。 同时,从技术角度来看,功能很严格,需要进一步完善和支持。 结果,由于我们合作伙伴的需求不足和实际利益,这种挂毯不得不暂时冻结,直到更好的时机。


轮回


考虑到我们解决方案当前的发展方向,此功能似乎仍然很重要,但是从技术角度来看,已经以不同的方式看到了它。 相反,它是Cubisio功能的扩展,即域模型的编辑器和数据处理过程的编辑器,到目前为止,它们已被实现为原型,但以通用形式提供了类似的方法。


主题区域“社交网络”的本体模型的示例(单击编辑器的图像将打开):




基于上述本体的搜索分析图示例(单击图像可打开编辑器):




集群技术栈




所描述的系统是几年前与该平台(我们称为dWires)一起开发的,它正在运行并且仍在使用中。 成功的主要解决方案自然会迁移到我们的新发展中。 特别是,所描述的平台代表了信息分析系统设计人员的第一代,jsBeans平台和我们的其他开发正是从该平台中分离出来的。


简而言之,该系统基于Akka集群,Rhino解释器和嵌入式Jetty Web服务器。 在上图中可以看到一些有用的体系结构特征。 , , , JavaScript- , jsBeans .




, – .



Java. , , – - JavaScript. JavaScript ( ), , , . – , , , , , - .



Akka - . - Akka Cluster , . , " " ( ) .



Selenium WebDriver , : , , API . WebDriver ( , IP ).


( ):


  • , , Xvfb;
  • VNC , , x11vnc;
  • VNC Web Viewer , , noVNC -.


MongoDB, – . Elasticsearch, MongoDB. (H2, EhCache, Db4o).



" ", , bash , ( ). . , .




, .


. – . , " ".


, .



,

( « »)

Source: https://habr.com/ru/post/zh-CN454204/


All Articles