掌桥专利:专业的专利平台
掌桥专利
首页

通过使用代理进行web抓取及其应用

文献发布时间:2024-04-18 19:52:40


通过使用代理进行web抓取及其应用

背景技术

技术领域

本领域一般而言涉及web抓取。

相关技术

web抓取(也称为屏幕抓取、数据挖掘、web收获)是从互联网对数据的自动搜集。这是通过除了人类使用web浏览器以外的任何方式从互联网搜集数据的做法。web抓取通常是通过执行程序来完成的,该程序查询web服务器并自动请求数据,然后解析数据以提取所请求的信息。

为了进行web抓取,可以使用被称为web爬虫的程序。web爬虫,有时称为web蜘蛛,是执行第一项任务的程序或自动化脚本,即,它以自动方式浏览web以检索数据,诸如所访问网站的超文本传输标记语言(HTML)数据、JSON、XML以及二进制文件。

web抓取对于多种应用是有用的。在第一示例中,web抓取可以被用于搜索引擎优化。搜索引擎优化(SEO)是提高从搜索引擎到网站或网页的网站流量的质量和数量的过程。web搜索引擎,诸如可从位于加利福尼亚州山景城(Mountain View,California)的谷歌(Google)公司获得的谷歌搜索引擎,具有对其结果(包括未付费的那些结果)进行排名的特定方式。为了升高网站在搜索结果中的位置,SEO可以例如涉及页面之间的交叉链接、调整网站的内容以包括特定的关键词短语,或者更频繁地更新网站的内容。自动化的SEO过程可能需要从搜索引擎中抓取搜索结果,以确定网站在搜索结果中的排名如何。

在第二示例中,web抓取可以被用于识别可能的版权。在该示例中,可以将抓取的web内容与受版权保护的素材进行比较,以自动标记web内容是否可能侵犯版权所有者的权利。在检测版权声明的一个操作中,可以向搜索引擎发出请求,搜索引擎已经在互联网上搜集了大量内容。然后可以将抓取的搜索结果与受版权保护的作品进行比较。

在第三示例中,web抓取对于检查付费广告在网页上的放置可以是有用的。例如,许多搜索引擎出售关键词,并且当搜索请求包括出售的关键词时,它们将付费广告放置在返回的页面上的未付费搜索结果上方。搜索引擎可以将相同的关键词出售给不同的公司,从而针对优选位置收取更多费用。此外,搜索引擎还可以按地理区域对销售进行细分。自动化的web抓取可以被用于确定特定关键词或特定地理区域中的广告放置。

在第四示例中,web抓取对于检查电子商务网站上列出的价格或产品可以是有用的。例如,公司可能希望监视竞争对手的价格,以保证其价格保持竞争力。

为了进行web抓取,可以从代理服务器发送web请求。然后,代理服务器代表web抓取器发出请求,收集来自web服务器的响应,并转发网页数据,以便抓取器可以解析和解释该页面。当代理服务器转发请求时,它一般不更改底层内容,而只是将其转发回web爬虫。代理服务器改变请求的源IP地址,因此不会向web服务器提供抓取器的地理位置。以这种方式使用代理服务器可以使请求显得更加自然,从而确保来自web抓取的结果表示如果人类从该地理位置发出请求则将实际呈现的内容。

代理服务器根据用于寻址web服务器的IP地址而分为各种类型。住宅IP地址是如指派给私人客户的、由拥有方(通常是互联网服务提供商(ISP))专门指定的范围内的地址。通常,住宅代理是链接到物理设备(例如,移动电话或台式计算机)的IP地址。但是,从商业角度来看,住宅IP地址块可以由另一个公司直接从拥有的代理服务提供商处批量购买。移动IP代理是住宅代理类别的子集。移动IP代理是具有从移动运营商处获得的IP地址的一种代理。与使用宽带ISP或家庭Wi-Fi的住宅代理相反,移动IP代理使用移动数据。数据中心IP代理是被指派有数据中心IP的代理服务器。数据中心IP是公司而非个人拥有的IP。数据中心代理通常是不在自然人的家中的IP地址。

退出节点代理,或者简称为退出节点,是流量到达互联网的网关。可以有几个代理被用于执行用户的请求,但是退出节点代理是联系目标并可能经由先前的代理将信息从目标转发到用户设备的最终代理。可以有几个代理为用户的请求进行服务,形成代理链,通过每个代理传递请求,其中出口节点是链中最终将请求传递到目标的最后一个链接。

电子商务和搜索引擎站点可能不喜欢为web抓取请求提供服务或者可能尝试限制web抓取请求。为此,这些站点可能尝试确定其接收到的哪些请求是自动的,以及哪些请求是响应于人类web浏览请求的。当web服务器识别出服务器认为是自动化的请求时,服务器可能阻止来自那个代理的所有请求或来自那个代理的具有某些参数的请求。

为了识别哪些请求是自动化的,web服务器可以尝试确定来自特定IP地址或子网的web请求是否随时间满足模式。为了避免检测,可以轮换代理,以便单个IP地址不会做出过多的请求。但是,代理IP地址的供应是有限的。(尤其是IP版本4中的)IP地址空间一般受到限制。因为可用的IP地址中的许多IP地址被标记为数据中心IP,并且可能被抓取的许多目标网站拒绝为来自那些IP地址的web请求提供服务,所以这种有限的供应变得更加严重。由于供应有限,因此获得代理IP地址的成本增加了。过快地停止使用代理IP地址会增加web抓取的成本。

需要用于改进的web抓取的系统和方法。

发明内容

在第一实施例中,提供了一种用于随时间节流(throttle)多个web抓取请求的方法。在该方法中,在第一时间段期间,从客户端计算设备接收多个web抓取请求。多个web抓取请求中的每一个指定要从中捕获内容的目标网站。用于多个web抓取请求的作业描述被放置在队列上。每个作业描述由多个请求中的请求指定的web抓取作业。在比第一时间段长的第二时间段内增量地从队列中移除作业描述。当从队列中移除每个相应的作业描述时,将按照作业描述中指定的那样生成对目标网站的web请求。传输web请求,使得web请求经由从一组代理中选择的代理到达目标网站。

在第二实施例中,提供了一种用于基于交换的数据量来跟踪用户活动的方法。在该方法中,接收来自客户端计算设备的web抓取请求。web抓取请求指定要从中捕获内容的目标网站。基于web抓取请求,生成针对目标网站的web请求。传输web请求,使得web请求经由从一组代理中选择的代理到达目标网站。响应于web请求,经由代理接收从目标网站传输的内容。对接收到的内容中的数据量进行计数以确定客户端计算设备的客户端的当前流量总量。接收到的内容被传输到客户端计算设备。

在第三实施例中,提供了一种用于确定哪些服务器可用于处理web抓取作业的方法。在该方法中,重复地检查多个数据库服务器中的每一个的健康状况。基于健康检查,确定多个数据库服务器中的每一个要被启用还是禁用。多个数据库服务器彼此独立地操作。每个数据库服务器被配置为管理对作业数据库的至少一部分的数据存储,该作业数据库在web抓取作业被执行时存储它们的状态。当从客户端计算设备接收到web抓取请求时,选择被识别为启用的数据库服务器之一。并且,由网页抓取请求指定的作业描述被发送到所选择的数据库服务器,以作为未决web抓取作业存储在作业数据库中。

在第四实施例中,提供了一种用于在web抓取系统中的多个数据中心上分发应用编程接口(API)请求以确保将API请求路由到具有所请求的数据的数据中心的方法。在该方法中,接收来自客户端计算设备的API请求。API请求与先前向web抓取系统请求的web抓取作业相关。识别寻址为web抓取作业提供服务的web抓取系统的数据中心的主机名。API请求被发送到识别出的主机名。最后,API请求在指定的数据中心处被服务。

在第五实施例中,提供了一种用于保护web抓取系统的方法。在web抓取系统的入口点处,验证通过API请求从客户端计算设备接收到的凭证。API请求要求web抓取系统抓取目标网站。当凭证得到验证时,生成指示与该凭证相关联的客户端的身份的令牌。API请求与令牌一起被传输到被配置为在web抓取系统上发起抓取过程的服务器。在被配置为发起web抓取系统的服务器处,分析令牌以确定客户端是否被授权执行请求。当客户端被授权时,web抓取系统抓取目标网站。

在第六实施例中,提供了一种用于聚合从多个数据中心抓取的web结果的方法。在该方法中,在多个数据中心中的相应第一数据中心和第二数据中心处,生成并传输对目标网站的请求。响应于web请求,在每个数据中心处接收来自目标网站的内容。在相应数据中心处接收到的内容存储在档案中。用于相应内容的元数据存储在相应数据中心处的索引文件中的条目中。分析来自客户端的搜索请求以确定搜索请求中的搜索准则是否描述跨各个数据中心的索引文件中的元数据。基于分析,向客户端提供具有到内容的链接的文件。

在第七实施例中,提供了一种用于经由代理抓取web结果的方法。在该方法中,从客户端计算设备接收API请求。API请求指定要抓取的目标网站。基于目标网站,选择指定如何生成HTTP请求序列以访问API请求所请求的内容的抓取器。基于所选择的抓取器和接收到的API请求,生成HTTP请求序列中较早的HTTP请求。较早的HTTP请求经由从一组代理中选择的代理传输到目标网站。经由代理从目标网站接收对较早的HTTP请求的响应。响应包括将会话数据保存在例如cookie中的指令。基于所选择的抓取器和接收到的API请求,生成HTTP请求序列中较晚的HTTP请求,使得较晚的HTTP请求包括会话数据。经由代理从目标网站接收对较晚的HTTP请求的响应。响应包括抓取的web结果。最后,抓取的web结果被传输到客户端计算设备。

还公开了系统和计算机程序产品实施例。

下面参考附图详细描述本发明的另外的实施例、特征和优点以及各个实施例的结构和操作。

附图说明

并入本文并形成说明书的一部分的附图图示了本公开,并且与本说明书一起进一步用于解释本公开的原理并使相关领域的技术人员能够制作并使用本公开。

图1是图示允许客户端通过代理抓取web内容的系统的体系架构图。

图2图示了图1中的系统的示例操作并提供了系统的组件可以如何交互的进一步描述。

图3是更详细地图示web抓取系统的各方面的体系架构图。

图4是更详细地图示web抓取系统的组件的体系架构图。

图5图示了根据实施例的具有节流器的web抓取系统。

图6是图示web请求如何随着时间的推移而被节流和流出的图。

图7是图示可以如何在web抓取系统中实现节流机制的系统图。

图8是图示可以如何在web抓取系统中实现流量计数的系统图。

图9是图示用于对web抓取系统中的流量进行计数和调节的方法的流程图。

图10图示了web抓取系统的各种组件检测其各个数据库服务器是应当被启用还是禁用的操作。

图11图示了用于选择被启用的数据库服务器来处理web抓取请求的web抓取系统的各种组件。

图12A-图12B图示了用于对web抓取请求进行负载平衡的系统,该系统将对结果的请求指引到与从目标请求内容相同的子域。

图13A-图13B图示了图12A-图12B中的系统的操作的方法。

图14图示了用于web抓取系统的负载平衡器处的基于令牌的认证的系统。

图15更详细地图示了用于web抓取系统的基于令牌的认证。

图16图示了将来自多个数据中心的结果存储到档案数据库中的系统。

图17图示了在存储到档案数据库之前从多个数据中心删除重复数据的系统。

元件首次出现的附图通常由对应附图标记中最左边的一个或多个数位来指示。在附图中,相似的附图标记可以指示完全相同或功能性相似的元件。

具体实施方式

实施例公开了一种系统,该系统允许改进用于抓取的web请求的生成,由于请求的性质以及它们被发送出去的时间和方式,与常规自动化的抓取系统中相比,这些请求显得更加自然,像“人类生成的”一样。在示例操作中,客户端可以向系统发送抓取特定站点的请求。在客户端提供的参数内,系统然后管理如何向站点做出请求,以使得对于web服务器而言看起来好像该请求不是由自动化系统生成的一样的方式掩盖请求。以这种方式,通过使请求看起来更加自然,web服务器可能不太可能阻止来自所公开的系统的请求或者可能需要花更长的时间来阻止来自所公开的系统的请求。通过避免web服务器阻止请求并在IP代理被阻止之前延长IP代理的生命周期,实施例可以更高效地使用有限的IP代理地址空间。参考图1-图4描述通过代理做出抓取请求的web抓取系统的各方面。

对于各种应用,客户端可以要求web内容的自动化抓取。一些网站尝试阻止网站认为是自动化的请求。为了确定请求是否是自动化的,这些网站查看一段时间内从特定源接收到的请求的模式。为此,在所请求的网站开始认识到请求是自动化的之前,源只能被频繁地用于发起对web内容的自动化请求。部分地,为了处理这个问题,实施例在每个客户端的基础上节流请求。节流涉及对来自客户端的请求进行排队并周期性地执行队列中的请求。在一个示例实施例中,队列可以特定于特定客户端、目标以及是否通过无头浏览器做出请求。参考图5-图7描述节流web抓取请求的方面。

传统上,代理web抓取服务可以出于费用清单目的通过跟踪做出的多个请求来跟踪用户活动。根据实施例,基于生成的网络流量来跟踪基于代理web的抓取服务的用户活动。特别地,当接收到对web抓取请求的响应时,可以计算通过物理网络层传送的数据量。取决于产品、定价计划和可能的其它参数,请求也可能被计数。为了计算数据量,可以对接收到的数据总量进行调整以考虑数据被传送时发生的压缩。此外,数据量可以不包括获取会话信息以请求所抓取的流量所需的请求和响应。参考图8-图9描述跟踪由web抓取请求生成的网络流量的方面。

对web抓取的请求可以在它们被执行时被放置在数据库中。数据库可以保存与请求相关的状态信息。为了存储和提供数据,可以使用多个数据库服务器,有时称为分片(shard)。当对数据库进行更新或查询时,可以将更新或查询发送到存储用于所查询的更新或数据的数据库的数据库服务器。有时,数据库服务器可能变得不堪重负或以其它方式挂起。根据实施例,“心跳”被周期性地发送到数据库服务器以确定哪些数据库服务器可用以及哪些数据库服务器可能有问题。可以使用共享存储器位置,其中分片的状态可以被指示为不可用。基于该信息,对网页抓取的新请求可以被发送到被确定为可用的那些数据库服务器,而不发送到被确定为不可用的那些数据库服务器。存在共享存储器位置,其中分片的状态可以被指示为不可用,但“心跳”仍然由每个用户服务执行。下面参考图10-图11描述这种数据库服务器管理技术的各方面。

web抓取服务可以包括多个web抓取服务器和用于在多个web抓取服务器之间分发负载的负载平衡服务器。web抓取服务器被配置为注册并进行web抓取请求。当接收到新请求时,负载平衡服务器确定多个web抓取服务器中的哪一个进行该请求。多个web抓取服务器中的每一个可以位于不同的数据中心位置。对web抓取的新请求被指引到由负载平衡服务器确定的数据中心。为了检索web抓取的结果,客户端可以发送后续请求。根据实施例,负载平衡服务器可以确定多个数据中心中的哪一个执行了原始请求。然后,负载平衡服务器可以将后续请求指引到同一个数据中心。以这种方式,可以更高效地从为web抓取请求提供了服务的同一数据中心检索数据。下面参考图12A-图12B和图13A-图13B描述这个直接数据中心访问的各方面。

web抓取服务可以包括多个web抓取服务器和负载平衡服务器。web抓取服务器被配置为注册并进行web抓取请求。当接收到新请求时,负载平衡服务器确定多个web抓取服务器中的哪一个进行该请求。需要进行认证以确定请求是否被授权。根据实施例,负载平衡服务器访问认证服务器,该认证服务器评估随API请求提供的凭证以确定凭证是否有效。当凭证有效时,认证服务器向负载平衡服务器返回指示用户的身份和角色的令牌。然后负载平衡服务器将令牌连同请求一起转发到网站抓取服务器,并且网站抓取服务器使用令牌来核实该请求被授权。下面关于图14和图15描述这种基于令牌的认证的各方面。

web抓取服务可以保存先前抓取的网页的历史。历史可以由多个数据中心存储,每个数据中心维护它们自己的索引。当接收到查找先前抓取的网页的请求时,评估跨多个数据中心存储的各种索引并且组合来自相应数据中心的结果。在进一步的实施例中,跨多个数据中心对web抓取结果进行重复数据删除。参考图16和图17描述对跨多个数据中心的web抓取结果的档案的这个操作。

通过代理的自动化的web抓取

图1是图示允许客户端通过代理抓取web内容的系统100的体系架构图。系统100包括客户端计算设备102、web抓取系统104、多个web代理106A...N以及目标web服务器108。这些组件中的每一个包括一个或多个计算设备并且通过一个或多个网络110连接。

客户端计算设备102是发起从web,特别是从目标web服务器108,抓取内容的请求的计算设备。如上所述,客户端计算设备102可以寻求为各种应用抓取内容。例如,客户端计算设备102可以具有软件或与软件交互以参与搜索引擎优化。客户端计算设备102可以分析广告放置或电子商务产品或列出的价格。客户端计算设备102向web抓取系统104发送请求。该请求可以是同步的或异步的,并且可以采用如关于图2更详细地描述的各种格式。

web抓取系统104开发使用web浏览器模仿人类的请求或请求序列。为了模仿对目标网站的非自动化的请求,web抓取系统104具有制定对目标网站的超文本传输协议(HTTP)请求的逻辑。更进一步,这些站点中的许多都要求来自先前生成的会话的HTTP cookie。HTTP cookie(通常简称为cookie)是一种简单的计算机数据结构,它由web服务器在先前的请求-响应周期中写入的文本组成。由cookie存储的信息可以被用于个性化使用网站时的体验。网站可以使用cookie来查明某人之前是否访问过网站并记录关于他们所做操作的数据。当某人使用计算机浏览网站时,个性化cookie数据结构可以从该网站的服务器发送到该人的计算机。Cookie被存储在该人的计算机上的web浏览器中。在未来的某个时间,该人可能再次浏览该网站。当找到该网站时,该人的浏览器检查用于该网站的cookie是否已找到且可用。如果找到cookie,那么网站可以使用之前存储在cookie中的数据来告诉网站该人之前的活动。使用cookie的一些示例包括购物车、自动登录以及记住已示出的广告。

附加地或可替代地,除了cookie之外,第二请求可以根据响应于第一请求而接收的其它数据来生成。例如,其它数据可以包括其它类型的报头、参数或响应的主体。

因为许多网站要求通常存储在cookie中但可能在来自先前访问的检索到的页面的其它数据中接收的会话信息,所以web抓取系统104可以再现一系列HTTP请求和响应以从目标网站抓取数据。例如,为了抓取搜索结果,本文描述的实施例可以首先请求通用搜索页面的页面,其中人类用户将在HTML页面上的文本框中录入她的搜索项。如果它是人类用户,那么当用户导航到那个页面时,所得的页面可能会向用户的浏览器写入cookie并呈现带有供用户录入她的搜索项的文本框的HTML页面。然后,用户将在文本框中录入搜索项并在web浏览器中呈现的HTML页面上按下“提交”按钮。因此,web浏览器将执行HTTP POST或GET操作,该操作产生带有搜索项和任何所得的cookie的第二个HTTP请求。根据实施例,这里公开的系统将使用响应于第一请求而接收到的数据(诸如cookie、其它报头、参数或来自主体的数据)来再现两个HTTP请求,以生成第二请求。

在实施例中,系统可能能够模拟从特定地理位置发送的请求。实现此目的的一种方式是从特定地理位置选择代理。但是,这样做的一个问题是,每个感兴趣的位置中可能没有足够的代理IP地址可用。随着代理IP地址耗尽并被目标网站阻止,代理IP地址(特别是地理位置)的供应可能变得有限或甚至耗尽。

许多站点提供了让浏览器识别HTTP请求中的地理位置的另一种方式。在这些站点中,IP地址可能不是位置信息的唯一源。浏览器可以具有使用户能够允许浏览器发送位置信息的设置和用户简档。位置信息是描述发送HTTP请求的设备的位置(例如,由移动设备上的GPS接收器检测到的GPS位置)的信息。浏览器可以在HTTP请求中提供位置信息。在一个示例中,该位置可以嵌入在HTTP请求中的报头信息中,诸如嵌入在cookie中。

报头还可以包含用户代理的标识。例如,它们可以包括正在使用的浏览器的类型的标识。以这种方式,web服务器可以基于用户代理被用于访问内容来定制响应。例如,网站在移动浏览器上的外观可能与在桌面浏览器上不同。有时,网站可能仅支持某些类型的浏览器。浏览器可能具有它们可用的不同特征,当网站从HTTP报头中识别出请求来自缺乏网站所需特征的浏览器的信息时,该网站可以拒绝用所请求的页面进行响应。

根据实施例,web抓取系统104可以在不使用实际浏览器的情况下模拟位置信息的这种传输。例如,系统可以将位置信息嵌入在发送到目标网站的HTTP请求的报头中。以这种方式,即使当位于期望区域中的代理IP地址可能不可用时,web抓取系统104也可以能够制定本地化请求。

下面在图2中提供web抓取系统104可以如何制定获得期望内容所需的一系列请求的进一步描述。一旦web抓取系统104制定了HTTP请求,它就将该请求发送到web代理106A...N。

Web代理106A...N各自是充当来自客户端的请求的中介的服务器,客户端从服务器寻求资源,服务器提供那些资源。因此,当请求服务时,web代理106A...N代表客户端运行,潜在地掩盖了对资源服务器的请求的真实来源。

在图1中,web代理106A...N中的至少一个接受来自web抓取系统104的请求。该请求采用代理协议格式。接受请求的至少一个web代理106A...N将请求转发到目标web服务器108。在转发请求时,web代理106A...N将其自己的IP地址指派为用于封装HTTP请求的分组的源IP地址。用于封装HTTP请求的任何分组的目的地IP地址是目标web服务器108的IP地址。因为源IP地址是web代理106A...N,所以目标web服务器108可能无法确定请求源自web抓取系统104。一旦目标web服务器108生成对请求的响应,目标web服务器108就将该响应发送回转发了该请求的web代理106A...N,该web代理进而将该响应转发给web抓取系统104。

目标web服务器108是经由HTTP接受请求并返回响应的计算机软件和底层硬件。作为输入,目标web服务器108通常采用HTTP请求中的路径、HTTP请求中的任何报头以及有时采用HTTP请求的主体,并且使用该信息生成要返回的内容。由HTTP协议提供的内容常常被格式化为网页,诸如使用HTML和JavaScript来格式化。

图2包括图示图1中的系统100的示例操作并且提供系统100的组件可以如何交互的进一步描述的示意图200。

如示意图200中所示,为了请求要抓取的web内容,客户端计算设备102向web抓取系统104发送抓取请求202。响应于抓取请求202,web抓取系统104发起抓取结果所需的一系列操作和事务。在示意图200中,事务被标记为消息204A-D和206A-D。在结果被抓取之后,web抓取系统104将检索到的内容作为抓取结果208提供回客户端计算设备102。

在实施例中,web抓取系统104可以高速缓存抓取的数据。例如,当从客户端接收到抓取请求时,系统可以确定目标网站是否在特定时间内(诸如在最后一天内)已被抓取过。如果网站最近(例如在某个时间段内)被抓取过,那么系统可以返回之前抓取的结果。

客户端计算设备102以各种方式与web抓取系统104交互。在实施例中,客户端可以发送带有描述寻求完成的web抓取的参数的抓取请求202。该请求及其参数可以符合由系统104阐述的API。参数可以包括统一资源定位符(URL)、统一资源标识符(URI)、报头信息、地理位置信息和浏览器信息以及在下面关于图3更详细列出的其它值。响应于该请求,系统104将返回接收到该请求的确认。确认可以包括指示所抓取的结果将在特定位置可用的消息。系统对请求进行排队,并且当检索到抓取的结果时,可以将也称为回调的消息发送到客户端102,该消息指示抓取的结果208可用。以这种方式,系统104可以异步地为客户端对抓取的数据的请求提供服务。

可替代地或附加地,客户端102可以发送请求,如上所述,但是系统104可以在进行抓取的同时保持与客户端102的连接打开,而不是返回确认。一旦抓取完成,结果就响应于初始请求而被返回。以这种方式,系统104可以同步地为对抓取数据的客户端请求提供服务。

可替代地或附加地,请求可以为根据代理协议格式化的请求提供服务。代理协议可以与代理服务器106用来接受和响应请求的协议相同。在示意图200中,此类请求被标记为代理协议请求204A和206A以及代理协议响应204D和206D。代理协议的示例包括HTTP代理协议和SOCKS协议。

当web抓取系统104接收到抓取请求202时,web抓取系统104确定抓取所请求的内容所需的必要事务。如上面所提到的,由于从目标网站108预期的状态变量,为了抓取所请求的内容,与目标网站108的多次事务可能是必要的。在示意图200的示例中,示出了两个事务,但是可以需要更多或更少。对于每个事务,web抓取系统104需要确定用于HTTP请求的所有参数并相应地格式化HTTP请求。

可以针对每个目标网站对确定一系列事务和对应的HTTP请求所必需的逻辑进行预编程。当接收到抓取API请求202时,web抓取系统104查看所需逻辑并相应地生成事务和对应的HTTP请求。此外,可以预先存储描述到达目标网站的HTTP请求序列的逻辑。当接收到抓取目标网站的客户请求时,检索并执行到达目标网站所必需的逻辑,从而发送一系列HTTP请求并接收HTTP响应。

在示意图200中,对目标网站108的HTTP请求是HTTP请求204B和HTTP请求206B。如上所述,web抓取服务器104可以不将请求直接发送到目标网站108,而是通过至少一个中介代理服务器106来发送它们。为了将请求发送到代理服务器106,可以使用代理协议。

为了根据HTTP代理协议发送请求,可以传递完整的URL,而不仅仅是路径。而且,访问代理可以要求凭证。用于HTTP请求的所有其它字段也必须确定。为了再现HTTP请求,web抓取系统104将生成每个请求的所有不同组件,包括方法、路径、请求想要访问的协议的版本、报头以及请求的主体。

下面再现代理协议请求204A的说明性示例:

GET https://www.searchengine.com/HTTP/1.1

Proxy-Authorization:Basic encoded-credentials

Accept:text/html

User-Agent:Mozilla/5.0

Cookie:Location=Alexandria,VA,USA;

在上面的示例中,被调用的HTTP方法是GET命令,并且协议的版本是“HTTP/1.1”。路径是“https://www.searchengine.com/”,并且因为它包括与URI相反的完整URL,所以它可以向web代理106表明HTTP请求是针对代理请求。请求的主体为空。

示例HTTP代理协议请求204A包括四个报头:“Proxy-Authorization(代理授权)”、“Accept(接受)”、“User-Agent(用户代理)”和“Cookie”。“Proxy-Authorization”报头提供用于连接到代理的授权凭证。“Accept”报头提供响应可接受的(一种或多种)媒体类型。“User-Agent”报头提供识别用户代理的用户代理字符串。例如,“User-Agent”报头可以识别浏览器的类型以及该浏览器是移动浏览器还是桌面浏览器。“Cookie”报头是服务器先前使用Set-Cookie(如下)发送的HTTP cookie。在这种情况下,服务器可以被设置为先前已经保存了用户的位置。因此,如果用户之前从Alexandria,Virginia访问过服务器,那么服务器将例如把“Alexandria,VA,USA”保存为cookie值。通过随请求发送这种cookie值,web抓取系统104可以模拟地理位置,而无需先前访问过该位置并且无需位于Alexandria,Virginia的代理IP地址。

系统104可以剖析这些值、HTTP报头和路径(例如,“https://www.searchengine.com/”相对于“https://www.searchengine.com/en/”),以与由人类控制的浏览器似乎合理地生成的请求类似。以这种方式,系统104可以生成HTTP请求以避免目标web服务器能够检测到请求是从机器人程序(bot)自动生成的。

HTTP代理协议是代理协议可以如何被操作的一个示例。在另一个示例中,可以使用HTTP隧穿,例如使用HTTP CONNECT命令。在又一个示例中,代理可以使用SOCKS互联网协议。HTTP代理协议在OSI模型协议栈的应用层操作,而SOCKS可以在会话层(OSI模型协议栈的第5层)操作。其它协议可以可用于在网络协议栈的不同层处转发数据。

当代理服务器106接收到代理协议请求204A时,它向目标网站108发送对应的HTTP请求204B。继续上面的示例,目标网站108可以是由主机名“www.searchengine.com”寻址的web服务器。在这个示例中,HTTP请求204B可以是:

GET/HTTP/1.1

Accept:text/html

User-Agent:Mozilla/5.0

Cookie:Location=Alexandria,VA,USA;

作为响应,目标网站108将返回HTTP响应,其中网站位于其路径“/”处。网站可以根据报头进行定制,例如,它可以根据HTTP请求204B的报头中的位置信息和用户代理信息进行定制。

继续上面的示例,HTTP响应204C可以如下:

在该示例中,HTTP响应204C同样可以包括所使用的协议的版本的指示(这里是“HTTP/1.1”)、指示请求是否成功的状态代码(这里是“200”)、带有状态代码的非权威简短描述的状态消息(这里是“OK”)。HTTP响应204C还可以包括报头和主体。

这里,报头包括“Content-Type(内容类型)”报头和“Set-Cookie(设置Cookie)”报头,“Content-Type”报头包括这个内容的MIME(多用途互联网邮件扩展)类型,而“Set-Cookie”报头设置要与下一请求一起被传输到目标网站108的cookie。在这种情况下,“Set-Cookie”报头保留先前传输的地理位置信息并添加“Session ID(会话ID)”。目标网站108可以预期在进一步的请求中会话ID被返回给它。以这种方式,目标网站108可以跨多个请求-响应周期跟踪会话并维持状态。

上面示例中的HTTP响应204C的主体是简单的HTML页面。如果HTML页面在浏览器中被渲染,那么浏览器将呈现提供搜索文本框字段和提交按钮的表单。当选择提交按钮时,浏览器将向URI“/search”提交另一个请求,该请求携带文本字段中的输入作为其参数。

目标网站108将HTTP响应204C发送到代理服务器106。响应于HTTP响应204C的接收,代理服务器106发送代理协议响应204D。代理协议响应204D可以根据如上所述的代理协议来格式化。在示例中,代理协议响应204D可以与HTTP响应204C类似或完全相同。

当接收到代理协议响应204D时,web抓取系统104随后生成检索所请求的内容所需的序列中的下一个请求或多个请求。在示意图200中,下一个请求是代理协议请求206A。生成代理协议请求206A以模拟假设用户在浏览器上在搜索字段中录入期望的搜索项并按下提交则原本将生成的请求。

继续上面的示例,抓取请求202可以指示web抓取系统104抓取对于搜索项“CompanyA”的搜索结果。而且,web抓取系统104将生成代理协议响应206A以包括从先前事务提供的cookie和会话信息。在那种情况下,代理协议响应206A可以如下:

路径指定的代理协议响应206A包括从目标网站108寻找的目的地的完整URL。它包括目标网站108的主机名“www.searchengine.com”。它还包括在这种情况下寻找的目标网站108内的路径“/search?query=CompanyA”。路径“/search”的第一部分由HTTP响应204C中包括的HTML表单中的提交按钮指定。提交的参数名“query”也由HTTP响应204C中包括的HTML表单中的文本字段元素指定。如上面关于代理协议请求204A和代理协议响应204D所描述的,这是一个示例;可以使用其它协议来建立代理关系。

当代理服务器106从web抓取系统104接收到代理协议请求206A时,它生成对应的HTTP请求206B并将HTTP请求206B发送到目标网站108。代理服务器106以与上面关于HTTP请求204B所描述的方式类似的方式生成HTTP请求206B。继续运行示例,发送到目标网站108的HTTP请求206B可以是:

基于HTTP请求206B,目标网站108生成HTTP响应206C。目标网站108可以生成与所请求的路径对应的页面,包括路径中所包括的参数(这里是“/search?query=CompanyA”)。通常,目标网站108将生成动态检查数据库、可能运行计算并相应地格式化结果的这种页面。继续上面的示例,HTTP响应206C可以是:

/>

与HTTP响应204C类似,HTTP响应206C包括协议版本、状态代码、状态消息、报头和主体。上面的示例中的HTTP响应206C的主体是简单的HTML页面。如果HTML页面在浏览器中被渲染,那么浏览器将呈现搜索结果的列表,其中每个搜索结果具有对应的链接。将首先呈现链接到URL“https://www.companya.com”的结果“CompanyA”。这个HTML页面是客户端计算设备102寻求抓取的内容。

目标网站108将HTTP响应204C返回到代理服务器106。如上面关于代理协议响应204D所描述的,代理服务器106基于HTTP响应206C生成代理协议响应206D。代理协议响应206D包括抓取的内容。代理服务器106将代理协议响应206D发送到web抓取系统104。

基于并响应于代理协议响应206D,web抓取系统104生成抓取的结果208并将其发送到客户端计算设备102。如上所述,web抓取系统104可以在抓取的结果208内将抓取的内容(在这种情况下是HTTP响应206C内的HTML页面)直接发送到客户端计算设备102。可替代地或附加地,web抓取系统104可以解析来自HTML页面的相关信息并且将解析的信息在抓取的结果208中发送到客户端计算设备102。

自动化web抓取系统的组件和操作

图3是更详细地图示web抓取系统104的各方面的体系架构图。Web抓取系统104包括请求摄入管理器302、请求状态管理器304、历史档案306、解析器308、抓取器310和消息队列管理器312。依次描述这些组件中的每一个。

请求摄入管理器302接收并处理来自客户端计算设备102的传入请求。如上所述,客户端计算设备102可以同步和异步地向请求摄入管理器302提供请求。客户端计算设备102可以使用专用API或使用代理协议来提供请求。

API调用可以包括以下任何值作为参数:

·指定要检索的目标网站的数据源,诸如特定搜索引擎或电子商务网站;

·指定域名系统本地化的域名本地化,其可以指定要请求的网站的顶级域名(“.com”、“.fr”、“de”等);

·在搜索引擎或电子商务站点上要搜索的关键词;

·指示从目标网站检索多少结果的数字;

·对于跨越多个页面的抓取的结果,起始页码和要检索的页面的数量,它们一起指定要抓取的页面范围;

·要使用的Accept-Language(接受语言)HTTP报头值,这个报头值可以向目标网站发信号通知返回结果所使用的语言;

·做出请求时要模仿的地理位置;

·做出请求时要模仿的设备类型和浏览器;

·用于发信号通知web抓取系统104是否应当解析HTTP响应的标志;以及

·用于发信号通知web抓取系统104是否应当向目标网站发信号通知自动校正拼写的标志;

·用于发信号通知web抓取系统104是否应当在其cookie中发信号通知使用特定结果语言的标志;

·目标网站可能预期的任何其它参数,诸如进行搜索时使用的排序和过滤方法;以及

·用户凭证,诸如用户名/密码或令牌。

除了上述参数之外,当API请求是回调请求时,提供给请求摄入管理器302的API请求可以包括网络位置(诸如URL),以供web抓取系统104在抓取请求已完成并且结果可用时提供回调消息。

请求摄入管理器302可以被配置为采用多种不同格式的参数并且可以被配置为接受使用多个不同参数名称的请求。在那个实施例中,请求摄入管理器302可以在进一步处理之前将不同的格式和参数名称归一化为通用格式。当请求摄入管理器302从客户端计算设备接受这种不同的格式时,它可以记住客户端计算设备使用了该不同的格式并且将返回的任何结果转换成客户端计算设备预期的格式。

当请求摄入管理器302接收到API请求时,请求摄入管理器302可以首先验证该请求以确保API请求符合web抓取系统104理解的格式并且用于API请求的参数指定web抓取可以由web抓取系统104执行。当请求摄入管理器302确认API请求有效时,请求摄入管理器302可以将API请求发送到请求状态管理器304以管理该请求的处理。

对于异步API请求,请求状态管理器304可以向请求摄入管理器302返回作业标识符,客户端计算设备102稍后可以使用该作业标识符来检索请求的结果。请求摄入管理器302然后可以将该作业标识符发送到客户端计算设备102以供存储并在稍后在请求完成时使用。

对于同步API请求,请求状态管理器304可以保持与客户端计算设备102的连接打开,直到web抓取系统104完成抓取请求并且结果可用。当结果可用时,请求状态管理器304将用抓取的结果来响应API请求,从而关闭连接。

一旦请求摄入管理器302将API请求发送到请求状态管理器304,请求状态管理器304就管理该请求的处理。请求状态管理器304可以将作业描述和与作业描述对应的任何返回结果保存在作业数据库314中。如下面将关于图4讨论的,请求状态管理器304可以包括彼此独立操作的多个服务器。特别地,多个服务器可能不知道彼此并且可能不向彼此传送任何状态。

如下面将关于图4详细描述的,请求状态管理器304和请求摄入管理器302一起工作以将要处理的作业的描述和作业状态的指示保存在作业数据库314中。

一旦作业描述和作业状态被保存在作业数据库314中,请求状态管理器304就将作业描述发送到中央消息队列312。中央消息队列312可以是消息代理(broker)软件应用。消息代理软件应用是将消息从发送者的正式消息传送协议转换成接收者的正式消息传送协议的中介计算机程序模块。在不同的示例中,消息传送协议可以包括高级消息排队协议(AMQP)、面向流传输文本的消息传送协议(STOMP)和MQ遥测传输(MQTT)。中央消息队列312提供web抓取系统104的组件(包括请求状态管理器304、历史档案306、解析器308和抓取器310)之间的通信。通过调解各个组件之间的通信,中央消息队列312最小化各个组件彼此需要的相互认知。这鼓励组件的解耦。

中央消息队列312可以包括用于作业描述的先进先出队列。抓取器310可以监视中央消息队列312,从中央消息队列312取出作业并相应地从目标网站108进行抓取。如上面所提到的,一些作业可以表示同步API请求,而其它作业可以是异步的。抓取器310可以将同步作业优先于异步作业,以帮助确保在web抓取系统104与客户端计算设备102的连接超时之前确定结果。

如上所述,基于从中央消息队列312检索到的作业描述,抓取器310可以制定来自目标网站108的一系列HTTP请求以最终检索请求中指定的结果,诸如期望的HTML页面。

一旦抓取器310检索到结果,抓取器310就可以将检索到的HTML连同作业的标识一起放置到中央消息队列312上。请求状态管理器304可以从中央消息队列312和放置作业数据库314检索结果。可替代地或附加地,抓取器310可以将结果直接发送回请求状态管理器304,请求状态管理器304将结果放置在作业数据库314中并且发送到结果的链接,如下面将关于图4描述的。

如果API请求严格地请求HTML,那么请求摄入管理器302可以将抓取的HTML返回给用户。如上所述,如果来自客户端计算设备102的请求是同步的,那么请求摄入管理器302可以响应于该请求而将抓取的HTML发送到客户端计算设备102。可替代地,如果请求是异步的,那么请求摄入管理器302可以向客户端计算设备102发送结果可用的通知并且客户端计算设备102可以经由请求摄入管理器302从作业数据库314检索抓取的HTML。

如上面所提到的,作为HTML结果的替代或补充,客户端计算设备102可以请求解析的结果。对抓取的HTML的解析可以由解析器308执行。解析器308可以分析抓取的HTML文件并且可以从HTML文件提取相关字段。为了分析HTML文件,解析器308可以使用HTML文件内的已知格式或模式(诸如文档对象模型)来识别相关字段位于何处。对于提取出的相关字段,解析器308可以将提取出的字段插入到新的数据结构(诸如文件)中。在示例中,新文件可以是JavaScript对象表示法(JSON)格式,其是标准数据交换格式。具有解析的数据的所得到的文件可以存储在作业数据库314中并且返回到客户端计算设备102。

检索到的结果还可以被存储到历史档案306。历史档案306是归档或冷数据库服务。历史档案306比作业数据库314存储抓取的数据更长的时间。它并不意味着表示来自目标网站的当前内容,而是表示历史内容。虽然作业数据库314可以在特定时间段(诸如24小时)之后擦除结果,但是历史档案306可以无限期地存储结果。在一个实施例中,历史档案306可以存储解析的抓取的数据而不是HTML数据,因为HTML数据具有可能与客户端不相关的结构和格式。当存储解析的数据时,作业描述也可以被存储并用作索引中的元数据,以允许搜索解析的数据。在客户端两次做出相同请求的情况下,如果来自第一请求的结果比特定期限(诸如一个月)更老,那么结果可以仅被存储在历史档案306中。

图4是更详细地示出web抓取系统104的组件的体系架构图。

如上面所提到的,请求状态管理器304包括彼此独立操作的多个数据库服务器404A...N。特别地,多个服务器可能不知道彼此并且可能不向彼此传送任何状态。

在实施例中,多个服务器404A-N中的每一个可以被称为数据库分片。数据库分片,或简称为分片,是数据库或搜索引擎中数据的水平分区。每个分片都保持在单独的数据库服务器实例上,以分散负载。数据库内的一些数据可以保留在所有分片中,但一些数据仅出现在单个分片中。每个分片充当这个数据子集的单一源。水平分区是一种数据库设计原则,其中数据库表的行被单独保持,而不是被拆分成列(这是规范化和垂直分区在不同程度上所做的)。每个分区形成分片的一部分,而分片进而可以位于单独的数据库服务器或物理位置上。

水平分区可以是有利的,因为表被划分并分布在多个服务器上。由于表被划分并分布到多个服务器中,因此每个数据库中每个表的总行数减少。这减小了索引尺寸,这可以提高数据库的搜索或查询性能。而且,数据库分片可以放置在单独的硬件上,并且多个分片可以放置在多个机器上。这使得数据库能够分布在大量机器上,从而提高性能。

在另一个实施例中,代替独立的数据库服务器,可以使用数据库聚类来将功能分散到多个服务器或机器上。对于数据库聚类,各个服务器必须彼此了解。对于数据库聚类,数据库可能不会跨多个服务器被水平分区。但是,对于聚类,可能需要在各个服务器之间同步状态。例如,两个服务器可能无法同时更新同一行。虽然这在避免需要对数据库的行进行分区、同步状态和避免冲突方面可以具有优势,但它可能降低性能。

因为多个服务器彼此独立地操作,所以请求摄入管理器302可能需要决定使用多个服务器中的哪一个并记住哪个服务器正在处理每个作业以确保与该作业相关的信息(诸如抓取的结果)被发送到正确的服务器。即,负责管理API请求的数据库实例。而且,为了实现性能优势,请求状态管理器304可以能够确定如何跨多个分片对数据进行分段,从而避免需要查询每个分片来确定作业状态或检索作业信息(诸如,抓取的结果)。

在一个实施例中,作业标识符对正在为web抓取请求提供服务的分片的标识进行编码。当创建请求时,作业标识符被发送到客户端计算设备。并且,当客户端计算设备寻求检索先前请求的状态信息或结果时,客户端计算设备可以使用其针对该先前请求接收的作业标识符。请求状态管理器304可以能够解码作业标识符以确定哪个分片正在处置该请求。

存储器内作业表452可以被用于存储和检索状态信息。存储器内作业表452可以存储在易失性(但也非暂态的)存储器中。因为存储器是易失性的,所以如果断电,那么数据可能丢失。但一般而言,易失性存储器的检索时间可以比持久性存储器更快。通过将映射表存储在存储器中,实施例可以提供更快的访问时间。为了存储作业信息,每个抓取作业都需要唯一的作业标识号。特别地,作业标识号在所有数据库分片中都需要是唯一的。

为了访问存储器内作业表452(读和写),请求摄入管理器302可以向存储器内访问服务器450发送请求。存储器内访问服务器450可以充当控制并允许访问存储器内作业表452(并且可能执行其它存储器管理功能)的数据库服务器。

与请求状态管理器304如何包括彼此独立操作的多个服务器类似,请求摄入管理器302也可以包括彼此独立操作的多个服务器。在图4中,这多个服务器被示为API接收器402A...N。API接收器402A...N中的每一个可以执行上面针对请求摄入管理器302描述的功能,包括从客户端计算设备102接收API请求,验证API请求,将描述抓取作业的信息发送到请求状态管理器304,并且(对于回调请求)当抓取结果可用时将检索抓取结果所必需的数据返回到客户端计算设备102。

具有多个API接收器402A...N允许接收器并行地散布服务API请求并且跨多个计算资源和机器散布计算负载。然而,使多个API接收器402A...N独立操作而不共享状态或不知道其它API接收器存在可能增加协调功能的复杂性。

例如,因为请求摄入管理器302和请求状态管理器304都包括彼此独立操作的多个服务器,所以它们可能不知道已经指派的作业标识号。这可能导致难以确定与新的抓取作业相关联的唯一作业标识号。

为了确定作业标识号,API接收器402A...N可以首先确定将抓取作业发送到多个数据库服务器404A...N中的哪一个。参考图10-图11更详细地描述该确定。API接收器402A...N然后可以从由每个相应数据库服务器404A...N维护的计数器检索下一个值。计数器可以在每个时间间隔(诸如每毫秒)复位。API接收器402A...N可以将数据库服务器404A...N的标识与时间戳和从存储器内访问服务器450检索到的下一个值联接。以这种方式,API接收器402A...N可以生成唯一的作业标识符。

除了生成唯一的作业标识符之外,在从客户端计算设备102接收到API请求时,API接收器402A...N可以验证从客户端计算设备102接收到的所有参数,将它们转换成用于由请求状态管理器304内部处理的格式,并将经转换和验证的参数连同唯一的作业标识符(统称为作业描述)一起发送到所选择的数据库服务器404A...N。

特别地,API接收器402A...N可以将作业描述发送到在所选择的数据库服务器404A...N内实现的消息队列454。一旦作业描述被放入适当的消息队列454中,API接收器就可以(在异步请求的情况下)将作业描述连同关于如何检索状态和如何检索结果的其它链接一起返回到客户端计算设备102。此时,对于异步请求,API接收器402A...N将关闭与客户端计算设备102的连接。对于同步请求,与计算设备102的连接将保持打开,直到结果可用。

消息队列454可以是先进先出队列。它可以被实现为如上面关于中央消息队列312所描述的消息代理。数据库微服务456可以监视消息队列454。数据库微服务456可以周期性地或间歇性地从消息队列454检索下一个排队的作业描述并将作业描述和作业状态的指示(诸如,“未决”)放置在作业数据库458中。此外,通过数据库微服务456或者通过另一个组件,作业描述和状态可以被高速缓存在存储器内作业表452中。

根据实施例,客户端计算设备102可能想要向系统104查询作业的状态。在一些应用中,客户端计算设备102可以频繁地向系统104发送新的抓取作业并且在抓取作业仍在进行中时频繁地向系统104询问先前发送的抓取作业的状态。状态请求可以快速增加。

为了处理此类请求,当客户端尝试检索作业的状态时,来自客户端计算设备102的请求可以(经由请求摄入管理器302)被发送到存储器内访问服务器450,其从存储器内作业表452检索状态信息。通过将状态信息高速缓存在作业表452中并使用高速缓存的信息来为客户端对状态的请求提供服务,实施例可以减轻作业数据库314执行该任务的负担,从而提高整体性能。而且,可以比从作业数据库314检索状态信息更快地从存储器内作业表452检索状态信息,从而改善时延并处理客户端对抓取作业的当前状态的请求。

一旦作业描述和作业状态被保存在作业数据库314中,请求状态管理器304就将作业描述发送到中央消息队列312。特别地,数据库微服务456再次将作业描述放置在先前选择的数据库服务器404A-N中实现的消息队列454上。作业描述从消息队列454转发到中央消息队列312。

如上所述,抓取器310从中央消息队列312检索并执行作业。抓取器310检索结果并将它们录入到抓取器310本地的消息队列468中。抓取器310包括多个目标抓取器466A...N。目标抓取器466A...N中的每一个被配置为抓取特定的目标网站。例如,目标抓取器466A可以包括生成一系列HTTP请求以从特定搜索引擎抓取搜索结果的指令;目标抓取器466B可以包括生成一系列HTTP请求以从特定电子商务站点抓取搜索结果的指令;等等。目标抓取器466A...N中的一个或多个可以是通用的,这意味着它们被配置为抓取任何网站,但并不特别适合于特定站点所预期的会话。基于作业描述(以及它所基于的客户API请求),选择目标抓取器466A...N之一来生成HTTP请求并将HTTP请求传输到代理服务器106。

如上面所讨论的,为了生成HTTP请求使得它们看起来是自然的(即,看起来是从用户的浏览器而不是从机器人程序生成的),必须做出各种确定。首先,必须选择要使用的代理。这个选择可以由代理旋转器486完成。所选择的目标抓取器466A...N可以从代理旋转器486请求适当的代理。其次,所选择的目标抓取器466A...N必须确定要在HTTP请求中使用的适当的报头,包括任何需要的cookie。第三,所选择的目标抓取器466A...N必须生成用于HTTP请求本身的路径。

代理旋转器486确定向其发送请求的适当代理。代理旋转器486可以跟踪哪些代理可供使用以及哪些代理已被阻止。例如,代理旋转器486可以跟踪目标网站先前响应于来自抓取器310的先前请求而向代理返回了什么响应。为了跟踪这个信息,抓取器310可以向旋转器486报告通过代理的请求的状态,因为旋转器486不能监视代理与抓取器之间的连接。如果响应是错误或超时,那么代理旋转器486可以识别该代理被目标网站阻止。而且,代理旋转器486可以跟踪哪些代理最近被使用或频繁地被使用。当代理最近被使用或频繁地被使用时,代理旋转器486可以选择不同的代理以允许最近或频繁被使用的代理平静下来,从而在目标网站可能阻止它之前延长其寿命。

如上面针对图2所提到的,所选择的目标抓取器466A...N可以基于来自API的用户参数来确定许多报头,这些报头被保存在所选择的目标抓取器466A...N从中央消息队列312接收的作业描述中。这些报头包括指定请求的用户代理,诸如特定的桌面或移动浏览器。如果API请求没有指定特定的用户代理,那么所选择的目标抓取器466A...N可以从预定列表中选择要指定的用户代理。如上面参考图2所讨论的,cookie可以要求所选择的目标抓取器466A...N向目标网站发出多个连续请求以获得所需的会话信息。

最后,所选择的目标抓取器466A...N可以确定HTTP请求的路径。取决于客户端如何提供其抓取API请求,客户端可以已经指定要抓取的完整URL,或者客户端可以仅提供了用于抓取的参数。如果客户端提供了完整的URL,那么可以使用完整的URL路径。可替代地,如果客户端仅提供了参数,那么可以将参数结合到目标网站所预期的格式的路径中。如上面所提到的,客户端可以在请求中指定要仿冒的地理位置。地理位置可以指定所选择的目标抓取器466A...N包括在路径中的某些参数。即使客户端指定了完整的URL,所选择的目标抓取器466A...N也可能需要修改URL或URI以冒充(impersonate)该位置。

随着(一个或多个)HTTP请求被生成,所选择的目标抓取器466A...N将请求发送到代理并经由代理从目标网站检索结果,如上面关于图2所讨论的。所得的页面通常包括HTML。HTML可以包括指向其它对象(诸如用于显示如地理地图(可能从第三方web服务检索)等内容并与之交互的图像和小部件)的链接。此外,HTML可以包括具有要求执行才能渲染的一些功能的JavaScript。在一些情况下,客户端可以对HTML中未表示的页面的方面感兴趣。在这种情况下,所选择的目标抓取器466A...N可以与无头web浏览器(未示出)交互,该无头web浏览器具有执行JavaScript并检索在HTML内链接的任何对象的必要功能性。以这种方式,无头web浏览器可以开发所抓取网页的完整渲染,或者至少检索开发完整渲染所需的信息。

当所选择的目标抓取器466A...N向代理发送请求时,可能发生错误,使得抓取器无法检索结果。例如,所选择的目标抓取器466A...N可以将从代理接收到的响应识别为不完整、被错误阻止(诸如HTTP响应中的错误状态代码)、或具有其它问题。取决于错误的类型,所选择的目标抓取器466A...N可以尝试再次检索结果。在那种情况下,所选择的目标抓取器466A...N将把作业描述作为新消息放回到中央消息队列312上。当抓取器310从中央消息队列312提取该消息时,抓取器310将尝试生成新的HTTP请求。在生成新的HTTP请求时,代理旋转器486将确定向其发送新的HTTP请求的新代理,从而增加目标网站为新请求提供服务并返回期望结果的可能性。

当返回结果时,目标抓取器将结果放置在消息队列468上。结果从那里被转发到消息队列454。数据库微服务456从消息队列454检索结果。然后,数据库微服务456将结果存储在作业数据库314中。

如上面所提到的,从消息队列454转发到数据库微服务456的消息可以不包括抓取的实际的HTML。代替地,抓取器466将HTML放置在HTML高速缓存462中。HTML高速缓存462可以是分布式存储器-高速缓存系统。代替将HTML存储在任何消息队列中,HTML可以存储在HTML高速缓存462中,并且被排队并传输到数据库微服务456的消息可以是到HTML高速缓存462的链接。当数据库微服务456接收到指示结果已被检索的消息时,数据库微服务456使用该链接从HTML高速缓存462检索结果。

以这种方式绕过消息队列可以是有利的,因为在消息内具有大量HTML可能减慢消息队列(诸如消息队列454)的操作。这是因为消息代理软件应用的性能往往对于所发送消息的大小是敏感的。

随着结果返回到数据库微服务456,作业数据库314的作业状态条目需要被更新以反映作业的“已完成”状态。存储器内作业表452的作业状态条目现在可能已经过时,并且因此,存储器内作业表452中的作业的条目可以例如由数据库微服务456移除。在移除条目后,如果客户端正在请求作业状态,那么下次接收到状态请求时,可以直接从作业数据库314检索结果。

此外或可替代地,数据库微服务456可以将带有作业标识符和对应作业已完成的指示的消息发送到中央消息队列312。该消息可以由尝试联系客户端的通知器460拾取,可能位于他们随初始请求提供的URL处,并带有指示结果可用于抓取请求的回调消息。回调消息可以包括可以检索结果的URL。

如上面所提到的,除了HTML之外,客户端计算设备102还可以请求可以由解析器308生成的经解析的数据。在该实施例中,在数据库微服务456将作业数据库314中的作业状态改变为完成并向通知器460发送消息以发送回调消息之前,数据库微服务456将经由消息队列454将带有HTML的消息发送到解析器308。在替代实施例中,代替经由消息队列454将带有HTML的消息发送到解析器308,消息将与到HTML高速缓存462中的HTML文件的链接一起被发送。当在解析器308处接收到消息时,解析器308可以使用消息内的链接从HTML高速缓存462检索HTML文件。避免经由消息代理(包括消息队列454)发送大的HTML文件可以具有如上所述的速度优势。可替代地或附加地,解析器308可以消耗直接从中央消息队列312链接到HTML高速缓存462中的结果的消息,从而规避消息队列454。

解析器308进行解析,生成经解析的数据文件并将经解析的数据文件返回到数据库微服务456,数据库微服务456将经解析的数据文件存储在作业数据库314中。仅在那时,在经解析的数据被存储在作业数据库314中之后,数据库微服务456才更新作业完成状态并且作业数据库314向通知器460发送消息以发送回调消息。

而且,如上面所提到的,客户端计算设备102可以请求将结果写到属于客户端的特定外部数据库,该外部数据库可以是云存储数据库,诸如可从位于华盛顿州西雅图的Amazon.com公司获得的S3数据库。在该实施例中,数据库微服务456可以将结果发送到外部数据库写入器464,外部数据库写入器464将结果发送到客户端已指定的外部数据库。在那种情况下,在数据库写入器464完成其作业之后发送回调。完成确认经由中央消息队列312被发送并转发到消息队列454,在消息队列454中由数据库微服务456消费该完成确认以将回调消息传输到客户端。

节流web抓取请求

图5图示了具有节流器502的web抓取系统104。在一些情况下,客户端计算设备102可以在短时间内向web抓取系统104发送大量的web抓取请求。客户端可能不想交错请求或者可能不知道如何将请求交错到web抓取系统104中。代替地,客户端可能更喜欢基本上同时将所有抓取作业请求发送到web抓取系统104。

如上面所提到的,抓取器310可以具有有限数量的资源,包括可以执行请求的可用代理。随着时间的推移或有足够的并发请求,那些代理变得被耗尽,因为目标网站开始认识到源自代理的请求是自动化的并开始阻止来自代理的传入请求。如果太多代理被耗尽,那么抓取器310可能无法抓取数据,从而实际上禁用web抓取系统104。

虽然客户端可能更喜欢在短时间间隔内向web抓取系统104发送大量抓取作业请求,但是客户端可能不关心结果是立即返回还是在延长的时间段内返回。

节流器502使得web抓取系统104能够接受大量请求,但是当它们被执行时交错。节流器502的操作参考图6和图7更详细地进行描述。

图6示出了时间线600,其图示了web请求可以如何随着时间的推移而被节流和流出。时间线600图示了在时间段602期间如何接收多个web抓取请求610A-E。如上所述,多个web抓取请求中的每一个指定要从其捕获内容的目标网站。并且基于传入的请求,生成描述请求所描述的web抓取作业的作业描述。描述被放置在队列上。

作业描述在时间段604内从队列中被移除。时间段604比时间段602长。作业描述可以在重复的固定间隔606上被增量地移除。与API请求610A对应的作业描述在时间612A被移除;与API请求610B对应的作业描述在时间612B被移除;与API请求610C对应的作业描述在时间612C被移除;与API请求610D对应的作业描述在时间612D被移除;并且与API请求610E对应的作业描述在时间612E被移除。当每个相应的作业描述从队列中被移除时,生成对作业描述中指定的目标网站的web请求。生成的web请求被传输到目标网站进行处理。

可替代地或附加地,间隔606可以是可变的。可替代地或附加地,可以非顺序地(即,乱序地)移除请求。例如,可以存在优先排队。在另一个示例中,抓取器可以移除队列中排名较低的作业描述,而另一个抓取器仍在处理排名较高的作业描述。

如上所述,所生成的web请求可以被传输到目标网站,使得web请求经由从一组代理中选择的代理到达目标网站。根据实施例,可以选择间隔606以避免一组代理变得被目标网站阻止。响应于web请求,经由所选择的代理接收从目标网站传输的内容。并且接收到的内容被传输到客户端计算设备。

图7中图示了关于可以如何对请求进行节流的更多细节。图7是图示可以如何在web抓取系统104内实现节流机制的系统图700。

如上所述,请求摄入管理器302被配置为从客户端计算设备102(图7中未示出)接收多个web抓取请求。那些API请求被发送到请求状态管理器304。请求状态管理器304可以评估每个API请求并将该请求与存储在节流配置数据库714中的参数进行比较。

节流配置数据库714存储关于哪些请求应当被节流的信息。这可以基于每个客户端已经订阅的服务的级别在每个客户端的基础上来设置。例如,购买更高级别的服务的客户端可以经历更少的节流或没有节流,web抓取系统104接受在为该客户端的请求提供服务时代理可能更快地耗尽。相反,购买较低级别的服务的客户端可以选择更多的节流,因为他们可能不需要那么快的结果或者可能更喜欢在短时间内发送大量请求而不要求立即为所有请求提供服务。

存储在节流配置数据库714中的参数可以包括定义是否应当节流API请求以及应当如何节流API请求所需的API请求的方面。例如,节流配置数据库714可以具有针对特定客户端、目标以及API请求是否正在请求从无头浏览器完成web请求的条目。

请求状态管理器304可以将API请求与存储在节流配置数据库714中的参数进行比较,并且基于此,可以将对应的作业描述和命令710发送到队列选择器716。命令710可以指示是否应当节流由相应作业描述所描述的web请求。

基于命令710,队列选择器716将相应的作业描述发送到节流器502或者中央消息队列312。当命令710指示请求不应当被节流时,队列选择器716可以将作业描述发送到中央消息队列312,如上所述,它在中央消息队列312中被抓取器310拾取并处理。

当命令710指示请求应当被节流时,队列选择器716将作业描述发送到节流器502。节流器502包括多个节流队列702A...N。节流器502可以根据作业描述的各方面从多个节流队列702A...N中进行选择。在实施例中,每个作业描述可以包括指示请求源自的客户端的客户端标识符。队列选择器716可以基于客户端标识符从多个队列702A...N中选择用于作业描述的队列。附加地或可替代地,每个作业描述可以包括目标网站的标识符。队列选择器716可以基于目标网站从多个队列702A...N中选择用于作业描述的队列。

附加地或可替代地,队列选择器716可以基于作业描述是否指定从无头浏览器进行web抓取来从多个队列702A...N中选择用于作业描述的队列。如上所述,当作业描述请求用无头浏览器进行web抓取时,做出检索渲染目标网页所需的内容的进一步请求。例如,当从目标网站接收到网页HTML时,分析该内容以确定渲染该网页所需的附加内容的网址以及来自该网址的附加内容。

由作业移除器704从相应节流队列702A...N中移除作业。作业移除器704被配置为增量地移除作业描述。节流队列702A...N中的每一个可以具有作业移除器704在作业描述之间等待的相关联的时间窗口。相关联的时间窗口可以存储在节流配置数据库714中并且可以与客户端已经订阅的服务级别对应。此外,节流配置数据库714可以具有在每个时间增量期间应当从相应节流队列702A...N中移除的多个作业描述。例如,根据节流配置数据库714中的规范,作业移除器704可以每20秒从节流队列702A中移除五个作业描述。

当作业移除器704从节流队列702A...N中移除作业描述时,作业移除器704将作业描述连同指示不再需要节流并且应当处理该作业的命令712一起提供给队列选择器716。基于命令712,队列选择器716将作业描述转发到中央消息队列312,在中央消息队列312中作业描述由抓取器310进行处理,如上所述。

如上面所提到的,根据客户端所请求的服务的级别在节流配置数据库714中指定节流功能。基于服务的级别,可能不再需要节流。当web抓取系统104确定来自客户端计算设备的web抓取请求不再需要被节流时,系统104可以首先确定队列何时为空。仅当确定队列为空时,web抓取系统104才删除该队列。

用于代理web抓取的流量计数

传统上,代理web抓取服务可以基于每个请求来跟踪用户活动以用于开费用清单的目的。根据实施例,基于流量来跟踪基于代理web的抓取服务的用户活动。特别地,当接收到对web抓取流量总量的响应时,可以计算通过物理网络层传送的数据量。为了计算数据量,可以对接收到的数据总量进行调整以考虑数据传送时发生的压缩。此外,数据量可以不包括获取会话信息以请求所抓取的流量所需的请求和响应。

图8是图示可以如何在web抓取系统中实现流量计数的系统图。图8图示了web抓取系统104包括流量计数器802、流量计数数据库806和费用清单生成器808。

流量计数器802被配置为跟踪由抓取器310接收和/或发送的流量的量并将数据存储在流量计数数据库806中。流量计数器802可以对来自内容的数据进行计数并且可以对来自请求的数据进行计数。

当web抓取系统104从客户端计算设备102接收新的客户端请求时,请求摄入管理器302具有限制检查器804,其检查客户端在特定时间请求抓取的当前数据量是否超过可以基于客户端的服务级别来设置的最大阈值。如果它已经超过最大阈值,那么请求摄入管理器302可以拒绝为该请求提供服务。

费用清单生成器808基于流量计数数据库806中的流量计数来生成费用清单。此外,费用清单生成器808可以用作接口以使得客户端能够获得其周期性(例如,每月)使用计划中的剩余数据量。例如,费用清单生成器808可以接收来自客户端的请求,将剩余数据量确定为当前流量总量与客户端允许的最大值之间的差,并将剩余数据量返回给客户端。

图9是图示用于对web抓取系统104中的流量进行计数和调节的方法900的流程图。

方法900开始于在步骤902处接收web抓取请求。如上所述,这个接收可以发生在请求摄入管理器302处并且web抓取请求可以来自客户端计算设备,诸如客户端计算设备102。web抓取请求根据web抓取系统104所理解的API来格式化并且可以以网站为目标。API请求还可以指定做出请求的客户端。

在步骤904处,限制检查器804确定当前流量总量是否超过该客户端所允许的最大值,当前流量总量表示在时间窗口(诸如每月)期间为特定客户端跟踪的流量的量。例如,限制检查器804可以检查流量计数数据库806以确定客户端允许的最大值。这个检查可以响应于请求、重复地或间歇地发生。允许的最大值可以基于客户端订阅的服务的级别来设置。而且,如下文将描述的,允许的最大值可以是特定的,不仅特定于客户端而且特定于从客户端计算设备接收的web抓取请求调用的抓取器。在那种情况下,流量计数数据库806不仅跟踪客户端的当前流量水平,而且还跟踪客户端使用的特定抓取器的当前流量水平。限制检查器804确定客户端使用的抓取器的当前流量水平是否超过最大阈值。

当流量计数数据库806确定当前流量水平超过该时间段的最大阈值时,操作进行到步骤906,其中请求摄入管理器302拒绝处理该请求。当流量计数数据库806确定当前流量水平没有超过该时间段的最大阈值时,操作进行到步骤908。

在步骤908处,抓取器310基于目标网站从多个抓取器466A...N中选择抓取器,使得所选择的抓取器包括关于如何生成web请求以从目标网站提取数据的指令。如上所述,多个抓取器466A...N中的每一个包括关于如何根据要抓取的目标网站生成一个或多个HTTP请求的指令。在步骤910和912中执行由抓取器指定的指令。

在步骤910处,进行由步骤908中选择的抓取器指定的任何初步请求。如上面关于图2所述,为了到达最终目标网站,可能需要进行初步请求和响应以获得目标网站预期的cookie。这些请求是从一组代理中选择的代理做出的。在不同的实施例中,这些请求和响应可以被计入客户端和抓取器的流量总量。可替代地,可以将它们排除在外。

在步骤912处,做出捕获用户试图抓取的目标网站的HTTP web请求。请求如抓取器中指定的那样生成,并经由代理传输到目标网站。经由代理,从目标网站接收内容。对于客户端计算设备的客户端,请求和响应的大小被计入总数,这个内容的大小被计入流量总数。

在步骤914处,如果web API请求是针对无头浏览器的,那么可以请求附加内容。如上所述,并且在那种情况下,可以做出附加请求来检索渲染抓取的页面所需的内容。在实施例中,这些附加的请求和响应也可以计入流量总量。可替代地,可以将它们排除在外。

如上所述,许多网站正在尝试阻止自动化的请求。在步骤916处,可以确定在步骤910-914中做出的请求是否成功。如果不成功,那么针对那个请求和响应的数据计数可以不从总数中排除。在步骤918处选择新的代理,并且操作返回到步骤910以重复步骤910-916,直到请求被成功处理为止。以这种方式,当目标网站被确定为拒绝为来自代理的web请求提供服务时,web抓取系统104重复地尝试经由不同的代理将web请求重新发送到目标网站。当在步骤916处请求成功时,操作前进到步骤920。

在步骤920处,确定步骤910-916中的请求和响应中被压缩用于通过网络传输的数据量。该确定可以基于将用于在较低层(诸如网络的网络层、数据链路层或物理层)进行传输的压缩级别来做出。

为了进行该确定,可以确定估计的压缩级别。特别地,可以确定由接收到的内容表示的数据的类型。如上面关于图2所描述的,这种类型的数据可以在例如HTTP报头中被描述。基于数据的类型,确定表示当通过网络传输该类型的数据时预期的压缩量的压缩因子。例如,可以通过在表中查找那种类型的数据的基准压缩比来做出该确定。基于该压缩因子,确定接收到的内容中被压缩以进行传输的数据量。

在步骤922处,压缩计数被包括在客户端/抓取器的数据总量中。然后,当新请求到来时,重复过程900。如果在904处数据总量超过阈值,那么在906处拒绝请求。

分片禁用

如上所述,多个数据库服务器404A...N,例如分片,被用于访问作业数据库314。有时,多个数据库服务器404A...N中的至少一个应当被禁用,从而避免将进一步的作业发送到被禁用的服务器。例如,数据库服务器可能完全停止执行(例如,过程可以挂起或已崩溃),它可能足够好地停止执行,或者它可能过载并且在它释放之前不应当再接收任何作业。参考图10-图11描述了如何禁用数据库服务器404A...N。

图10图示了web抓取系统104的各个组件的操作,以检测相应的数据库服务器404A...N是应当被启用还是禁用。

如上所述,每个相应的数据库服务器404A...N具有消息队列454。如上所述,消息队列454是对作业描述进行排队以供数据库微服务456消费的消息代理。当数据库微服务456消费来自消息队列454的消息时,数据库微服务456将作业描述以“未决”状态放置在作业数据库314中,从而发起作业的处理。

请求摄入管理器302重复地检查多个数据库服务器404A...N中的每一个的健康状况以确定它们是否可用于接受新作业。在各种实施例中,健康状况检查可以是周期性的或间歇性的。基于健康状况检查,请求摄入管理器302确定是否要在表1008中启用还是禁用多个数据库服务器中的每一个。表1008可以存储在非持久性存储器中以提高访问速度。

为了检查数据库服务器404A...N中的相应服务器的健康状况,请求摄入管理器302可以在不同实施例中重复发送各种消息以检查相应数据库服务器是否可操作。消息1002检查请求摄入管理器302(其是从客户端计算设备接收web抓取请求的服务器)与消息队列454(相应数据库服务器的消息代理)之间的连接。如果连接无响应或返回错误消息,那么请求摄入管理器302可以在表1008中将相应的数据库服务器标记为被禁用。

消息1004检查在消息队列454中排队的作业描述(以及可能在抓取过程中使用的其它消息)的数量。如果作业描述(以及可能的其它消息)的数量超过阈值,那么请求摄入管理器302可以在表1008中将相应的数据库服务器标记为被禁用。

消息1006检查到作业数据库314的连接。请求摄入管理器302可以尝试连接到作业数据库314。如果该连接无响应或者返回错误消息,那么请求摄入管理器302可以在表1008中将相应的数据库服务器标记为被禁用。如果请求摄入管理器302可以连接到作业数据库314,那么请求摄入管理器302可以推断数据库微服务也可以连接。

除了二元启用或禁用状态之外,请求摄入管理器302还可以根据消息1002-1006的结果而在表1008中将数据库服务器404A...N的特征标记为启用或禁用。例如,当数据库服务器过度工作或挂起但是能够提供读访问时,请求摄入管理器302可以将数据库服务器标记为只读。并且,当甚至只读访问也不可用时,请求摄入管理器302可以将数据库服务器标记为关闭。

图11示出请求摄入管理器302如何使用数据库服务器状态表1008来确定使用哪些数据库服务器404A...N来为来自客户端计算设备102的API请求提供服务。

请求摄入管理器302包括数据库服务器选择器1100,当从客户端计算设备接收到web抓取请求时,数据库服务器选择器1100选择在表中被识别为启用的数据库服务器之一。在做出选择之后,请求摄入管理器302将由web抓取请求指定的作业描述发送到所选择的数据库服务器,以作为未决web抓取作业存储在作业数据库中。

请求摄入管理器302还可以评估表1008以确定多个数据库服务器中被禁用的数据库服务器的数量是否超过阈值。当被禁用的数据库服务器的数量超过阈值时,请求摄入管理器302可以警告管理员。

与web抓取作业相关的直接数据中心请求

Web抓取系统104可以分布在大量计算设备上。计算设备可以在地理上不同。如上所述,作业数据库314可以被水平地分区为大量数据库分片。至少部分地出于这个原因,诸如web抓取结果和可能的作业状态信息之类的数据可以在web抓取系统104内的一个地理位置处的一个计算设备处可用,但在另一个地理位置处则不可用。为了提高效率,确保对结果的请求被引导至正确地理位置处的正确计算设备是有利的。

图12A-图12B图示了用于负载平衡web抓取请求的系统,其将对结果的请求引导至与请求来自目标的结果的子域相同的子域。图12A示出了具有跨不同位置的分层负载平衡器的系统1200。

如图12A中所示,系统1200包括数据中心平衡器1202,该数据中心平衡器1202可以将来自客户端计算设备102的API请求分发到多个数据中心1206A...N之一。在一个示例中,数据中心平衡器1202可以通过将重定向到若干目的地之一的HTTP发送回客户端计算设备102来操作,每个目的地可由主机名寻址。在另一个示例中,数据中心平衡器1202可以充当代理,将请求从客户端计算设备102转发到相应的数据中心。

如图12A中所示,可能的目的地位于不同的数据中心1206A...N。数据中心1206A...N中的每一个是建筑物、建筑物内的专用空间或用于容纳计算机系统和相关联组件(诸如电信和存储系统)的一组建筑物。每个可以包括用于电力供应、数据通信连接、环境控制(例如,空调、灭火)的冗余或备份组件和基础设施以及各种安全性设备。

在系统1200中,不同的数据中心1206A...N包括一个或多个负载平衡器和请求摄入管理器302的一个或多个实例,如上所述,请求摄入管理器302是接受来自客户端计算设备102的传入API请求的软件服务器。在图12的示例中,数据中心1206A包括负载平衡器1208-1A...N和请求摄入管理器302-1A...N;数据中心1206B包括负载平衡器1208-2A...N和请求摄入管理器302-2A...N;以及数据中心1206N包括负载平衡器1208-M、A...N和请求摄入管理器302-M、A...N。

负载平衡器和请求摄入管理器中的每一个都可通过主机名来寻址。主机名是指派给连接到计算机网络的设备并用于在各种形式的电子通信中识别该设备的标签。互联网主机名,如图12A中所示的那些,由一系列用点联接的标签组成。主机名可使用域名系统解析为互联网协议(IP)地址(即,OSI第3层网络地址)。域名系统是分层命名空间,其中最右边的标签表达顶级域,并且层次结构从右到左下降,左侧的每个标签指定右侧域的子域。在实施例中,不必区分同一DC中的摄入管理器,因此它们不需要具有直接主机名。

在图12的示例中,所有主机负载平衡器和请求摄入管理器的主机名都具有顶级域“net”。所有这些都位于“net”的子域“example.net”内。每个在“example.net”中都有唯一的子域,该子域表示负载平衡器或请求摄入管理器服务的特定网络地址。唯一的子域可以遵循常规的命名模式。

对于相应的数据中心1206A-N,负载平衡器1208-1A...N、负载平衡器1208-2A...N以及负载平衡器1208-M,A...N确定如何在对应的数据中心1206A-N中的各个请求摄入管理器302-1A...N、请求摄入管理器302-2A...N以及请求摄入管理器302-M、A...N之间分发请求。每个数据中心请求摄入管理器和负载平衡器内的请求摄入管理器和负载平衡器的组可以被称为“支路”。

每个负载平衡器可以用作以特定方式(诸如循环)在对应的请求摄入管理器之间分发请求的代理。例如,它们可以使用OSI第4层(传输层)负载平衡将所有端口80TCP请求转发到后端,后端可以构成请求摄入管理器的对应组。以这种方式,负载平衡器在对应的请求摄入管理器之间分发请求。

在示例操作中,客户端计算设备102可以向web抓取系统104做出新的API请求。出于可用性目的,数据中心平衡器1202可以表示进入web抓取系统104的主要入口点。例如,所有新请求可以发送到主机名“api.example.io”,其寻址数据中心平衡器1202。

对于新的web抓取请求,哪个数据中心(无论是1206A...N和请求摄入管理器302-1-M、A-N还是其它)最终为该请求提供服务可能并不重要。数据中心平衡器1202可以以随机或循环方式选择哪个支路以及该支路内的哪个负载平衡器。可替代地,数据中心平衡器1202可以出于地理便利性来选择数据中心1206A...N。数据中心平衡器1202将针对web抓取的API请求重定向到负载平衡器之一,负载平衡器选择对应的请求摄入管理器之一并访问代理以将请求转发到对应的请求摄入管理器上。从那里,请求摄入管理器302验证该请求,并且使得web抓取系统104将作业描述存储在作业数据库314中,从而发起抓取操作,如上所述。一旦作业被发起,请求摄入管理器302就可能通过负载平衡器1208返回作业标识符。

如上面所提到的,web抓取请求可以是异步的。在异步请求的情况下,客户端计算设备102可以做出第二API请求以检索先前请求的web抓取作业的结果。此外,如上所述,客户端计算设备102可以做出附加的API请求以请求与先前请求的web抓取作业相关的状态或其它信息。为了识别相关作业,API请求可以包括与其相关的作业描述标识符。

在那种情形下,至少在一个实施例中,客户端计算设备102可以将API请求发送到数据中心平衡器1202。数据中心平衡器1202具有作业查找表1204。作业查找表1204可以将作业标识编号匹配到对应的数据库分片并且可以将对应的数据库分片匹配到在该作业中负责该分片的数据中心。然后,数据中心平衡器1202可以将API请求指引到具有响应该API请求所需的数据的数据中心的负载平衡器的主机名。

图12B图示了替代实施例。如上面所提到的,当请求摄入管理器302接受初始请求时,它可以向客户端计算设备102返回该作业的作业标识符。此外,客户端计算设备102可以返回与将接收结果的分片对应的请求摄入管理器302的主机名或完整URL。当结果可用时,web抓取系统104可以通知客户端计算设备102。可替代地或附加地,该通知消息可以包括与具有结果的分片对应的请求摄入管理器302的主机名或完整URL。通过以这种方式供应主机名,客户端计算设备102可以直接从具有所请求的数据的数据中心检索结果并请求状态信息。

但是,有时,客户端计算设备102仍然将直接向数据中心平衡器1202提供的公共入口点做出请求。在那种情况下,当请求到达数据中心1206A-N时,数据中心处的软件,诸如负载平衡器或请求摄入管理器,确定请求是否已到达正确的支路。如果没有,那么它识别正确的支路并识别与该支路对应的主机名。在识别出主机名的情况下,软件将重定向命令返回到客户端计算设备102以转到具有客户端所请求的数据的正确支路。

为了识别正确的支路,每个请求摄入管理器302(或负载平衡器1208)可能需要知道哪个数据中心负责具有用户所请求的数据的分片。例如,请求摄入管理器302(或负载平衡器1208)可能需要将作业标识符与分片标识符进行映射并将分片标识符与特定支路的主机名进行匹配,诸如上面关于图12A中的作业查找1204中描述的。

图13A-图13B图示了图12A-图12B中的系统的操作的方法。图13A图示了用于处理新的web抓取请求的方法1300,并且图13B图示了用于检索先前web抓取作业的状态或结果的方法1350。

从方法1300开始,在1302处,在主要入口点(诸如关于图12A和图12B描述的数据中心平衡器1202)接收抓取内容的请求。该请求可以是请求web抓取系统如上所述抓取目标网站并且可以指定目标网站的异步API请求。

在1304处,生成并执行web抓取请求。对目标网站的web请求是按照API请求中指定的方式生成的。传输web请求,使得web请求经由从一组代理中选择的代理到达目标网站。并且,响应于web请求,经由代理从目标网站接收抓取的内容。

在1306处,web抓取系统104向客户端计算设备102发送确认该请求的消息。该消息可以包括作业标识符并且可以指定客户端计算设备102检索所抓取的内容的地址或主机名(诸如子域)。

转向方法1350,在1352处,从客户端计算设备102接收API请求。该API请求涉及向web抓取系统先前请求的web抓取作业。例如,API请求可以请求web抓取作业的结果或web抓取作业的状态。

在1354处,识别对执行web抓取系统的多个数据中心中的数据中心处的主机进行寻址的主机名。识别出的数据中心是正在为或已经为web抓取作业提供服务的数据中心。

在1356处,API请求被指引到识别出的主机名。步骤1352-1356可以由作为web抓取系统104的主要入口点的数据中心平衡器1202执行,如上面参考图12A所描述的。可替代地或附加地,步骤1352-1356可以由请求摄入管理器302执行,如上面参考图12B所描述的。为了将API请求指引到识别出的主机名,web抓取系统104可以将指令返回到客户端计算设备102以重定向到识别出的主机名,例如使用HTTP重定向响应进行重定向。可替代地,相应的请求摄入管理器302可以充当代理以将API请求转发到识别出的主机名。

最后,在1358处,在识别出的数据中心处对API请求进行服务,从而为API请求提供服务。以这种方式,所请求的结果或状态被返回到客户端计算设备102。

用于代理web抓取服务的基于令牌的认证

来自客户端计算设备102的API调用可以包括使得客户端能够认证其自身的凭证。Web抓取服务104可以订阅不同服务级别的客户端,因此在接收API请求时对客户端进行认证是重要的。传统上,web抓取系统可能必须在抓取过程中的几个点处重新认证凭证。

根据实施例,凭证在系统的入口点处被认证,在入口点处生成令牌,该令牌被传递到web抓取系统104内的各个服务器。web抓取系统104内的各个服务器可以使用该令牌作为检查客户端的身份的方式。在确认了客户端的身份后,web抓取系统104内的各种服务器可以根据客户端已订阅的服务级别来提供功能。

图14图示了用于web抓取系统的负载平衡器处的基于令牌的认证的系统1400。

在系统1400中,请求摄入管理器302包括API接收器的三个集合,API接收器的每个集合是被配置为接受不同类型的web抓取请求的服务器的集合。URL API接收器1402A...N接受包括完全格式化的URL的web抓取请求。API接收器1402A...N可以接受作为HTTP代理的API请求,如上所述。当在API接收器1402A...N处接收到这种HTTP代理请求时,相应的API接收器1402A...N根据具有已知参数的API重新格式化该请求并将重新格式化的请求发送到同步API接收器1404A...N中的至少一个。

同步API接收器1404A...N被配置为接受同步(即,实时)web抓取请求。当同步API接收器1404A...N接收web抓取请求时,它使与客户端计算设备102的TCP/HTTP连接保持开放,直到抓取的结果可用。一旦web抓取系统104完成了抓取请求,相应的同步API接收器1404A...N就将抓取的结果返回到客户端计算设备102。为了进行web抓取请求,同步API接收器1404A...N可以向异步API接收器1406A...N中的至少一个发送API请求。

异步API接收器1406A...N可以是如上所述的web抓取系统104的其余部分的入口点。例如,如上所述,异步API接收器1406A...N可以生成作业描述并将该作业描述发送到请求状态管理器304,请求状态管理器304发起抓取作业。当异步API接收器1406A...N从客户端计算设备102或从同步API接收器1404A...N接收到API请求时,异步API接收器1406A...N在web抓取完成之前关闭到接收器或设备的连接,可能用确认进行回复。一旦web抓取完成并且结果在web抓取系统104处可用,客户端计算设备102或同步API接收器1404A...N就接收结果可用的回调通知。以这种方式,API请求在多个服务器之间传递,每个服务器被配置为执行web抓取系统104的功能。

API接收器的每个集合可经由相应的负载平衡器1208A-C访问,并且相应负载平衡器1208A-C中的每一个可以表示客户端计算设备102进入web抓取系统104的入口点。如上所述,负载平衡器1208A-C中的每一个在多个相关联的接收器之间分发请求以跨多个并行服务器利用和分发请求。

在图14的示例中,期望使用目的地的完整URL(诸如使用如上所述的Web代理协议)发送API请求的客户端可以将API请求发送到主机名“url.example.io”。该请求将到达负载平衡器1208A。负载平衡器1208A选择URL API接收器1402A...N之一来处置该请求并将API请求转发到所选择的接收器上。所选择的API接收器1402A...N将代理请求重新格式化为不同的API格式并且发送到同步API接收器1404A...N之一上,同步API接收器1404A...N之一将请求转发到异步API接收器1406A...N之一上。当请求完成并且结果被抓取时,所选择的同步API接收器1404A...N得到通知并将抓取的结果返回到所选择的URL API接收器1402A...N。所选择的URL API接收器1402A...N将响应格式化为代理响应并将该响应发送到客户端计算设备102。

继续图14中的示例操作,期望使用同步API调用发送API请求的客户端可以将API请求发送到主机名“sync.example.io”。该请求将到达负载平衡器1208B。负载平衡器1208B选择同步API接收器1404A...N之一来处置该请求并将API请求转发到所选择的接收器。所选择的同步API接收器1404A...N保持连接打开,同时将API请求转发到异步API接收器1406A...N,异步API接收器1406A...N发送用于抓取的作业。当结果可用时,所选择的同步API接收器1404A...N被通知并将结果返回到客户端计算设备102,从而关闭连接。

最后,继续图14中的示例操作,期望使用异步API调用发送API请求的客户端可以将API请求发送到主机名“api.example.io”。该请求将到达负载平衡器1208C。负载平衡器1208C选择异步API接收器1406A...N之一来处置该请求并将API请求转发到所选择的接收器上。在web抓取系统抓取目标网站时,所选择的异步API接收器1404A...N关闭web抓取系统104与客户端计算设备之间的连接。

根据实施例,每个负载平衡器1208A-C包括相应的负载平衡服务1404A-C和认证服务1412A-C。负载平衡服务1404A-C为负载平衡器执行后端选择和代理转发或重定向,如上所述。在接收到请求时,负载平衡服务1404A-C与相应的认证服务1412A-C通信以认证用户。

特别地,认证服务1412A-C中的每一个被配置为验证与来自客户端计算设备102的API请求一起接收的凭证。当认证服务1412A-C未能验证凭证时,相应的负载平衡器1208A-C拒绝为接收到的API请求提供服务。当认证服务1412A-C验证了凭证时,认证服务1412A-C生成指示与凭证相关联的客户端的身份的令牌。负载平衡器1208A-C将API请求连同令牌一起传输到被配置为发起关于web抓取请求的抓取过程的服务器。

令牌可以与API请求一起被传递到各种API接收器以及在web抓取系统104内提供功能的其它服务器和模块。这些各种服务器分析令牌以确定客户端是否被授权进行由相应服务器执行的功能,并且当客户端被授权进行该功能时,执行该功能,诸如处置特定类型的API或进行特定类型的抓取请求。为了进行分析,服务器可以检查令牌内指示的客户端的服务级别。基于服务级别,服务器可以确定由服务器提供的功能是否被授权。而且,当做出检索先前抓取的结果或检查先前做出的请求的状态的API请求时,服务器可以使用令牌来确定先前做出的请求是否是由同一客户端做出的。

除了指定客户端之外,令牌还可以指定客户端的角色。后续服务器可以使用令牌内的角色来确定web抓取系统104的特定功能是否被授权。在示例中,“管理员”角色可以允许任何客户端做出的请求,而“用户”角色可以允许请求仅检索经认证的客户端所请求的数据。

图15示出了更详细地图示web抓取系统104的基于令牌的认证的操作的系统1500。负载平衡服务1410做出认证服务1412的请求1502。请求1502可以例如是HTTP POST请求。POST请求的主体可以具有凭证和POST请求所使用的路径,并且可以包含所使用的凭证的类型。例如,凭证可以是用户名和密码。在另一个示例中,凭证可以是令牌。

认证服务1412将凭证与存储在凭证数据库1506中的内容进行比较。凭证数据库1506可以在存储器层次结构中具有多个层以加速查找。基于该比较,认证服务1412生成并返回认证令牌1504。

在示例中,令牌1504可以是JSON Web令牌(JWT)。令牌1504包括报头1510、有效载荷1512和数字签名1514。报头1510可以指示用于JSON的算法和类型。有效载荷1512可以具有关于认证的数据。这可以包括客户端的身份、客户端已订阅的服务、客户端的角色、令牌的到期日期/时间以及认证是否成功。

数字签名1514使用密码方法来保证客户端的有效载荷没有被篡改。例如,生成数字签名1514可以涉及生成单向散列并用认证服务1412的私钥对其进行加密。然后,当数字签名1514被核实时,公钥被用于解密该散列并将其与有效载荷1512的散列进行比较。以这种方式,数字签名1514可以被用于核实有效载荷没有被不拥有私钥的任何人篡改。

用于跨数据中心归档web抓取的结果的冷数据库

如上面所提到的,web抓取系统104可以包括历史档案306,其在较长时间段内存储抓取的数据。历史档案306允许用户跟踪目标网站随时间的改变。为了检索数据,客户端可以请求从历史档案306转储满足特定准则的先前抓取的结果。特别地,客户端的搜索准则可以描述寻求被检索的结果的元数据。可以将元数据与描述结果的索引进行比较。基于索引,到结果的链接可以返回给客户端。

但是,如上所述,web抓取系统104的功能可以散布在多个数据中心上。每个数据中心可以有其自己的索引。根据实施例,来自各种索引的结果被组合以生成与特定搜索准则对应的搜索结果。图16中图示了这个特征的各方面。

图16图示了将来自多个数据中心的结果存储到档案数据库中的系统1600。

系统1600包括访问服务器1630和档案数据库1612。在示例中,档案数据库1612可以存储由web抓取系统104抓取的经解析的数据。作为示例,针对每个web抓取请求检索到的解析的数据可以作为JSON文件存储并被写入档案数据库1612。web抓取系统104将抓取的数据存储到档案数据库1612中,在那里它可用于将来的分析。

为了访问档案数据库1612中的数据,客户端计算设备102可以向访问服务器1630发送请求。该请求可以寻址档案数据库1612内的期望JSON文件的位置。访问服务器1630经由一个或多个云接口1604A-B从档案数据库1612检索数据。云接口1604A-B可以具有从档案数据库1612发送和检索数据所需的凭证和接口信息。

档案数据库1612可以是云存储服务。它可以是基础设施即服务(IaaS),它可以利用加密来实现安全性,并利用数据压缩来实现带宽、存储和时延优化。类似地,转储数据库1610也可以是云存储数据库。

每个相应的数据中心1206A-B包括抓取器(图16中未示出)、解析器308A-B和历史档案306A-B。每个历史档案306A-B包括写入器1602A-B、云接口1604A-B、索引1606A-B和转储器1608A-B。

如上面关于图3和图4所描述的,抓取器被配置为根据基于API请求生成的作业描述来生成对目标网站的web请求。抓取器经由一个或多个代理将生成的web请求传输到目标网站。响应于web请求,抓取器从目标网站接收内容。同样如上所述,解析器308A-B各自被配置为解析来自目标网站的响应。经解析的内容可以被表示为例如JSON格式的数据结构。解析器308A-B将经解析的内容发送到相应的写入器1602A-B。

一旦从解析器308A-B被接收,相应的写入器1602A-B就将经解析的内容发送到相应的云接口1604A-B以写入到档案数据库1612。此外,关于所抓取的内容的元数据被保存到索引1606A-B。元数据可以包括例如对应API请求或作业描述中的任何信息以及实际发生抓取时的时间戳。

来自目标网站的信息可以仅以特定频率存储在档案数据库1612中。换句话说,如果内容是(利用特定参数,如作业描述中所阐述的)从目标网站检索到的并且最近被存储在档案数据库1612中,那么写入器1602A-B可以拒绝再次写入它。以这种方式,在档案数据库1612上节省了存储。

为了确定写入器1602A-B先前是否存档了来自目标网站的内容,写入器1602A-B可以将元数据参数与其相应索引1606A-B中已经存在的条目进行比较。因为相应的索引1606A-B可以仅具有从特定数据中心存储的内容的元数据,所以附加的同步和重复数据删除可能需要发生,如下面关于图17所描述的。

使索引跨多个数据中心分布意味着搜索准则必须分布在多个服务器上以搜索所有索引。如果客户端计算设备102希望检索满足特定准则的多个抓取结果,那么客户端计算设备102将搜索准则发送到web抓取系统104。搜索准则分布在多个数据中心1206A-B之中并且由相应的转储器1608A-B接收。相应转储器1608A-B搜索该数据中心处的相应索引1606A-B并确定索引文件中的哪些条目满足搜索准则。特别地,每个条目可以具有描述搜索结果的元数据以及可以与搜索准则进行比较的每个条目的元数据。转储器1608A-B将结果列表(包括到档案数据库1612内可以找到抓取的结果的位置的链接)发送到转储数据库1610,在那里它们被组合。

如图16中所示,客户端计算设备102读取来自转储数据库1610的组合的结果1622。然后,客户端计算设备102将每个单独的链接发送到访问服务器1630,访问服务器1630使用抓取的结果的地址从档案数据库1612检索适当的结果并将检索出的结果返回到客户端计算设备102。

图17图示了在存储到档案数据库之前对从多个数据中心抓取的数据进行重复数据删除的系统1700。

如上面所提到的,当经解析、抓取的内容被存储在档案中时,写入器1602A-B将描述相应内容的元数据写入相应的索引文件1606A-B中。那时,写入器1602A-B将经由数据馈送1702把元数据发送到其它数据中心。

数据馈送1702可以是使用流处理来分发实时数据馈送的软件总线。它可以使用二进制的基于TCP的协议,并且可以依赖于将消息分组在一起以减少网络往返的开销的“消息集”阻塞。

每个相应的数据中心包括相应的馈送接收器1704A-B。馈送接收器被配置为接受数据馈送1702、从其它数据中心流传输元数据并将其存储到相应的先前抓取的文件1706A-B中。每个元数据条目可以存储有到期日期。可以基于防止将来的抓取内容被存档的时间段来设置到期日期,诸如一个月。当到期日期到来时,可以从先前抓取的文件1706A-B中移除条目。

为了确定另一个数据中心先前是否已从目标网站检索到内容并将其存储在档案数据库1612中,相应的写入器1602A-B可以将元数据参数与其先前抓取的文件1706A-B中存在的条目进行比较。以这种方式,避免了档案数据库1612内跨数据中心的重复。

结论

上述模块、服务器和其它组件中的每一个(包括客户端计算设备102、web抓取系统104、Web代理106A...N、目标Web服务器108、抓取器310、解析器308、请求摄入管理器302、请求状态管理器304、中央消息队列312、历史档案306、代理旋转器486、目标抓取器4606A-N、消息队列454、通知器460、外部数据库写入器464、API接收器402A-N、存储器内访问服务器450、数据库服务器404A-N、消息队列454、微服务456、节流器502、节流队列702A...N、作业移除器704、队列选择器716、费用清单生成器808A、流量计数器802、限制检查器804、数据库服务器选择器1100、负载平衡器1208、数据中心平衡器1204、URL API接收器1402A-N、同步API接收器1404A-N、异步API接收器1406A-N、负载平衡服务1410A-C、认证服务1412A-C、写入器1602A-B、云接口1604A-B、转储器1608A-B和访问服务器1630)可以在一个或多个计算设备或不同计算设备上执行的软件上实现。

计算设备可以包括一个或多个处理器(也称为中央处理单元或CPU)。处理器可以连接到通信基础设施或总线。计算机设备还可以包括(一个或多个)用户输入/输出设备,诸如监视器、键盘、指示设备等,其可以通过(一个或多个)用户输入/输出接口与通信基础设施通信。

处理器中的一个或多个可以是图形处理单元(GPU)。在实施例中,GPU可以是处理器,其是被设计为处理数学密集型应用的专用电子电路。GPU可以具有对于大数据块(诸如计算机图形应用、图像、视频等中常见的数学密集型数据)的并行处理高效的并行结构。

计算机设备还可以包括主要或主存储器408,诸如随机存取存储器(RAM)。主要存储器408可以包括一级或多级高速缓存。主要存储器408可以在其中存储控制逻辑(即,计算机软件)和/或数据。

计算机设备还可以包括一个或多个辅助存储设备或存储器。辅助存储器可以包括例如硬盘驱动器、闪存存储装置和/或可移动存储设备或驱动器。

计算设备还可以包括通信或网络接口。通信接口可以允许计算机系统400与外部设备、外部网络、外部实体等的任何组合进行通信和交互。例如,通信接口可以允许计算机系统经由网络100访问外部设备,网络100可以是有线和/或无线的(或其组合),并且可以包括LAN、WAN、互联网等的任何组合。

计算设备还可以是机架计算机、服务器刀片、个人数字助理(PDA)、台式工作站、膝上型计算机或笔记本计算机、上网本、平板电脑、智能电话、智能手表或其它可穿戴设备、器具、物联网的一部分和/或嵌入式系统(仅举几个非限制性示例)中的任何一个或其任何组合。

计算机设备可以通过任何交付范式访问或托管任何应用和/或数据,包括但不限于远程或分布式云计算解决方案;本地或内部部署软件(“内部部署的”基于云的解决方案);“即服务”模型(例如,内容即服务(CaaS)、数字内容即服务(DCaaS)、软件即服务(SaaS)、托管软件即服务(MSaaS)、平台即服务(PaaS)、桌面即服务(DaaS)、框架即服务(FaaS)、后端即服务(BaaS)、移动后端即服务(MBaaS)、基础设施即服务(IaaS)等);和/或包括前述示例或其它服务或交付范式的任何组合的混合模型。

计算设备中的任何适用的数据结构、文件格式和模式可以从标准得到,标准包括但不限于单独或组合的JavaScript对象表示法(JSON)、可扩展标记语言(XML)、又一标记语言(YAML)、可扩展超文本标记语言(XHTML)、无线标记语言(WML)、MessagePack、XML用户界面语言(XUL)或任何其它功能类似的表示。可替代地,可以单独地或者与已知或开放标准结合使用专有数据结构、格式或模式。上述任何数据库或文件(包括作业数据库314、存储器内作业表452、HTML高速缓存462、节流配置数据库714、流量计数数据库806、数据库服务器状态表1008、凭证数据库1506、档案数据库1612和转储数据库1610)可以以任何格式、结构或模式存储在任何类型的存储器中和计算设备中。

在一些实施例中,包括其上存储有控制逻辑(软件)的有形、非暂态计算机可用或可读介质的有形、非暂态装置或制品在本文中也可以被称为计算机程序产品或程序存储设备。这包括但不限于主要存储器、辅助存储器和可移动存储单元,以及实施前述的任何组合的有形制品。这样的控制逻辑可以使得这样的数据处理设备如本文描述的那样操作。

网站是包含由公共域名识别的相关内容并在至少一个web服务器上发布的网页的集合。域名是用句点分隔开的一系列字母数字字符串,用作计算机网络连接的地址并识别该地址的所有者。域名由两个主要元素组成-网站的名称和域名扩展名(例如,.com)。通常,网站专门提供特定类型的内容或服务。网站可以包含指向几个网页的超链接,使访问者能够在网页之间导航。网页是包含在web浏览器中显示的特定资源集合的文档。网页的基本元素是用超文本标记语言(HTML)编写的一个或多个文本文件。网站中的每个网页由不同的URL(统一资源定位符)识别。网站有很多种,每种都提供特定类型的内容或服务。

诸如“(a)”、“(b)”、“(i)”、“(ii)”等之类的标识符有时被用于不同的元素或步骤。这些标识符是为了清楚起见而使用的,并且不一定指定元素或步骤的次序。

上面已经借助于说明指定功能及其关系的实施方式的功能构建块描述了本发明。为了描述的方便,这里已经任意定义了这些功能构建块的边界。只要适当地执行指定的功能及其关系,就可以定义替代边界。

具体实施例的上述描述将充分揭示本发明的一般性质,以使得其他人可以通过应用本领域技术范围内的知识,容易地修改和/或适应各种应用(诸如具体实施例)而无需过度实验,并且不脱离本发明的一般概念。因此,这样的适应和修改旨在处于基于本文呈现的教导和指导的所公开实施例的等同形式的含义和范围内。应该理解的是,本文中的措辞或术语是为了描述的目的而不是限制,使得本说明书的术语或措辞将由本领域技术人员根据教导和指导来解释。

本发明的广度和范围不应当受到任何上述示例性实施例的限制,而应当仅根据以下权利要求及其等同形式来定义。

本公开提出了一种用于随时间执行多个web抓取请求的计算机实现的方法,包括:

(a)在第一时间段期间,从客户端计算设备接收多个web抓取请求,所述多个web抓取请求中的每个web抓取请求指定要从中捕获内容的目标网站;

(b)将用于所述多个web抓取请求的作业描述放置在队列上,作业描述各自描述由所述多个请求中的请求指定的至少一个web抓取作业;

(c)在比第一时间段长的第二时间段内增量地从队列中移除作业描述;

当每个相应的作业描述从队列中被移除时:

(d)生成针对作业描述中指定的目标网站的web请求;以及

(e)传输web请求,使得web请求经由从一组代理中选择的代理到达目标网站。

提出了该方法,其中移除(c)以所选择的增量发生,以避免所述一组代理被目标网站阻止。

提出了该方法,还包括:

(f)响应于web请求,接收从目标网站传输的内容;以及

(g)将接收到的内容传输到客户端计算设备。

提出了该方法,其中所述多个web抓取请求各自包括指示从其发起web抓取请求的客户端的客户端标识符,该方法还包括:

(f)基于客户端标识符从多个队列中选择所述队列。

提出了该方法,其中所述多个web抓取请求各自还包括目标网站的标识符,该方法还包括:

(g)基于目标网站的标识符从所述多个队列中选择所述队列。

提出了该方法,还包括基于作业描述是否指定从无头浏览器进行web抓取来从所述多个队列中选择所述队列。

提出了该方法,还包括,当作业描述请求从无头浏览器进行web抓取时:

(h)响应于web请求,接收指定网页的内容,该内容是从目标网站传输的;

(i)分析该内容以确定渲染网页所需的附加内容的网址;以及

(j)从该网址请求附加内容。

提出了该方法,其中增量地移除(c)包括在时间窗口从队列重复移除一个作业描述。

提出了该方法,其中增量地移除(c)包括在时间窗口从队列重复移除多个作业描述。

提出了该方法,其中所述多个作业描述中的作业描述的数量是基于发送所述多个web抓取请求的客户端来指定的。

提出了该方法,还包括:

(f)确定来自客户端计算设备的web抓取请求不再需要被节流;

(g)确定队列何时为空;以及

(h)当确定队列为空时,删除该队列。

提出了该方法,还包括:

(f)确定所述多个web抓取请求中哪些是同步请求,哪些是异步请求;以及

(g)将(f)中确定为同步请求的web抓取请求优先于(f)中确定为异步请求的web抓取请求,以帮助确保在与客户端计算设备的连接超时之前返回来自同步请求的结果。

提出了一种用于随时间执行多个web抓取请求的系统,包括:

至少一个处理器;

存储器,被配置为存储队列;

请求摄入管理器,被配置为在第一时间段期间从客户端计算设备接收多个web抓取请求,所述多个web抓取请求中的每个web抓取请求指定要从其捕获内容的目标网站;

节流器,被配置为将用于多个web抓取请求的作业描述放置在队列上,作业描述各自描述由所述多个请求中的请求指定的至少一个web抓取作业;

作业移除器,被配置为在比第一时间段长的第二时间段内增量地从队列中移除作业描述;

抓取器,被配置为,当每个相应的作业描述从队列中被移除时,生成针对作业描述中指定的目标网站的web请求,并且传输该web请求,使得该web请求经由从一组代理中选择的代理到达目标网站。

提出了该系统,其中作业移除器被配置为以所选择的增量移除以避免所述一组代理被目标网站阻止。

提出了该系统,其中抓取器被配置为响应于web请求而接收从目标网站传输的内容,并且请求摄入管理器被配置为通知客户端接收到的内容可用于传输到客户端计算设备。

提出了该系统,还包括被配置为存储多个队列的存储器,其中所述多个web抓取请求各自包括指示所述客户端源自的客户端的客户端标识符,该系统还包括:

队列选择器,基于客户端标识符从多个队列中选择队列。

提出了该系统,其中所述多个web抓取请求各自还包括目标网站的标识符,队列选择器被配置为基于目标网站的标识符从所述多个队列中选择所述队列。

提出了该系统,还包括队列选择器,该队列选择器被配置为基于作业描述是否指定从无头浏览器进行web抓取来从所述多个队列中选择所述队列。

提出了该系统,还包括:

节流配置数据库,存储与队列相关联的常规时间窗口,其中作业移除器在时间窗口从队列中重复移除作业描述。

提出了一种其上存储有指令的非暂态计算机可读设备,指令在由至少一个计算设备执行时使所述至少一个计算设备执行操作,操作包括:

(a)在第一时间段期间,从客户端计算设备接收多个web抓取请求,所述多个web抓取请求中的每个web抓取请求指定要从中捕获内容的目标网站;

(b)将用于所述多个web抓取请求的作业描述放置在队列上,作业描述各自描述由所述多个请求中的请求指定的至少一个web抓取作业;

(c)在比第一时间段长的第二时间段内增量地从队列中移除作业描述;

当每个相应的作业描述从队列中被移除时:

(d)生成针对作业描述中指定的目标网站的web请求;以及

(e)传输web请求,使得web请求经由从一组代理中选择的代理到达目标网站。

提出了一种用于跟踪用户活动的计算机实现的方法,包括:

(a)从客户端计算设备接收web抓取请求,该web抓取请求指定要从中捕获内容的目标网站;

(b)基于web抓取请求,生成针对目标网站的web请求;

(c)传输web请求,使得web请求经由从一组代理中选择的代理到达目标网站;

(d)响应于web请求,经由代理接收从目标网站传输的内容;

(e)对接收到的内容中的数据量进行计数以确定客户端计算设备的客户端的当前流量总量;以及

(f)将接收到的内容传输到客户端计算设备。

提出了该方法,还包括:

(g)基于当前流量总量,为与客户端计算设备对应的客户端生成费用清单。

提出了该方法,其中当前流量总量是针对一个时间段的,该方法还包括:

(g)从客户端计算设备接收附加的web抓取请求;

(h)确定当前流量总量是否超过与该客户端计算设备对应的客户端所允许的最大值;以及

(i)当在(h)中确定当前流量总量超过允许的最大值时,拒绝为所述附加的web抓取请求提供服务。

提出了该方法,其中当前流量总量是针对一个时间段的,该方法还包括:

(g)从客户端计算设备接收附加的web抓取请求;

(h)确定当前流量总量是否超过与该客户端计算设备对应的客户端所允许的最大值;以及

(i)当在(h)中确定当前流量总量超过允许的最大值时,终止所述附加的web抓取请求。

提出了该方法,还包括:

(g)确定目标网站是否拒绝为来自代理的web请求提供服务,其中当在(g)中确定目标网站没有拒绝为来自代理的web请求提供服务时,执行步骤(b)-(f)。

提出了该方法,还包括:

(i)当在(g)中确定目标网站拒绝为来自代理的web请求提供服务时,重试经由不同的代理向目标网站发送web请求。

提出了该方法,还包括:

(g)基于目标网站从多个抓取器中选择抓取器,使得所选择的抓取器包括关于如何生成web请求以从目标网站提取数据的指令,

其中生成(b)包括根据所选择的抓取器中的指令来生成web请求,以及

其中计数(e)包括对接收到的内容中的数据量进行计数以确定由抓取器为客户端检索到的当前流量总量。

提出了该方法,其中所述web请求是第二web请求,并且接收到的内容是第二内容,该方法还包括:

(g)基于目标网站从多个抓取器中选择抓取器,使得所选择的抓取器包括关于如何生成第一web请求和第二web请求的指令;

(f)根据该指令生成针对目标网站的第一web请求;

(g)传输第一web请求,使得该web请求经由代理到达目标网站;以及

(h)响应于第一web请求,经由代理接收包括经由代理从目标网站传输的数据的第一内容,

其中生成(b)包括基于数据根据所选择的抓取器中的指令来生成第二web请求。

提出了该方法,其中计数(e)包括排除第一内容中的数据量以确定由抓取器为客户端检索到的当前流量总量。

提出了该方法,其中计数(e)包括确定接收到的内容中被压缩用于传输的数据量。

提出了该方法,其中计数(e)还包括:

(i)确定由接收到的内容所表示的数据的类型;

(ii)基于数据的类型,确定表示当通过网络传输该类型的数据时预期的压缩量的压缩因子;以及

(ii)基于压缩因子,确定接收到的内容中被压缩用于传输的数据量。

提出了该方法,还包括:

(g)分析内容以确定呈现网页所需的附加内容的网址;以及

(h)从该网址检索附加内容,

其中计数(e)包括将附加内容中的数据量包括在针对客户端计算设备的客户端的当前流量总量中。

提出了该方法,还包括:

(g)从与客户端计算设备对应的客户端接收对剩余数据量的请求;

(h)将剩余数据量确定为当前流量总量与客户端允许的最大值之间的差;以及

(i)将剩余数据量返回到客户端。

提出了一种其上存储有指令的非暂态计算机可读设备,指令在由至少一个计算设备执行时使所述至少一个计算设备执行操作,操作包括:

(a)从客户端计算设备接收web抓取请求,该web抓取请求指定要从中捕获内容的目标网站;

(b)基于web抓取请求,生成针对目标网站的web请求;

(c)传输web请求,使得web请求经由从一组代理中选择的代理到达目标网站;

(d)响应于web请求,经由代理接收从目标网站传输的内容;

(e)对接收到的内容中的数据量进行计数以确定客户端计算设备的客户端的当前流量总量;以及

(f)将接收到的内容传输到客户端计算设备。

提出了该设备,操作还包括:

(g)确定目标网站是否拒绝为来自代理的web请求提供服务,其中当在(g)中确定目标网站没有拒绝为来自代理的web请求提供服务时,执行步骤(b)-(f)。

提出了该设备,操作还包括:

(h)当在(g)中确定目标网站拒绝为来自代理的web请求提供服务时,重试经由不同的代理向目标网站发送web请求。

提出了该设备,其中所述web请求是第二web请求,并且接收到的内容是第二内容,操作还包括:

(g)基于目标网站从多个抓取器中选择抓取器,使得所选择的抓取器包括关于如何生成第一web请求和第二web请求的指令;

(h)根据该指令生成针对目标网站的第一web请求;

(i)传输第一web请求,使得该web请求经由代理到达目标网站;以及

(j)响应于第一web请求,经由代理接收包括经由代理从目标网站传输的数据的第一内容,

其中生成(b)包括基于数据根据所选择的抓取器中的指令生成第二web请求,

其中计数(e)包括排除第一内容中的数据量以确定由抓取器为客户端检索到的当前流量总量。

提出了该设备,其中计数(e)包括确定接收到的内容中被压缩用于传输的数据量。

提出了该设备,其中计数(e)还包括:

(i)确定由接收到的内容所表示的数据的类型;

(ii)基于数据的类型,确定表示当通过网络传输该类型的数据时预期的压缩量的压缩因子;以及

(ii)基于压缩因子,确定接收到的内容中被压缩用于传输的数据量。

提出了该设备,还包括:

(g)分析内容以确定呈现网页所需的附加内容的网址;以及

(h)从该网址检索附加内容,

其中计数(e)包括将附加内容中的数据量包括在针对客户端计算设备的客户端的当前流量总量中。

提出了一种用于确定哪些服务器可用于处理web抓取作业的计算机实现的方法,包括:

重复检查多个数据库服务器中的每个数据库服务器的健康状况;

基于健康状况检查,确定要在表中启用还是禁用多个数据库服务器中的每个数据库服务器,所述多个数据库服务器彼此独立地操作,每个数据库服务器被配置为管理到作业数据库的至少一部分的数据存储,该作业数据库在web抓取作业被执行时存储web抓取作业的状态;

当从客户端计算设备接收到web抓取请求时:

选择表中被识别为启用的数据库服务器之一;以及

将由web抓取请求指定的作业描述发送到所选择的数据库服务器,以作为未决web抓取作业存储在作业数据库中。

提出了该方法,其中,对于所述多个数据库服务器中的每个数据库服务器,所述重复检查中的每次检查都包括连接到相应数据库服务器的作业数据库的部分。

提出了该方法,其中所述多个数据库服务器中的每个数据库服务器包括对要存储在作业数据库中的作业描述进行排队的消息代理,并且所述重复检查中的每次检查包括,对于所述多个数据库服务器中的每个数据库服务器,检查从客户端计算设备接收web抓取请求的服务器与相应数据库服务器的消息代理之间的连接。

提出了该方法,其中所述多个数据库服务器中的每个数据库服务器包括对要存储在作业数据库中的作业描述进行排队的消息代理,并且所述重复检查中的每次检查包括,对于所述多个数据库服务器中的每个数据库服务器,检查在相应数据库服务器的消息代理内排队的消息的数量。

提出了该方法,其中所述多个数据库服务器中的每个数据库服务器是在作业数据库的水平分区中管理存储的分片。

提出了该方法,其中所述多个数据库服务器中的每个数据库服务器不使状态彼此同步。

提出了该方法,其中所述多个数据库服务器由多个不同的计算设备执行。

提出了该方法,还包括:

确定所述多个数据库服务器中被禁用的数据库服务器的数量是否超过阈值;以及

当被禁用的数据库服务器的数量超过阈值时,向管理员发出警报。

提出了一种其上存储有指令的非暂态计算机可读设备,指令在由至少一个计算设备执行时使所述至少一个计算设备执行操作,操作包括:

重复检查多个数据库服务器中的每个数据库服务器的健康状况;

基于健康状况检查,确定要在表中启用还是禁用多个数据库服务器中的每个数据库服务器,所述多个数据库服务器彼此独立地操作,每个数据库服务器被配置为管理到作业数据库的至少一部分的数据存储,该作业数据库在web抓取作业被执行时存储web抓取作业的状态;

当从客户端计算设备接收到web抓取请求时:

选择表中被识别为启用的数据库服务器之一;以及

将由web抓取请求指定的作业描述发送到所选择的数据库服务器,以作为未决web抓取作业存储在作业数据库中。

提出了该设备,其中,对于所述多个数据库服务器中的每个数据库服务器,所述重复检查中的每次检查都包括连接到相应数据库服务器的作业数据库的部分。

提出了该设备,其中所述多个数据库服务器中的每个数据库服务器包括对要存储在作业数据库中的作业描述进行排队的消息代理,并且所述重复检查中的每次检查包括,对于所述多个数据库服务器中的每个数据库服务器,检查从客户端计算设备接收web抓取请求的服务器与相应数据库服务器的消息代理之间的连接。

提出了该设备,其中所述多个数据库服务器中的每个数据库服务器包括对要存储在作业数据库中的作业描述进行排队的消息代理,并且所述重复检查中的每次检查包括,对于所述多个数据库服务器中的每个数据库服务器,检查在相应数据库服务器的消息代理内排队的消息的数量。

提出了该设备,其中所述多个数据库服务器中的每个数据库服务器是在作业数据库的水平分区中管理存储的分片。

提出了该设备,其中所述多个数据库服务器中的每个数据库服务器不使状态彼此同步。

提出了该设备,其中所述多个数据库服务器由多个不同的计算设备执行。

提出了该设备,还包括:

确定所述多个数据库服务器中被禁用的数据库服务器的数量是否超过阈值;以及

当被禁用的数据库服务器数量超过阈值时,向管理员发出警报。

提出了一种用于确定哪些服务器可用于处理web抓取作业的系统,包括:

处理器;

作业数据库,用于在web抓取作业被执行时存储web抓取作业的状态;

存储器,存储作业数据库;

彼此独立操作的多个数据库服务器,每个数据库服务器被配置为管理到作业数据库的至少一部分的数据存储;

数据库监视器,被配置为重复地检查所述多个数据库服务器中的每个数据库服务器的健康状况,并且基于健康状况检查的结果,确定要在表中启用还是禁用所述多个数据库服务器中的每个数据库服务器;

数据库服务器选择器,被配置为,当从客户端计算设备接收到web抓取请求时,选择表中被识别为启用的数据库服务器之一;以及

请求摄入管理器,被配置为将由web抓取请求指定的作业描述发送到所选择的数据库服务器,以作为未决web抓取作业存储在作业数据库中。

提出了该系统,其中数据库监视器被配置为,对于所述多个数据库服务器中的每个数据库服务器,检查请求摄入管理器与作业数据库之间的连接。

提出了该系统,其中所述多个数据库服务器中的每个数据库服务器包括对要存储在作业数据库中的作业描述进行排队的消息代理,并且数据库监视器被配置为,对于所述多个数据库服务器中的每个数据库服务器,检查从客户端计算设备接收web抓取请求的服务器与相应数据库服务器的消息代理之间的连接。

提出了该系统,其中所述多个数据库服务器中的每个数据库服务器包括对要存储在作业数据库中的作业描述进行排队的消息代理,并且数据库监视器被配置为,对于所述多个数据库服务器中的每个数据库服务器,检查在相应数据库服务器的消息代理内排队的消息。

提出了一种用于在多个数据中心上分发web抓取请求的计算机实现的方法,包括:

(a)从客户端计算设备接收API请求,该API请求与先前向web抓取系统请求的web抓取作业相关;

(b)识别对执行web抓取系统的多个数据中心中的数据中心处的主机进行寻址的主机名,该数据中心为web抓取作业提供服务;

(c)将API请求指引到识别出的主机名;以及

(d)在识别出的数据中心处,为API请求提供服务。

提出了该方法,其中所述API请求是第二API请求,该方法还包括在识别出的数据中心处:

接收第一API请求以请求web抓取系统经由代理从目标网站抓取内容,其中第一API请求在第二API请求之前被接收;

生成针对第一API请求中指定的目标网站的web请求;

传输web请求,使得该web请求经由从一组代理中选择的代理到达目标网站;以及

响应于web请求,经由代理接收来自目标网站的抓取的内容。

提出了该方法,其中第二API请求用于检索由API请求指定的web抓取作业的状态。

提出了该方法,其中第二API请求用于检索接收到的抓取的内容。

提出了该方法,还包括:

向客户端计算设备发送消息,该消息指定供客户端计算设备检索抓取的内容的子域。

提出了该方法,其中主机名寻址负载平衡器,该负载平衡器在接受web抓取请求的多个服务器之间平衡请求。

提出了该方法,其中步骤(a)-(c)在数据中心平衡器处执行,该数据中心平衡器选择所述多个数据中心中的哪个数据中心为web抓取作业提供服务。

提出了该方法,其中数据中心位于第一数据中心处,其中步骤(a)-(c)在与第一数据中心不同的第二数据中心处执行。

提出了该方法,其中指引(c)包括向客户端计算设备发送指引客户端计算设备将API请求重新发送到子域的指令。

提出了该方法,其中指引(c)包括将API请求转发到用于处理请求的第一数据中心的子域,方法还包括:

在第二数据中心处,将抓取的内容从第一数据中心转发到客户端计算设备。

提出了该方法,其中执行web抓取系统的所述多个数据中心各自操作以彼此独立地接受作业请求,其中来自API请求的状态和结果存储在多个独立的、水平分区的数据库分片之一上。

提出了一种其上存储有指令的非暂态计算机可读设备,指令在由至少一个计算设备执行时使所述至少一个计算设备执行操作,操作包括:

(a)从客户端计算设备接收API请求,该API请求与先前向web抓取系统请求的web抓取作业相关;

(b)识别对执行web抓取系统的多个数据中心中的数据中心处的主机进行寻址的主机名,该数据中心为web抓取作业提供服务;以及

(c)将API请求指引到识别出的主机名,以便在识别出的数据中心处提供服务。

提出了该设备,其中API请求是第二API请求,还包括在识别出的数据处:

接收第一API请求以请求web抓取系统经由代理从目标网站抓取内容,其中第一API请求在第二API请求之前被接收;

生成针对第一API请求中指定的目标网站的web请求;

传输web请求,使得该web请求经由从一组代理中选择的代理到达目标网站;以及

响应于web请求,经由代理接收来自目标网站的抓取的内容。

提出了该设备,其中第二API请求用于检索接收到的抓取的内容。

提出了该设备,操作还包括:

向客户端计算设备发送消息,该消息指定供客户端计算设备检索抓取的内容的子域。

提出了该设备,其中执行web抓取系统的所述多个数据中心各自操作以彼此独立地接受作业请求,其中来自API请求的状态和结果存储在多个独立的、水平分区的数据库分片之一上。

提出了该设备,其中主机名寻址负载平衡器,该负载平衡器在接受web抓取请求的多个服务器之间平衡请求。

一种用于在多个数据中心上分发web抓取请求的系统,包括:

至少一个处理器和存储器;

数据中心平衡器,被配置为(i)接收从目标网站抓取内容的第一API请求和一旦抓取就检索内容的第二API请求,(ii)将第一API请求指引到从多个数据中心中选择的数据中心,以及(iii)将第二API请求指引到数据中心;以及

请求摄入管理器,被配置为(i)响应于第一API请求,发起从目标网站的web抓取,以及(ii)响应于第二API请求,将从目标网站抓取的内容返回到客户端计算设备。

一种用于在多个数据中心上分发web抓取请求的系统,包括:

至少一个处理器和存储器;

数据中心平衡器,被配置为(i)接收从目标网站抓取内容的第一API请求和一旦抓取就检索内容的第二API请求,(ii)将第一API请求指引到从多个数据中心中选择的第一数据中心,以及(iii)将第二API请求指引到从所述多个数据中心中选择的第二数据中心;

第一请求摄入管理器,在第一数据中心处执行,第一请求摄入管理器被配置为(i)响应于第一API请求,发起从目标网站的web抓取,以及(ii)响应于第二API请求,将从目标网站抓取的内容返回到客户端计算设备;以及

第二请求摄入管理器,在第二数据中心处执行,第二请求摄入管理器被配置为响应于第二API请求,(i)确定所述多个数据中心中的哪个数据中心处理了第一API请求,以及(ii)将第二API请求指引到所确定的数据中心。

提出了该系统,还包括:

第一负载平衡器,在第一数据中心处执行,第一负载平衡器被配置为响应于第一API请求:(i)从在第一数据中心处执行的第一多个第一请求摄入管理器中选择第一请求摄入管理器,以及(ii)将第一API请求指引到所选择的第一请求摄入管理器;以及

第二负载平衡器,在第二数据中心处执行,第二负载平衡器被配置为响应于第二API请求:(i)从在第二数据中心处执行的第二多个第一请求摄入管理器中选择第二请求摄入管理器,以及(ii)将第二API请求指引到所选择的第二请求摄入管理器。

提出了一种用于保护web抓取系统的计算机实现的方法,包括:

在web抓取系统的入口点处,执行以下操作:

(a)验证与来自客户端计算设备的API请求一起接收的凭证,该API请求要求web抓取系统从目标网站抓取内容;

(b)当凭证得到验证时,生成指示与该凭证相关联的客户端的身份的令牌;

(c)将API请求连同令牌一起传输到被配置为在web抓取系统上发起抓取过程的服务器;

在被配置为发起web抓取系统的服务器处:

(d)分析令牌以确定客户端是否被授权进行请求;以及

(e)当客户端被授权时,使得web抓取系统抓取目标网站。

提出了该方法,还包括:

(f)在多个服务器之间传递API请求,每个服务器被配置为执行web抓取系统的功能,被配置为发起web抓取系统的该服务器被包括在所述多个服务器中;

在每个相应的服务器处:

(g)分析令牌以确定客户端是否被授权进行由相应服务器执行的功能;以及

(e)当客户端被授权进行该功能时,执行该功能。

提出了该方法,其中所述多个服务器包括被配置为向格式化为web代理请求的API请求提供服务的服务器。

提出了该方法,其中所述多个服务器包括被配置为向同步API请求提供服务的服务器,在web抓取系统抓取目标网站时保持web抓取系统与客户端计算设备之间的连接打开。

提出了该方法,其中所述多个服务器包括被配置为向异步API请求提供服务的服务器,在web抓取系统抓取目标网站之前关闭web抓取系统与客户端计算设备之间的连接。

提出了该方法,其中生成(b)包括生成令牌以包括客户端的角色。

提出了该方法,其中生成(b)包括生成令牌以包括数字签名,该数字签名以密码方式保证客户端的身份未被篡改。

提出了该方法,其中所述API请求是第一API请求,并且所述令牌是第一令牌,该方法还包括:

(f)验证与第二API请求一起接收到的凭证,第二API请求要求检索web抓取系统先前从目标网站抓取的内容;

(g)当凭证得到验证时,生成第二令牌,该第二令牌指示与和第二API请求一起接收到的凭证相关联的客户端的身份;

(h)确定第一令牌和第二令牌是否指示第一API请求和第二API请求来自客户端;以及

(i)当第一令牌和第二令牌指示第一API请求和第二API请求来自客户端时,响应于第二API请求而返回抓取的内容。

提出了该方法,还包括,当第一令牌和第二令牌没有指示第一请求和第二请求来自客户端时,拒绝返回抓取的内容。

提出了该方法,其中入口点是从多个并行服务器中选择所述服务器的负载平衡器。

提出了一种其上存储有指令的非暂态计算机可读设备,指令在由至少一个计算设备执行时使所述至少一个计算设备执行操作,操作包括:

在web抓取系统的入口点处,执行以下操作:

(a)验证与来自客户端计算设备的API请求一起接收的凭证,该API请求要求web抓取系统抓取目标网站;

(b)当凭证得到验证时,生成指示与该凭证相关联的客户端的身份的令牌;

(c)将API请求连同令牌一起传输到被配置为在web抓取系统上发起抓取过程的服务器;

在被配置为发起web抓取系统的服务器处:

(d)分析令牌以确定客户端是否被授权进行请求;以及

(e)当客户端被授权时,使得web抓取系统抓取目标网站。

提出了该设备,操作还包括:

(f)在多个服务器之间传递API请求,每个服务器被配置为执行web抓取系统的功能,被配置为发起web抓取系统的该服务器被包括在所述多个服务器中;

在每个相应的服务器处:

(g)分析令牌以确定客户端是否被授权进行由相应服务器执行的功能;以及

(e)当客户端被授权进行该功能时,执行该功能。

提出了该设备,其中所述多个服务器包括被配置为向格式化为web代理请求的API请求提供服务的服务器。

提出了该设备,其中所述多个服务器包括被配置为向同步API请求提供服务的服务器,在web抓取系统抓取目标网站时保持web抓取系统与客户端计算设备之间的连接打开。

提出了该设备,其中所述多个服务器包括被配置为向异步API请求提供服务的服务器,在web抓取系统抓取目标网站之前关闭web抓取系统与客户端计算设备之间的连接。

提出了该设备,其中生成(b)包括生成令牌以包括客户端的角色。

提出了该设备,其中生成(b)包括生成令牌以包括数字签名,该数字签名以密码方式保证客户端的身份未被篡改。

提出了该设备,其中所述API请求是第一API请求,并且所述令牌是第一令牌,操作还包括:

(f)验证与第二API请求一起接收到的凭证,第二API请求要求检索web抓取系统先前从目标网站抓取的内容;

(g)当凭证得到验证时,生成第二令牌,该第二令牌指示与和第二API请求一起接收到的凭证相关联的客户端的身份;

(h)确定第一令牌和第二令牌是否指示第一API请求和第二API请求来自客户端;以及

(e)当第一令牌和第二令牌指示第一API请求和第二API请求来自客户端时,响应于第二API请求而返回抓取的内容。

提出了该设备,操作还包括当第一令牌和第二令牌没有指示第一请求和第二请求来自客户端时,拒绝返回抓取的内容。

提出了该设备,其中入口点是从多个并行服务器中选择所述服务器的负载平衡器。

提出了一种用于聚合从多个数据中心抓取的web结果的方法,包括:

在所述多个数据中心中的第一数据中心处,包括:

(a)生成对目标网站的第一web请求;

(b)将第一web请求传输到目标网站;

(c)响应于第一web请求,从目标网站接收第一内容;

(d)将第一内容存储在档案中;

(e)将第一条目存储在第一索引文件中,该第一条目包括描述第一内容的元数据和寻址档案中的第一内容的第一链接;

(f)分析来自客户端的搜索请求以确定搜索请求中的搜索准则描述第一条目中的元数据;

在所述多个数据中心中的第二数据中心处:

(g)生成对目标网站的第二web请求;

(h)将第二web请求传输到目标网站;

(i)响应于第二web请求,从目标网站接收第二内容;

(j)将第二内容存储在档案中;

(k)将第二条目存储在第二索引文件中,该第二条目包括描述第二内容的元数据和寻址档案中的第二内容的第二链接;

(l)分析来自客户端的搜索请求以确定搜索请求中的搜索准则描述第二条目中的元数据;以及

(m)响应于分析(f)和(l),向客户端提供具有第一链接和第二链接的文件。

提出了该方法,其中提供(m)包括:

将文件存储在与档案分开的数据库中;以及

为客户端提供对数据库的读取访问。

提出了该方法,其中文件包括第一条目和第二条目的元数据。

提出了该方法,还包括:

(n)解析来自目标网站的对第一web请求的响应以确定第一内容;以及

(o)解析来自目标网站的对第二web请求的响应以确定第二内容。

提出了该方法,还包括:

(n)确定步骤(a)-(e)在最近时间段内是否发生过,其中步骤(j)-(k)仅当步骤(a)-(e)在最近时间段内没有发生过时才发生。

提出了该方法,其中确定(n)包括在第二数据中心处:

(i)从第一数据中心接收具有对第一索引文件的添加内容的数据馈送;

(ii)将添加内容存储在先前抓取的文件中;以及

(ii)将描述第二内容的元数据与先前抓取的文件进行比较。

提出了该方法,还包括在基于最近时间段选择的到期日期从先前抓取的文件中移除元数据。

提出了一种其上存储有指令的非暂态计算机可读设备,指令在由至少一个计算设备执行时使所述至少一个计算设备执行操作,操作包括:

在所述多个数据中心中的第一数据中心处,包括:

(a)生成对目标网站的第一web请求;

(b)将第一web请求传输到目标网站;

(c)响应于第一web请求,从目标网站接收第一内容;

(d)将第一内容存储在档案中;

(e)将第一条目存储在第一索引文件中,该第一条目包括描述第一内容的元数据和寻址档案中的第一内容的第一链接;

(f)分析来自客户端的搜索请求以确定搜索请求中的搜索准则描述第一条目中的元数据;

在所述多个数据中心中的第二数据中心处:

(g)生成对目标网站的第二web请求;

(h)将第二web请求传输到目标网站;

(i)响应于第二web请求,从目标网站接收第二内容;

(j)将第二内容存储在档案中;

(k)将第二条目存储在第二索引文件中,该第二条目包括描述第二内容的元数据和寻址档案中的第二内容的第二链接;

(l)分析来自客户端的搜索请求以确定搜索请求中的搜索准则描述第二条目中的元数据;以及

(m)响应于分析(f)和(l),向客户端提供具有第一链接和第二链接的文件。

提出了该设备,其中提供(m)包括:

将文件存储在与档案分开的数据库中;以及

向客户端提供对数据库的读取访问。

提出了该设备,其中文件包括第一条目和第二条目的元数据。

提出了该设备,操作还包括:

(n)解析来自目标网站的对第一web请求的响应以确定第一内容;以及

(o)解析来自目标网站的对第二web请求的响应以确定第二内容。

提出了该设备,操作还包括:

(n)确定步骤(a)-(e)在最近时间段内是否发生过,其中步骤(j)-(k)仅当步骤(a)-(e)在最近时间段内没有发生过时才发生。

提出了该设备,其中确定(n)包括在第二数据中心处:

(i)从第一数据中心接收具有对第一索引文件的添加内容的数据馈送;

(ii)将添加内容存储在先前抓取的文件中;以及

(ii)将描述第二内容的元数据与先前抓取的文件进行比较。

提出了该设备,操作还包括在基于最近时间段选择的到期日期从先前抓取的文件中移除元数据。

提出了一种用于聚合从多个数据中心抓取的web结果的系统,包括:

处理器;

至少一个存储器;

档案数据库,存储在所述至少一个存储器中;

第一索引文件,存储在第一数据中心处的至少一个存储器中;

第一数据中心处的第一抓取器,第一抓取器被配置为(i)生成针对目标网站的第一web请求,(ii)将第一web请求传输到目标网站,以及(iii)响应于第一web请求,从目标网站接收第一内容;

第一数据中心处的第一写入器,第一写入器被配置为(i)将第一内容存储在档案中以及(ii)将第一条目存储在第一索引文件中,该第一条目包括描述第一内容的元数据和寻址档案中的第一内容的第一链接;

第一数据中心处的第一转储器,第一转储器被配置为分析来自客户端的搜索请求以确定搜索请求中的搜索准则描述第一条目中的元数据;

第二索引文件,存储在第二数据中心处的至少一个存储器中;

第二数据中心处的第二抓取器,第二抓取器被配置为(i)生成针对目标网站的第二web请求,(ii)将第二web请求传输到目标网站,以及(iii)响应于第二web请求,从目标网站接收第二内容;

第二数据中心处的第二写入器,第二写入器被配置为(i)将第二内容存储在档案中以及(ii)将第二条目存储在第二索引文件中,该第二条目包括描述第二内容的元数据和寻址档案中的第二内容的第二链接;

第二数据中心处的第二转储器,第二转储器被配置为分析来自客户端的搜索请求以确定搜索请求中的搜索准则描述第二条目中的元数据;以及

转储数据库,被配置为向客户端提供具有第一链接和第二链接的文件。

提出了该系统,其中文件包括第一条目和第二条目的元数据。

提出了该系统,操作还包括:

第一数据中心处的第一解析器,第一解析器被配置为解析来自目标网站的对第一web请求的响应以确定第一内容;以及

第二数据中心处的第二解析器,第二解析器被配置为解析来自目标网站的对第二web请求的响应以确定第二内容。

提出了该系统,其中第二写入器被配置为确定第一写入器是否在最近的时间段内已将目标网站记录在档案中,其中第二写入器被配置为仅当第一写入器在最近时间段内未将目标网站记录在存档中时才将目标网站记录在档案中。

提出了该系统,其中还包括,在第二数据中心处:

存储在所述至少一个存储器中的先前抓取的文件;

馈送接收器,被配置为从第一数据中心接收具有对第一索引文件的添加内容的数据馈送并将添加内容存储在先前抓取的文件中,其中写入器被配置为将描述第二内容的元数据与先前抓取的内容进行比较。

提出了该系统,其中在基于最近时间段选择的到期日期从先前抓取的文件中移除元数据。

提出了一种用于经由代理抓取web结果的方法,包括:

(a)从客户端计算设备接收API请求,该API请求指定要抓取的目标网站;

(b)基于目标网站,选择指定如何生成HTTP请求序列以访问API请求所请求的内容的抓取器;

(c)基于所选择的抓取器和接收到的API请求,生成HTTP请求序列中较早的HTTP请求;

(d)向目标网站经由从一组代理中选择的代理传输较早的HTTP请求;

(e)从目标网站经由从所述一组代理中选择的代理接收对较早的HTTP请求的响应,该响应包括会话数据;

(f)基于所选择的抓取器和接收到的API请求,生成HTTP请求序列中较晚的HTTP请求,使得较晚的HTTP请求包括所述会话数据;

(g)从目标网站经由从所述一组代理中选择的代理接收对较晚的HTTP请求的响应,该响应包括抓取的web结果;以及

(h)将抓取的web结果传输到客户端计算设备。

提出了如上述权利要求中的任一项所述的方法,还包括:

根据API请求和所选择的抓取器,生成要在较早的HTTP请求中使用的路径。

提出了如上述方法中的任一项所述的方法,其中API请求指定地理位置,该方法还包括:

基于所述一组代理来选择代理,使得所选择的代理的IP地址位于所述地理位置中。

如上述权利要求中的任一项所述的方法,其中API请求指定地理位置,该方法还包括:

确定要在较早和较晚的HTTP请求中使用的至少一个报头值,使得所述至少一个报头向目标网站识别出较早和较晚的HTTP请求源自所述地理位置。

提出了如以上方法中的任一项所述的方法,还包括:

确定在较早和较晚的HTTP请求中使用的至少一个报头值以模仿在代理处的浏览器将生成什么内容。

如上述权利要求中的任一项所述的方法,还包括:

确定API请求中所请求的目标网站是否最近已从目标网站抓取并且最近抓取的结果是否存储在高速缓存中;以及

当确定最近抓取的结果没有存储在高速缓存中时,执行步骤(b)-(h);以及

当确定最近抓取的结果存储在高速缓存中时,将最近抓取的结果作为对API请求的响应进行传输。

提出了如以上方法中的任一项所述的方法,其中API请求是来自客户端计算设备的HTTP请求,其中传输(h)包括传输抓取的web结果作为对来自客户端计算设备的HTTP请求的HTTP响应。

提出了如以上方法中的任一项所述的方法,当接收(g)完成时,向客户端计算设备传输回调消息。

如上述权利要求中的任一项所述的方法,其中API请求是HTTP代理协议请求,并且其中传输(h)包括传输抓取的结果作为对HTTP代理协议请求的响应。

提出了如以上方法中的任一项所述的方法,还包括:

通过无头浏览器检索渲染由抓取的结果指定的网页所需的附加内容。

提出了如上述方法中的任一项所述的方法,还包括:

从所述一组代理中选择代理以防止所述一组代理中的任何代理被识别为机器人程序(bot)。

提出了如上述方法中的任一项所述的方法,API请求指定用户代理,该方法还包括:

确定在较早和较晚的HTTP请求中使用的至少一个报头值以模仿用户代理。

提出了如上述方法中的任一项所述的方法,还包括:

接收抓取web数据的同步和异步API请求;以及

将同步API请求的处理优先于异步API请求的处理。

提出了如上述方法中的任一项所述的方法,其中对较早的HTTP请求的响应包括具有向URI提交信息的表单的HTML页面,其中较晚的HTTP请求包括具有该URI的路径。

提出了如上述方法中的任一项所述的方法,其中API请求包括值,其中对较早的HTTP请求的响应包括具有带参数名称的表单的HTML页面,其中较晚的HTTP请求指示参数名称与所述值对应。

提出了如上述方法中的任一项所述的方法,其中API请求包括与几个参数名称之一匹配的值,该方法还包括将该API请求归一化为通用格式。

提出了如上述方法中的任一项所述的方法,还包括基于为API请求提供服务的服务器来生成作业标识符。

提出了如上述方法中的任一项所述的方法,还包括将API请求中指定的web抓取作业的状态存储在存储器内表中。

提出了如上述方法中的任一项所述的方法,还包括将web抓取作业的状态存储在水平分区的数据库中。

提出了一种用于经由代理抓取web结果的系统,包括:

用于从客户端计算设备接收API请求的部件,该API请求指定要抓取的目标网站;

用于基于目标网站选择抓取器的部件,该抓取器指定如何生成一系列HTTP请求以访问API请求所请求的内容;

用于基于所选择的抓取器和接收到的API请求来生成HTTP请求序列中较早的HTTP请求的部件;

用于向目标网站经由从一组代理中选择的代理传输较早的HTTP请求的部件;

用于从目标网站经由从所述一组代理中选择的代理接收对较早的HTTP请求的响应的部件,该响应包括会话数据;

用于基于所选择的抓取器和接收到的API请求生成HTTP请求序列中较晚的HTTP请求的部件,使得较晚的HTTP请求包括所述会话数据;

用于从目标网站经由从所述一组代理中选择的代理接收对较晚的HTTP请求的响应的部件,该响应包括抓取的web结果;以及

用于将抓取的web结果传输到客户端计算设备的部件。

权利要求书(按照条约第19条的修改)

1.一种用于随时间执行多个web抓取请求的计算机实现的方法,包括:

(a)在第一时间段期间,从客户端计算设备接收多个web抓取请求,所述多个web抓取请求中的每个web抓取请求指定要从中捕获内容的目标网站;

(b)将用于所述多个web抓取请求的作业描述放置在队列上,所述作业描述各自描述由所述多个请求中的请求指定的至少一个web抓取作业;

(c)在比第一时间段长的第二时间段内增量地从队列中移除作业描述;

当每个相应的作业描述从队列中被移除时:

(d)生成针对作业描述中指定的目标网站的web请求;以及

(e)传输web请求,使得web请求经由从一组代理中选择的代理到达目标网站。

2.根据权利要求1所述的方法,其中移除(c)以所选择的增量发生,以避免所述一组代理被目标网站阻止。

3.根据前述权利要求中的任一项、特别是根据权利要求1所述的方法,还包括:

(f)响应于web请求,接收从目标网站传输的内容;以及

(g)将接收到的内容传输到客户端计算设备。

4.根据前述权利要求中的任一项、特别是根据权利要求1所述的方法,其中所述多个web抓取请求各自包括指示从其发起web抓取请求的客户端的客户端标识符,该方法还包括:

(f)基于客户端标识符从多个队列中选择所述队列。

5.根据权利要求4所述的方法,其中所述多个web抓取请求各自还包括目标网站的标识符,该方法还包括:

(g)基于目标网站的标识符从所述多个队列中选择所述队列。

6.根据权利要求4和5中的任一项、特别是根据权利要求5所述的方法,还包括基于作业描述是否指定从无头浏览器进行web抓取来从所述多个队列中选择所述队列。

7.根据权利要求4至6中的任一项、特别是根据权利要求6所述的方法,还包括,当作业描述请求从无头浏览器进行web抓取时:

(h)响应于web请求,接收指定网页的内容,该内容是从目标网站传输的;

(i)分析该内容以确定渲染网页所需的附加内容的网址;以及

(j)从该网址请求附加内容。

8.根据前述权利要求中的任一项、特别是根据权利要求1所述的方法,其中增量地移除(c)包括在时间窗口从队列重复移除作业描述。

9.根据权利要求8所述的方法,其中增量地移除(c)包括在时间窗口从队列重复移除多个作业描述。

10.根据权利要求9所述的方法,其中所述多个作业描述中的作业描述的数量是基于发送所述多个web抓取请求的客户端来指定的。

11.根据前述权利要求中的任一项、特别是根据权利要求1所述的方法,还包括:

(f)确定来自客户端计算设备的web抓取请求不再需要被节流;

(g)确定队列何时为空;以及

(h)当确定队列为空时,删除该队列。

12.根据前述权利要求中的任一项、特别是根据权利要求1所述的方法,还包括:

(f)确定所述多个web抓取请求中哪些是同步请求以及哪些是异步请求;以及

(g)将(f)中确定为同步请求的web抓取请求优先于(f)中确定为异步请求的web抓取请求,以帮助确保在与客户端计算设备的连接超时之前返回来自同步请求的结果。

13.一种用于随时间执行多个web抓取请求的系统,包括:

至少一个处理器;

存储器,被配置为存储队列;

请求摄入管理器,被配置为在第一时间段期间从客户端计算设备接收多个web抓取请求,所述多个web抓取请求中的每个web抓取请求指定要从其捕获内容的目标网站;

节流器,被配置为将用于多个web抓取请求的作业描述放置在队列上,所述作业描述各自描述由所述多个请求中的请求指定的至少一个web抓取作业;

作业移除器,被配置为在比第一时间段长的第二时间段内增量地从队列中移除作业描述;

抓取器,被配置为当每个相应的作业描述从队列中被移除时,生成针对作业描述中指定的目标网站的web请求,并且传输该web请求,使得该web请求经由从一组代理中选择的代理到达目标网站。

14.根据权利要求13所述的系统,其中作业移除器被配置为以所选择的增量移除以避免所述一组代理被目标网站阻止。

15.根据权利要求13和14中的任一项、特别是根据权利要求13所述的系统,其中抓取器被配置为响应于web请求而接收从目标网站传输的内容,并且请求摄入管理器被配置为向客户端通知接收到的内容可用于传输到客户端计算设备。

16.根据权利要求13至15中的任一项、特别是根据权利要求13所述的系统,还包括被配置为存储多个队列的存储器,其中所述多个web抓取请求各自包括指示客户端源自的客户端的客户端标识符,该系统还包括:

队列选择器,其基于客户端标识符从多个队列中选择队列。

17.根据权利要求16所述的系统,其中所述多个web抓取请求各自还包括目标网站的标识符,队列选择器被配置为基于目标网站的标识符从所述多个队列中选择所述队列。

18.根据权利要求16和17中的任一项、特别是根据权利要求17所述的系统,还包括队列选择器,该队列选择器被配置为基于作业描述是否指定从无头浏览器进行web抓取来从所述多个队列中选择所述队列。

19.根据权利要求13至18中的任一项、特别是根据权利要求13所述的系统,还包括:

节流配置数据库,存储与队列相关联的常规时间窗口,其中作业移除器在时间窗口从队列中重复移除作业描述。

20.一种其上存储有指令的非暂态计算机可读设备,指令在由至少一个计算设备执行时使所述至少一个计算设备执行操作,操作包括:

(a)在第一时间段期间,从客户端计算设备接收多个web抓取请求,所述多个web抓取请求中的每个web抓取请求指定要从中捕获内容的目标网站;

(b)将用于所述多个web抓取请求的作业描述放置在队列上,所述作业描述各自描述由所述多个请求中的请求指定的至少一个web抓取作业;

(c)在比第一时间段长的第二时间段内增量地从队列中移除作业描述;

当每个相应的作业描述从队列中被移除时:

(d)生成针对作业描述中指定的目标网站的web请求;以及

(e)传输web请求,使得web请求经由从一组代理中选择的代理到达目标网站。

21.一种用于跟踪用户活动的计算机实现的方法,包括:

(a)从客户端计算设备接收web抓取请求,该web抓取请求指定要从中捕获内容的目标网站;

(b)基于web抓取请求,生成针对目标网站的web请求;

(c)传输web请求,使得web请求经由从一组代理中选择的代理到达目标网站;

(d)响应于web请求,经由代理接收从目标网站传输的内容;

(e)对接收到的内容中的数据量进行计数以确定客户端计算设备的客户端的当前流量总量;以及

(f)将接收到的内容传输到客户端计算设备,

其中所述web请求是第二web请求,并且接收到的内容是第二内容,并且该方法还包括:

(g)基于目标网站从多个抓取器中选择抓取器,使得所选择的抓取器包括关于如何生成第一web请求和第二web请求的指令;

(f)根据该指令生成针对目标网站的第一web请求;

(g)传输第一web请求,使得该web请求经由代理到达目标网站;以及

(h)响应于第一web请求,经由代理接收包括经由代理从目标网站传输的数据的第一内容,

其中生成(b)包括基于所述数据根据所选择的抓取器中的指令生成第二web请求,以及

其中计数(e)包括排除第一内容中的数据量以确定由抓取器为客户端检索到的当前流量总量。

22.根据权利要求21所述的方法,还包括:

(g)基于当前流量总量,为与客户端计算设备对应的客户端生成费用清单。

23.根据权利要求21和22中的任一项、特别是根据权利要求21所述的方法,其中当前流量总量是针对一个时间段的,该方法还包括:

(g)从客户端计算设备接收附加的web抓取请求;

(h)确定当前流量总量是否超过与该客户端计算设备对应的客户端能够允许的最大值;以及

(i)当在(h)中确定当前流量总量超过能够允许的最大值时,拒绝为所述附加的web抓取请求提供服务。

24.根据权利要求21至23中的任一项、特别是根据权利要求21所述的方法,其中当前流量总量是针对一个时间段的,该方法还包括:

(g)从客户端计算设备接收附加的web抓取请求;

(h)确定当前流量总量是否超过与该客户端计算设备对应的客户端能够允许的最大值;以及

(i)当在(h)中确定当前流量总量超过能够允许的最大值时,终止所述附加的web抓取请求。

25.根据权利要求21至24中的任一项、特别是根据权利要求21所述的方法,还包括:

(g)确定目标网站是否拒绝为来自代理的web请求提供服务,其中当在(g)中确定目标网站没有拒绝为来自代理的web请求提供服务时,执行步骤(b)-(f)。

26.根据权利要求25所述的方法,还包括:

(i)当在(g)中确定目标网站已经拒绝为来自代理的web请求提供服务时,重试经由不同的代理向目标网站发送web请求。

27.根据权利要求21至26中的任一项、特别是根据权利要求21所述的方法,还包括:

(g)基于目标网站从多个抓取器中选择抓取器,使得所选择的抓取器包括关于如何生成web请求以从目标网站提取数据的指令,

其中生成(b)包括根据所选择的抓取器中的指令来生成web请求,以及

其中计数(e)包括对接收到的内容中的数据量进行计数以确定由抓取器为客户端检索到的当前流量总量。

28.根据权利要求21至27中的任一项、特别是根据权利要求21所述的方法,其中计数(e)包括确定接收到的内容中被压缩用于传输的数据量。

29.根据权利要求27所述的方法,其中计数(e)还包括:

(i)确定由接收到的内容所表示的数据的类型;

(ii)基于数据的类型,确定表示当通过网络传输该类型的数据时预期的压缩量的压缩因子;以及

(ii)基于压缩因子,确定接收到的内容中被压缩用于传输的数据量。

30.根据权利要求21至29中的任一项、特别是根据权利要求21所述的方法,还包括:

(g)分析内容以确定呈现网页所需的附加内容的网址;以及

(h)从该网址检索附加内容,

其中计数(e)包括将附加内容中的数据量包括在针对客户端计算设备的客户端的当前流量总量中。

31.根据权利要求21至30中的任一项、特别是根据权利要求21所述的方法,还包括:

(g)从与客户端计算设备对应的客户端接收对剩余数据量的请求;

(h)将剩余数据量确定为当前流量总量与客户端能够允许的最大值之间的差;以及

(i)将剩余数据量返回给客户端。

32.一种其上存储有指令的非暂态计算机可读设备,指令在由至少一个计算设备执行时使所述至少一个计算设备执行操作,操作包括:

(a)从客户端计算设备接收web抓取请求,该web抓取请求指定要从中捕获内容的目标网站;

(b)基于web抓取请求,生成针对目标网站的web请求;

(c)传输web请求,使得web请求经由从一组代理中选择的代理到达目标网站;

(d)响应于web请求,经由代理接收从目标网站传输的内容;

(e)对接收到的内容中的数据量进行计数以确定客户端计算设备的客户端的当前流量总量;以及

(f)将接收到的内容传输到客户端计算设备,

其中所述web请求是第二web请求,并且接收到的内容是第二内容,所述操作还包括:

(g)基于目标网站从多个抓取器中选择抓取器,使得所选择的抓取器包括关于如何生成第一web请求和第二web请求的指令;

(h)根据该指令生成针对目标网站的第一web请求;

(i)传输第一web请求,使得该web请求经由代理到达目标网站;以及

(j)响应于第一web请求,经由代理接收包括经由代理从目标网站传输的数据的第一内容,

其中生成(b)包括基于数据根据所选择的抓取器中的指令生成第二web请求,

其中计数(e)包括排除第一内容中的数据量以确定由抓取器为客户端检索到的当前流量总量。

33.根据权利要求32所述的设备,操作还包括:

(g)确定目标网站是否拒绝为来自代理的web请求提供服务,其中当在(g)中确定目标网站没有拒绝为来自代理的web请求提供服务时,执行步骤(b)-(f)。

34.根据权利要求33所述的设备,操作还包括:

(h)当在(g)中确定目标网站已经拒绝为来自代理的web请求提供服务时,重试经由不同的代理向目标网站发送web请求。

35.根据权利要求32至34中的任一项、特别是根据权利要求32所述的设备,其中计数(e)包括确定接收到的内容中被压缩用于传输的数据量。

36.根据权利要求32至35中的任一项、特别是根据权利要求32所述的设备,其中计数(e)还包括:

(i)确定由接收到的内容所表示的数据的类型;

(ii)基于所述数据的类型,确定表示当通过网络传输该类型的数据时预期的压缩量的压缩因子;以及

(ii)基于压缩因子,确定接收到的内容中被压缩用于传输的数据量。

37.根据权利要求32至36中的任一项、特别是根据权利要求32所述的设备,还包括:

(g)分析内容以确定呈现网页所需的附加内容的网址;以及

(h)从该网址检索附加内容,

其中计数(e)包括将附加内容中的数据量包括在针对客户端计算设备的客户端的当前流量总量中。

38.一种用于确定哪些服务器可用于处理web抓取作业的计算机实现的方法,包括:

重复检查多个数据库服务器中的每个数据库服务器的健康状况;

基于健康状况检查,确定要在表中启用还是禁用多个数据库服务器中的每个数据库服务器,所述多个数据库服务器彼此独立地操作,每个数据库服务器被配置为管理到作业数据库的至少一部分的数据存储,该作业数据库在web抓取作业被执行时存储web抓取作业的状态;

当从客户端计算设备接收到web抓取请求时:

选择表中被识别为启用的数据库服务器之一;以及

将由web抓取请求指定的作业描述发送到所选择的数据库服务器,以作为未决web抓取作业存储在作业数据库中,

其中所述多个数据库服务器中的每个数据库服务器包括对要存储在作业数据库中的作业描述进行排队的消息代理,并且所述重复检查中的每次检查包括,对于所述多个数据库服务器中的每个数据库服务器,检查在相应数据库服务器的消息代理内排队的消息的数量。

39.根据权利要求38所述的方法,其中,所述重复检查中的每次检查包括,对于所述多个数据库服务器中的每个数据库服务器,连接到相应数据库服务器的作业数据库的所述一部分。

40.根据权利要求38和39中的任一项、特别是根据权利要求38所述的方法,其中所述多个数据库服务器中的每个数据库服务器包括对要存储在作业数据库中的作业描述进行排队的消息代理,并且所述重复检查中的每次检查包括,对于所述多个数据库服务器中的每个数据库服务器,检查从客户端计算设备接收web抓取请求的服务器与相应数据库服务器的消息代理之间的连接。

41.根据权利要求38至40中的任一项、特别是根据权利要求38所述的方法,其中所述多个数据库服务器中的每个数据库服务器是在作业数据库的水平分区中管理存储的分片。

42.根据权利要求38至41中的任一项、特别是根据权利要求38所述的方法,其中所述多个数据库服务器中的每个数据库服务器不彼此同步状态。

43.根据权利要求38至42中的任一项、特别是根据权利要求38所述的方法,其中所述多个数据库服务器由多个不同的计算设备执行。

44.根据权利要求38至43中的任一项、特别是根据权利要求38所述的方法,还包括:

确定所述多个数据库服务器中被禁用的数据库服务器的数量是否超过阈值;以及

当被禁用的数据库服务器的数量超过阈值时,向管理员发出警报。

45.一种其上存储有指令的非暂态计算机可读设备,指令在由至少一个计算设备执行时使所述至少一个计算设备执行操作,操作包括:

重复检查多个数据库服务器中的每个数据库服务器的健康状况;

基于健康状况检查,确定要在表中启用还是禁用多个数据库服务器中的每个数据库服务器,所述多个数据库服务器彼此独立地操作,每个数据库服务器被配置为管理到作业数据库的至少一部分的数据存储,该作业数据库在web抓取作业被执行时存储web抓取作业的状态;

当从客户端计算设备接收到web抓取请求时:

选择表中被识别为启用的数据库服务器之一;以及

将由web抓取请求指定的作业描述发送到所选择的数据库服务器,以作为未决web抓取作业存储在作业数据库中,

其中所述多个数据库服务器中的每个数据库服务器包括对要存储在作业数据库中的作业描述进行排队的消息代理,并且所述重复检查中的每次检查包括,对于所述多个数据库服务器中的每个数据库服务器,检查在相应数据库服务器的消息代理内排队的消息的数量。

46.根据权利要求45所述的设备,其中,所述重复检查中的每次检查包括,对于所述多个数据库服务器中的每个数据库服务器,连接到相应数据库服务器的作业数据库的所述一部分。

47.根据权利要求45和46中的任一项、特别是根据权利要求45所述的设备,其中所述多个数据库服务器中的每个数据库服务器包括对要存储在作业数据库中的作业描述进行排队的消息代理,并且所述重复检查中的每次检查包括,对于所述多个数据库服务器中的每个数据库服务器,检查从客户端计算设备接收web抓取请求的服务器与相应数据库服务器的消息代理之间的连接。

48.根据权利要求45至47中的任一项、特别是根据权利要求45所述的设备,其中所述多个数据库服务器中的每个数据库服务器是在作业数据库的水平分区中管理存储的分片。

49.根据权利要求45和48中的任一项、特别是根据权利要求45所述的设备,其中所述多个数据库服务器中的每个数据库服务器不彼此同步状态。

50.根据权利要求45和49中的任一项、特别是根据权利要求45所述的设备,其中所述多个数据库服务器由多个不同的计算设备执行。

51.根据权利要求45和50中的任一项、特别是根据权利要求45所述的设备,还包括:

确定所述多个数据库服务器中被禁用的数据库服务器的数量是否超过阈值;以及

当被禁用的数据库服务器的数量超过阈值时,向管理员发出警报。

52.一种用于确定哪些服务器可用于处理web抓取作业的系统,包括:

处理器;

作业数据库,用于在web抓取作业被执行时存储web抓取作业的状态;

存储器,存储作业数据库;

彼此独立操作的多个数据库服务器,每个数据库服务器被配置为管理到作业数据库的至少一部分的数据存储;

数据库监视器,被配置为重复地检查所述多个数据库服务器中的每个数据库服务器的健康状况,并且基于健康状况检查的结果,确定要在表中启用还是禁用所述多个数据库服务器中的每个数据库服务器;

数据库服务器选择器,被配置为当从客户端计算设备接收到web抓取请求时,选择表中被识别为启用的数据库服务器之一;以及

请求摄入管理器,被配置为将由web抓取请求指定的作业描述发送到所选择的数据库服务器,以作为未决web抓取作业存储在作业数据库中,

其中所述多个数据库服务器中的每个数据库服务器包括对要存储在作业数据库中的作业描述进行排队的消息代理,并且数据库监视器被配置为,对于所述多个数据库服务器中的每个数据库服务器,检查在相应数据库服务器的消息代理内排队的消息的数量。

53.根据权利要求52所述的系统,其中数据库监视器被配置为,对于所述多个数据库服务器中的每个数据库服务器,检查请求摄入管理器与作业数据库之间的连接。

54.根据权利要求52和53中的任一项、特别是根据权利要求52所述的系统,其中所述多个数据库服务器中的每个数据库服务器包括对要存储在作业数据库中的作业描述进行排队的消息代理,并且数据库监视器被配置为,对于所述多个数据库服务器中的每个数据库服务器,检查从客户端计算设备接收web抓取请求的服务器与相应数据库服务器的消息代理之间的连接。

55.一种用于在多个数据中心上分发web抓取请求的计算机实现的方法,包括:

(a)从客户端计算设备接收API请求,该API请求与web抓取系统的先前被请求的web抓取作业相关;

(b)识别对执行web抓取系统的多个数据中心中的数据中心处的主机进行寻址的主机名,该数据中心为web抓取作业提供服务;

(c)将API请求指引到识别出的主机名;以及

(d)在识别出的数据中心处,为API请求提供服务,

其中所述API请求是第二API请求,以及

其中该方法还包括在识别出的数据中心处:

接收用于请求web抓取系统经由代理从目标网站抓取内容的第一API请求,其中第一API请求在第二API请求之前被接收;

生成针对第一API请求中指定的目标网站的web请求;

传输web请求,使得该web请求经由从一组代理中选择的代理到达目标网站;以及

响应于web请求,经由代理接收来自目标网站的抓取的内容;以及

其中数据中心位于第一数据中心处,其中步骤(a)-(c)在与第一数据中心不同的第二数据中心处执行。

56.根据权利要求55所述的方法,其中第二API请求用于检索由API请求指定的web抓取作业的状态。

57.根据权利要求56所述的方法,其中第二API请求用于检索接收到的抓取的内容。

58.根据权利要求55至57中的任一项、特别是根据权利要求56所述的方法,还包括:

向客户端计算设备发送消息,该消息指定供客户端计算设备检索抓取的内容的子域。

59.根据权利要求55至58中的任一项、特别是根据权利要求55所述的方法,其中主机名对负载平衡器进行寻址,该负载平衡器在接受web抓取请求的多个服务器之间平衡请求。

60.根据权利要求55至59中的任一项、特别是根据权利要求55所述的方法,其中步骤(a)-(c)在数据中心平衡器处执行,该数据中心平衡器选择所述多个数据中心中的哪个数据中心为web抓取作业提供服务。

61.根据权利要求60所述的方法,其中指引(c)包括向客户端计算设备发送指引客户端计算设备将API请求重新发送到子域的指令。

62.根据权利要求60所述的方法,其中指引(c)包括将API请求转发到用于处理请求的第一数据中心的子域,所述方法还包括:

在第二数据中心处,将抓取的内容从第一数据中心转发到客户端计算设备。

63.根据权利要求55和62中的任一项、特别是根据权利要求55所述的方法,其中执行web抓取系统的所述多个数据中心各自操作以彼此独立地接受作业请求,其中来自API请求的状态和结果存储在多个独立的、水平分区的数据库分片之一上。

64.一种其上存储有指令的非暂态计算机可读设备,指令在由至少一个计算设备执行时使所述至少一个计算设备执行操作,操作包括:

(a)从客户端计算设备接收API请求,该API请求与web抓取系统的先前被请求的web抓取作业相关;

(b)识别对执行web抓取系统的多个数据中心中的数据中心处的主机进行寻址的主机名,该数据中心为web抓取作业提供服务;以及

(c)将API请求指引到识别出的主机名,以便在识别出的数据中心处提供服务,

其中所述API请求是第二API请求,

并且该操作还包括在识别出的数据中心处:

接收用于请求web抓取系统经由代理从目标网站抓取内容的第一API请求,其中第一API请求在第二API请求之前被接收;

生成针对第一API请求中指定的目标网站的web请求;

传输web请求,使得该web请求经由从一组代理中选择的代理到达目标网站;以及

响应于web请求,经由代理接收来自目标网站的抓取的内容;以及

其中数据中心位于第一数据中心处,其中步骤(a)-(c)在与第一数据中心不同的第二数据中心处执行。

65.根据权利要求64所述的设备,其中第二API请求是检索接收到的抓取的内容。

66.根据权利要求64至65中的任一项、特别是根据权利要求64所述的设备,操作还包括:

向客户端计算设备发送消息,该消息指定供客户端计算设备检索抓取的内容的子域。

67.根据权利要求64至66中的任一项、特别是根据权利要求64所述的设备,其中执行web抓取系统的所述多个数据中心各自操作以彼此独立地接受作业请求,其中来自API请求的状态和结果存储在多个独立的、水平分区的数据库分片之一上。

68.根据权利要求64至67中的任一项、特别是根据权利要求64所述的设备,其中主机名寻址负载平衡器,该负载平衡器在接受web抓取请求的多个服务器之间平衡请求。

69.一种用于在多个数据中心上分发web抓取请求的系统,包括:

至少一个处理器和存储器;

数据中心平衡器,被配置为(i)接收从目标网站抓取内容的第一API请求和一旦抓取就检索内容的第二API请求,(ii)将第一API请求指引到从多个数据中心中选择的第一数据中心,以及(iii)将第二API请求指引到从所述多个数据中心中选择的第二数据中心;

第一请求摄入管理器,在第一数据中心处执行,第一请求摄入管理器被配置为(i)响应于第一API请求,发起从目标网站的web抓取,以及(ii)响应于第二API请求,将从目标网站抓取的内容返回到客户端计算设备;以及

第二请求摄入管理器,在第二数据中心处执行,第二请求摄入管理器被配置为响应于第二API请求,(i)确定所述多个数据中心中的哪个数据中心处理了第一API请求,以及(ii)将第二API请求指引到所确定的数据中心。

70.根据权利要求69所述的系统,还包括:

第一负载平衡器,在第一数据中心处执行,第一负载平衡器被配置为响应于第一API请求:(i)从在第一数据中心处执行的第一多个第一请求摄入管理器中选择第一请求摄入管理器,以及(ii)将第一API请求指引到所选择的第一请求摄入管理器;以及

第二负载平衡器,在第二数据中心处执行,第二负载平衡器被配置为响应于第二API请求:(i)从在第二数据中心处执行的第二多个第一请求摄入管理器中选择第二请求摄入管理器,以及(ii)将第二API请求指引到所选择的第二请求摄入管理器。

71.一种用于保护web抓取系统的计算机实现的方法,包括:

在web抓取系统的入口点处,执行以下操作:

(a)验证与来自客户端计算设备的API请求一起接收的凭证,该API请求要求web抓取系统从目标网站抓取内容;

(b)当凭证得到验证时,生成指示与该凭证相关联的客户端的身份的令牌;

(c)将API请求连同令牌一起传输到被配置为在web抓取系统上发起抓取过程的服务器;

在被配置为发起web抓取系统的服务器处:

(d)分析令牌以确定客户端是否被授权进行请求;以及

(e)当客户端被授权时,使得web抓取系统抓取目标网站,

其中入口点是从多个并行服务器中选择被配置为发起web抓取系统的所述服务器的负载平衡器。

72.根据权利要求71所述的方法,还包括:

(f)在多个服务器之间传递API请求,每个服务器被配置为执行web抓取系统的功能,被配置为发起web抓取系统的该服务器被包括在所述多个服务器中;

在每个相应服务器处:

(g)分析令牌以确定客户端是否被授权进行由相应服务器执行的功能;以及

(e)当客户端被授权进行该功能时,执行该功能。

73.根据权利要求72所述的方法,其中所述多个服务器包括被配置为向被格式化为web代理请求的API请求提供服务的服务器。

74.根据权利要求72和73中的任一项、特别是根据权利要求72所述的方法,其中所述多个服务器包括被配置为向同步API请求提供服务的服务器,从而在web抓取系统抓取目标网站时保持web抓取系统与客户端计算设备之间的连接打开。

75.根据权利要求72至74中的任一项、特别是根据权利要求72所述的方法,其中所述多个服务器包括被配置为向异步API请求提供服务的服务器,在web抓取系统抓取目标网站之前关闭web抓取系统与客户端计算设备之间的连接。

76.根据权利要求72至75中的任一项、特别是根据权利要求72所述的方法,其中生成(b)包括生成令牌以包括客户端的角色。

77.根据权利要求72至76中的任一项、特别是根据权利要求72所述的方法,其中生成(b)包括生成令牌以包括数字签名,该数字签名以密码方式保证客户端的身份未被篡改。

78.根据权利要求72至77中的任一项、特别是根据权利要求71所述的方法,其中所述API请求是第一API请求,并且所述令牌是第一令牌,该方法还包括:

(f)验证与第二API请求一起接收到的凭证,第二API请求要求检索web抓取系统先前从目标网站抓取的内容;

(g)当凭证得到验证时,生成第二令牌,该第二令牌指示与和第二API请求一起接收到的凭证相关联的客户端的身份;

(h)确定第一令牌和第二令牌是否指示第一API请求和第二API请求来自客户端;以及

(i)当第一令牌和第二令牌指示第一API请求和第二API请求来自客户端时,响应于第二API请求而返回抓取的内容。

79.根据权利要求78所述的方法,还包括,当第一令牌和第二令牌没有指示第一请求和第二请求来自客户端时,拒绝返回抓取的内容。

80.一种其上存储有指令的非暂态计算机可读设备,指令在由至少一个计算设备执行时使所述至少一个计算设备执行操作,操作包括:

在web抓取系统的入口点处,执行以下操作:

(a)验证与来自客户端计算设备的API请求一起接收的凭证,该API请求要求web抓取系统抓取目标网站;

(b)当凭证得到验证时,生成指示与该凭证相关联的客户端的身份的令牌;

(c)将API请求连同令牌一起传输到被配置为在web抓取系统上发起抓取过程的服务器;

在被配置为发起web抓取系统的服务器处:

(d)分析令牌以确定客户端是否被授权进行请求;以及

(e)当客户端被授权时,使得web抓取系统抓取目标网站,

其中入口点是从多个并行服务器中选择被配置为发起web抓取系统的所述服务器的负载平衡器。

81.根据权利要求80所述的设备,操作还包括:

(f)在多个服务器之间传递API请求,每个服务器被配置为执行web抓取系统的功能,被配置为发起web抓取系统的该服务器被包括在所述多个服务器中;

在每个相应的服务器处:

(g)分析令牌以确定客户端是否被授权进行由该相应的服务器执行的功能;以及

(e)当客户端被授权进行该功能时,执行该功能。

82.根据权利要求81所述的设备,其中所述多个服务器包括被配置为向被格式化为web代理请求的API请求提供服务的服务器。

83.根据权利要求81和82中的任一项、特别是根据权利要求81所述的设备,其中所述多个服务器包括被配置为向同步API请求提供服务的服务器,从而在web抓取系统抓取目标网站时保持web抓取系统与客户端计算设备之间的连接打开。

84.根据权利要求81至83中的任一项、特别是根据权利要求81所述的设备,其中所述多个服务器包括被配置为向异步API请求提供服务的服务器,从而在web抓取系统抓取目标网站之前关闭web抓取系统与客户端计算设备之间的连接。

85.根据权利要求81至84中的任一项、特别是根据权利要求81所述的设备,其中生成(b)包括生成令牌以包括客户端的角色。

86.根据权利要求81和85中的任一项、特别是根据权利要求81所述的设备,其中生成(b)包括生成令牌以包括数字签名,该数字签名以密码方式保证客户端的身份未被篡改。

87.根据权利要求81和86中的任一项、特别是根据权利要求81所述的设备,其中所述API请求是第一API请求,并且所述令牌是第一令牌,操作还包括:

(f)验证与第二API请求一起接收到的凭证,第二API请求要求检索web抓取系统先前从目标网站抓取的内容;

(g)当凭证得到验证时,生成第二令牌,该第二令牌指示与和第二API请求一起接收到的凭证相关联的客户端的身份;

(h)确定第一令牌和第二令牌是否指示第一API请求和第二API请求来自客户端;以及

(e)当第一令牌和第二令牌指示第一API请求和第二API请求来自客户端时,响应于第二API请求而返回抓取的内容。

88.根据权利要求87所述的设备,操作还包括当第一令牌和第二令牌没有指示第一请求和第二请求来自客户端时,拒绝返回抓取的内容。

89.一种用于聚合从多个数据中心抓取的web结果的方法,包括:

在所述多个数据中心中的第一数据中心处,包括:

(a)生成对目标网站的第一web请求;

(b)将第一web请求传输到目标网站;

(c)响应于第一web请求,从目标网站接收第一内容;

(d)将第一内容存储在档案中;

(e)将第一条目存储在第一索引文件中,该第一条目包括描述第一内容的元数据和寻址档案中的第一内容的第一链接;

(f)分析来自客户端的搜索请求以确定搜索请求中的搜索准则描述第一条目中的元数据;

在所述多个数据中心中的第二数据中心处:

(g)生成对目标网站的第二web请求;

(h)将第二web请求传输到目标网站;

(i)响应于第二web请求,从目标网站接收第二内容;

(j)将第二内容存储在档案中;

(k)将第二条目存储在第二索引文件中,该第二条目包括描述第二内容的元数据和寻址档案中的第二内容的第二链接;

(l)分析来自客户端的搜索请求以确定搜索请求中的搜索准则描述第二条目中的元数据;以及

(m)响应于分析(f)和(l),向客户端提供具有第一链接和第二链接的文件。

90.根据权利要求89所述的方法,其中提供(m)包括:

将文件存储在与档案分开的数据库中;以及

向客户端提供对数据库的读取访问。

91.根据权利要求89和90中的任一项、特别是根据权利要求89所述的方法,其中文件包括第一条目和第二条目的元数据。

92.根据权利要求89至91中的任一项、特别是根据权利要求89所述的方法,还包括:

(n)解析来自目标网站的对第一web请求的响应以确定第一内容;以及

(o)解析来自目标网站的对第二web请求的响应以确定第二内容。

93.根据权利要求89和92中的任一项、特别是根据权利要求89所述的方法,还包括:

(n)确定步骤(a)-(e)在最近时间段内是否发生过,其中步骤(j)-(k)仅当步骤(a)-(e)在最近时间段内没有发生过时才发生。

94.根据权利要求93所述的方法,其中确定(n)包括在第二数据中心处:

(i)从第一数据中心接收具有对第一索引文件的添加内容的数据馈送;

(ii)将添加内容存储在先前抓取的文件中;以及

(ii)将描述第二内容的元数据与先前抓取的文件进行比较。

95.根据权利要求94所述的方法,还包括在基于所述最近时间段选择的到期日期从先前抓取的文件中移除元数据。

96.一种其上存储有指令的非暂态计算机可读设备,指令在由至少一个计算设备执行时使所述至少一个计算设备执行操作,操作包括:

在所述多个数据中心中的第一数据中心处,包括:

(a)生成对目标网站的第一web请求;

(b)将第一web请求传输到目标网站;

(c)响应于第一web请求,从目标网站接收第一内容;

(d)将第一内容存储在档案中;

(e)将第一条目存储在第一索引文件中,该第一条目包括描述第一内容的元数据和寻址档案中的第一内容的第一链接;

(f)分析来自客户端的搜索请求以确定搜索请求中的搜索准则描述第一条目中的元数据;

在所述多个数据中心中的第二数据中心处:

(g)生成对目标网站的第二web请求;

(h)将第二web请求传输到目标网站;

(i)响应于第二web请求,从目标网站接收第二内容;

(j)将第二内容存储在档案中;

(k)将第二条目存储在第二索引文件中,该第二条目包括描述第二内容的元数据和寻址档案中的第二内容的第二链接;

(l)分析来自客户端的搜索请求以确定搜索请求中的搜索准则描述第二条目中的元数据;以及

(m)响应于分析(f)和(l),向客户端提供具有第一链接和第二链接的文件。

97.根据权利要求96所述的设备,其中提供(m)包括:

将文件存储在与档案分开的数据库中;以及

向客户端提供对数据库的读取访问。

98.根据权利要求96和97中的任一项、特别是根据权利要求96所述的设备,其中文件包括第一条目和第二条目的元数据。

99.根据权利要求96至98中的任一项、特别是根据权利要求96所述的设备,操作还包括:

(n)解析来自目标网站的对第一web请求的响应以确定第一内容;以及

(o)解析来自目标网站的对第二web请求的响应以确定第二内容。

100.根据权利要求96至99中的任一项、特别是根据权利要求96所述的设备,操作还包括:

(n)确定步骤(a)-(e)在最近时间段内是否发生过,其中步骤(j)-(k)仅当步骤(a)-(e)在最近时间段内没有发生过时才发生。

101.根据权利要求100所述的设备,其中确定(n)包括在第二数据中心处:

(i)从第一数据中心接收具有对第一索引文件的添加内容的数据馈送;

(ii)将添加内容存储在先前抓取的文件中;以及

(ii)将描述第二内容的元数据与先前抓取的文件进行比较。

102.根据权利要求101所述的设备,操作还包括在基于所述最近时间段选择的到期日期从先前抓取的文件中移除元数据。

103.一种用于聚合从多个数据中心抓取的web结果的系统,包括:

处理器;

至少一个存储器;

档案数据库,存储在所述至少一个存储器中;

第一索引文件,存储在第一数据中心处的至少一个存储器中;

第一数据中心处的第一抓取器,第一抓取器被配置为(i)生成针对目标网站的第一web请求,(ii)将第一web请求传输到目标网站,以及(iii)响应于第一web请求,从目标网站接收第一内容;

第一数据中心处的第一写入器,第一写入器被配置为(i)将第一内容存储在档案中以及(ii)将第一条目存储在第一索引文件中,该第一条目包括描述第一内容的元数据和寻址档案中的第一内容的第一链接;

第一数据中心处的第一转储器,第一转储器被配置为分析来自客户端的搜索请求以确定搜索请求中的搜索准则描述第一条目中的元数据;

第二索引文件,存储在第二数据中心处的至少一个存储器中;

第二数据中心处的第二抓取器,第二抓取器被配置为(i)生成针对目标网站的第二web请求,(ii)将第二web请求传输到目标网站,以及(iii)响应于第二web请求,从目标网站接收第二内容;

第二数据中心处的第二写入器,第二写入器被配置为(i)将第二内容存储在档案中以及(ii)将第二条目存储在第二索引文件中,该第二条目包括描述第二内容的元数据和寻址档案中的第二内容的第二链接;

第二数据中心处的第二转储器,第二转储器被配置为分析来自客户端的搜索请求以确定搜索请求中的搜索准则描述第二条目中的元数据;以及

转储数据库,被配置为向客户端提供具有第一链接和第二链接的文件。

104.根据权利要求103所述的系统,其中文件包括第一条目和第二条目的元数据。

105.根据权利要求103和104中的任一项、特别是根据权利要求103所述的系统,操作还包括:

第一数据中心处的第一解析器,第一解析器被配置为解析来自目标网站的对第一web请求的响应以确定第一内容;以及

第二数据中心处的第二解析器,第二解析器被配置为解析来自目标网站的对第二web请求的响应以确定第二内容。

106.根据权利要求103至105中的任一项、特别是根据权利要求103所述的系统,其中第二写入器被配置为确定第一写入器是否在最近时间段内已将目标网站记录在档案中,其中第二写入器被配置为仅当第一写入器在最近时间段内未将目标网站记录在档案中时才将目标网站记录在档案中。

107.根据权利要求103至106中的任一项、特别是根据权利要求103所述的系统,其中还包括,在第二数据中心处:

存储在所述至少一个存储器中的先前抓取的文件;

馈送接收器,被配置为从第一数据中心接收具有对第一索引文件的添加内容的数据馈送并将添加内容存储在先前抓取的文件中,其中写入器被配置为将描述第二内容的元数据与先前抓取的文件进行比较。

108.根据权利要求103至107中的任一项、特别是根据权利要求103所述的系统,其中在基于所述最近时间段选择的到期日期从先前抓取的文件中移除元数据。

109.一种用于经由代理抓取web结果的方法,包括:

(a)从客户端计算设备接收API请求,该API请求指定要抓取的目标网站;

(b)基于目标网站,选择指定如何生成HTTP请求序列以访问API请求所请求的内容的抓取器;

(c)基于所选择的抓取器和接收到的API请求,生成HTTP请求序列中较早的HTTP请求;

(d)向目标网站经由从一组代理中选择的代理传输所述较早的HTTP请求;

(e)从目标网站经由从所述一组代理中选择的代理接收对所述较早的HTTP请求的响应,该响应包括会话数据;

(f)基于所选择的抓取器和接收到的API请求,生成HTTP请求序列中较晚的HTTP请求,使得所述较晚的HTTP请求包括所述会话数据;

(g)从目标网站经由从所述一组代理中选择的代理接收对所述较晚的HTTP请求的响应,该响应包括抓取的web结果;以及

(h)将抓取的web结果传输到客户端计算设备。

110.根据权利要求109所述的方法,还包括:

根据API请求和所选择的抓取器,生成要在所述较早的HTTP请求中使用的路径。

111.根据权利要求109至110中的任一项所述的方法,其中API请求指定地理位置,该方法还包括:

基于所述一组代理来选择代理,使得所选择的代理的IP地址位于所述地理位置中。

112.根据权利要求109至111中的任一项所述的方法,其中API请求指定地理位置,该方法还包括:

确定要在所述较早的HTTP请求和所述较晚的HTTP请求中使用的至少一个报头值,使得所述至少一个报头向目标网站识别所述较早的HTTP请求和所述较晚的HTTP请求源自所述地理位置。

113.根据权利要求109至112中的任一项所述的方法,还包括:

确定在所述较早的HTTP请求和所述较晚的HTTP请求中使用的至少一个报头值以模仿在代理处的浏览器将生成什么内容。

114.根据权利要求109至113中的任一项所述的方法,还包括:

确定API请求中所请求的目标网站是否最近已从目标网站抓取并且最近抓取的结果是否存储在高速缓存中;

当确定最近抓取的结果没有存储在高速缓存中时,执行步骤(b)-(h);以及

当确定最近抓取的结果存储在高速缓存中时,将最近抓取的结果作为对API请求的响应进行传输。

115.根据权利要求109至114中的任一项所述的方法,其中API请求是来自客户端计算设备的HTTP请求,其中传输(h)包括传输抓取的web结果作为对来自客户端计算设备的HTTP请求的HTTP响应。

116.根据权利要求109至115中的任一项所述的方法,当接收(g)完成时,向客户端计算设备传输回调消息。

117.根据权利要求109至116中的任一项所述的方法,其中API请求是HTTP代理协议请求,并且其中传输(h)包括传输抓取的结果作为对HTTP代理协议请求的响应。

118.根据权利要求109至117中的任一项所述的方法,还包括:

通过无头浏览器检索渲染由抓取的结果指定的网页所需的附加内容。

119.根据权利要求109至118中的任一项所述的方法,还包括:

从所述一组代理中选择代理以防止所述一组代理中的任何代理被识别为机器人程序。

120.根据权利要求109至119中的任一项所述的方法,API请求指定用户代理,该方法还包括:

确定在所述较早的HTTP请求和所述较晚的HTTP请求中使用的至少一个报头值以模仿用户代理。

121.根据权利要求109至120中的任一项所述的方法,还包括:

接收抓取web数据的同步和异步API请求;以及

将同步API请求的处理优先于异步API请求的处理。

122.根据权利要求109至121中的任一项所述的方法,其中对所述较早的HTTP请求的响应包括具有向URI提交信息的表单的HTML页面,其中所述较晚的HTTP请求包括具有该URI的路径。

123.根据权利要求109至122中的任一项所述的方法,其中API请求包括值,其中对所述较早的HTTP请求的响应包括具有带参数名称的表单的HTML页面,其中所述较晚的HTTP请求指示参数名称与所述值对应。

124.根据权利要求109至123中的任一项所述的方法,其中API请求包括与多个参数名称之一匹配的值,该方法还包括将该API请求归一化为通用格式。

125.根据权利要求109至124中的任一项所述的方法,还包括基于为API请求提供服务的服务器来生成作业标识符。

126.根据权利要求109至125中的任一项所述的方法,还包括将API请求中指定的web抓取作业的状态存储在存储器内表中。

127.根据权利要求109至126中的任一项所述的方法,还包括将web抓取作业的状态存储在水平分区的数据库中。

128.一种用于经由代理抓取web结果的系统,包括:

用于从客户端计算设备接收API请求的部件,该API请求指定要抓取的目标网站;

用于基于目标网站选择抓取器的部件,该抓取器指定如何生成HTTP请求序列以访问API请求所请求的内容;

用于基于所选择的抓取器和接收到的API请求来生成HTTP请求序列中较早的HTTP请求的部件;

用于向目标网站经由从一组代理中选择的代理传输所述较早的HTTP请求的部件;

用于从目标网站经由从所述一组代理中选择的代理接收对所述较早的HTTP请求的响应的部件,该响应包括会话数据;

用于基于所选择的抓取器和接收到的API请求生成HTTP请求序列中较晚的HTTP请求的部件,使得所述较晚的HTTP请求包括所述会话数据;

用于从目标网站经由从所述一组代理中选择的代理接收对所述较晚的HTTP请求的响应的部件,该响应包括抓取的web结果;以及

用于将抓取的web结果传输到客户端计算设备的部件。

相关技术
  • 机械式导轨垂直度测量仪
  • 电梯导轨轨距及垂直度自动测量仪
技术分类

06120116333958