CN109992707A - 一种数据爬取方法、装置、存储介质及服务器 - Google Patents
一种数据爬取方法、装置、存储介质及服务器 Download PDFInfo
- Publication number
- CN109992707A CN109992707A CN201910205518.1A CN201910205518A CN109992707A CN 109992707 A CN109992707 A CN 109992707A CN 201910205518 A CN201910205518 A CN 201910205518A CN 109992707 A CN109992707 A CN 109992707A
- Authority
- CN
- China
- Prior art keywords
- data
- crawlers
- pending data
- buffer storage
- current pending
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 61
- 230000009193 crawling Effects 0.000 title claims abstract description 19
- 238000013500 data storage Methods 0.000 claims description 11
- 241001269238 Data Species 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 6
- 238000013481 data capture Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 13
- 230000008569 process Effects 0.000 description 12
- 230000006870 function Effects 0.000 description 11
- 238000012545 processing Methods 0.000 description 10
- 230000007246 mechanism Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000000151 deposition Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请实施例公开了一种数据爬取方法、装置、存储介质及服务器,所述方法包括:获取爬虫程序启动标识;当所述爬虫程序启动标识为第一标识时,从预设的数据缓存中获取当前待处理数据,所述第一标识指示所述爬虫程序首次启动;将所述当前待处理数据存放至内存数组中,采用所述爬虫程序爬取所述内存数组中的待处理数据。因此,采用本申请实施例,在爬虫程序意外中断时,可以从数据缓存中获取所请求的当前待处理数据,增加了容错性,避免正在爬取的待处理数据丢失。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据爬取方法、装置、存储介质及服务器。
背景技术
网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,包括传统爬虫以及定向爬虫。在定向爬虫中,通常是先获取一组待爬取数据列表,再通过从这组待爬取数据列表中获取待爬取数据进行数据的解析。为了维护这组待爬取数据列表能够在分布式环境下进行爬取,通常是将这组待爬取数据存放在主节点的数据库中,子节点进程连接主节点数据库,并通过数据库的出队操作进行待爬取数据的读取与请求。
各子节点不需要维护自己的一组待爬取数据列表,只需要在处理完后从主节点获取数据就可以了,并可以充分利用各个子节点的资源。但由于待爬取数据列表是一个队列,提供出队操作,当某个子节点请求一条待爬取数据后,一旦爬虫程序意外中断,将会导致这条待爬取数据丢失而无法找回。
发明内容
本申请实施例提供了一种数据爬取方法、装置、存储介质及服务器,可以解决当某个子节点请求一条待爬取数据后,一旦爬虫程序意外中断,将会导致这条待爬取数据丢失而无法找回的问题。所述技术方案如下:
第一方面,本申请实施例提供了一种数据爬取方法,所述方法包括:
获取爬虫程序启动标识;
当所述爬虫程序启动标识为第一标识时,从预设的数据缓存中获取当前待处理数据,所述第一标识指示所述爬虫程序首次启动;
将所述当前待处理数据存放至内存数组中,采用所述爬虫程序爬取所述内存数组中的待处理数据。
第二方面,本申请实施例提供了一种数据爬取装置,所述装置包括:
标识获取模块,用于获取爬虫程序启动标识;
数据获取模块,用于当所述爬虫程序启动标识为第一标识时,从预设的数据缓存中获取当前待处理数据,所述第一标识指示所述爬虫程序首次启动;
数据爬取模块,用于将所述当前待处理数据存放至内存数组中,采用所述爬虫程序爬取所述内存数组中的待处理数据。
第三方面,本申请实施例提供一种计算机存储介质,所述计算机存储介质存储有多条指令,所述指令适于由处理器加载并执行上述的方法步骤。
第四方面,本申请实施例提供一种服务器,可包括:处理器和存储器;其中,所述存储器存储有计算机程序,所述计算机程序适于由所述处理器加载并执行上述的方法步骤。
本申请一些实施例提供的技术方案带来的有益效果至少包括:
本申请实施例的方案在执行时,数据爬取装置(子节点)获取爬虫程序启动标识,当所述爬虫程序启动标识指示所述爬虫程序首次启动时,从预设的数据缓存中获取当前待处理数据,将所述当前待处理数据存放至内存数组中,并采用所述爬虫程序爬取所述内存数组中的待处理数据。即使在爬虫程序意外中断时,可以从数据缓存中获取所请求的当前待处理数据,增加了容错性,避免正在爬取的待处理数据丢失。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种系统架构示意图;
图2是本申请实施例提供的一种数据爬取方法的流程示意图;
图3是本申请实施例提供的一种内存数据的存放结构示意图;
图4是本申请实施例提供的一种数据爬取方法的流程示意图;
图5是本申请实施例提供的一种数据爬取装置的结构示意图;
图6是本申请实施例提供的一种数据爬取装置的结构示意图;
图7是本申请实施例提供的一种数据爬取模块的结构示意图;
图8是本申请实施例提供的一种服务器的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施例方式作进一步地详细描述。
下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本申请中的具体含义。此外,在本申请的描述中,除非另有说明,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
请参见图1,为本申请实施例提供的一种系统架构的示意图。如图1所示,所述系统架构可以包括主存服务器1以及缓存服务器集群;所述缓存服务器集群可以包括多个缓存服务器,如图1所示,具体包括缓存服务器2、缓存服务器3…、缓存服务器n,这多个缓存服务器为并列服务器,用于分布式处理主存服务器1中的待爬取数据。主存服务器可以理解为主节点,缓存服务器可以理解为子节点。为便于理解,本发明实施例可以在图1所示的多个缓存服务器中选择一个缓存服务器作为本方案的执行主体。本申请实施例可以图1中的缓存服务器2为例进行描述。
需要说明的是,在主存服务器1中有数据主存,在数据主存中存放待爬取的统一资源定位符(Uniform Resource Locator,URL),在多个缓存服务器中分别创建数据缓存,用于存放向主存服务器1爬取的URL以及该URL的备份。
如图1所示,缓存服务器2获取爬虫程序启动标识;
其中,爬虫程序是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。爬虫程序启动标识包括首次启动标识和非首次启动标识。
当所述爬虫程序启动标识为第一标识(首次启动标识)时,所述缓存服务器2判断预设的数据缓存中是否存在当前待处理数据;若所述预设的数据缓存中存在所述当前待处理数据,则从预设的数据缓存中获取当前待处理数据。
若所述预设的数据缓存中不存在所述当前待处理数据,则缓存服务器2向主存服务器获取当前待处理数据,并将所述当前待处理数据备份至所述预设的数据缓存中。
可选的,在缓存服务器2从预设的数据缓存中获取当前待处理数据之前,还需要向主存服务器1获取当前待处理数据,将所述当前待处理数据备份至预设的数据缓存中。
可选的,所述缓存服务器2从预设的数据缓存中获取当前待处理数据之后,还需要将所述当前待处理数据备份至所述预设的数据缓存中,从而避免当爬虫程序再次中断时,待处理数据丢失。
缓存服务器2将所述当前待处理数据存放至内存数组中,采用所述爬虫程序爬取所述内存数组中的待处理数据。
其中,缓存服务器2获取所述内存数组的数组长度;当所述数组长度大于或者等于所述爬虫程序中预设线程的个数时,采用所述预设线程爬取所述内存数组中的待处理数据。
当所述数组长度小于所述预设线程的个数时,从所述数据缓存中获取所述当前待处理数据的下一个待处理数据;将所述当前待处理数据的下一个待处理数据存放至所述内存数组中,并获取所述内存数组的数组长度。
可选的,所述缓存服务器2采用所述爬虫程序爬取所述内存数组中的待处理数据之后,则清除所述数据缓存。即在执行完当前批次的待处理数据后,清楚缓存的数据,以方便存储下一批次的待处理数据。
可选的,所述缓存服务器2清空所述数据缓存之后,将所述当前待处理数据的下一批次待处理数据确定为当前待处理数据,并转入执行所述向主存服务器获取当前待处理数据的步骤;当检测到所述下一批次待处理数据为空时,退出所述爬虫程序。
可选的,所述缓存服务器2从所述数据缓存中获取所述待处理数据并存放至内存数组中之后,将所述爬虫程序启动标识设置为第二标识,所述第二标识指示所述当前爬虫程序非首次启动。
本申请实施例的方案在执行时,数据爬取装置(子节点)获取爬虫程序启动标识,当所述爬虫程序启动标识指示所述爬虫程序首次启动时,从预设的数据缓存中获取当前待处理数据,将所述当前待处理数据存放至内存数组中,并采用所述爬虫程序爬取所述内存数组中的待处理数据。即使在爬虫程序意外中断时,可以从数据缓存中获取所请求的当前待处理数据,增加了容错性,避免正在爬取的待处理数据丢失。同时,基于Redis的数据存储机制,其数据读写效率相较于将数据备份到本地磁盘更高。另外,Redis的内存数据存储是基于队列的,在子节点进行数据的读取时,不用维护队列的下标,利于多进程操作。
下面将结合附图2-附图4,对本申请实施例提供的数据爬取方法进行详细介绍。其中,本申请实施例中的数据爬取装置可以是图1所示的缓存服务器2、3、…、n中的任一个。
请参见图2,为本申请实施例提供了一种数据爬取方法的流程示意图。如图2所示,本申请实施例的所述方法可以包括以下步骤:
S101,获取爬虫程序启动标识;
爬虫程序是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。它一般驻留在服务器上,通过给定的一些URL,利用HTTP等标准协议读取相应文档,然后以文档中包括的所有未访问过的URL作为新的起点,继续进行漫游,直到没有满足条件的新URL为止。
爬虫程序的主要功能是自动从网络上的各Web站点抓取Web文档并从该Web文档中提取一些信息来描述该Web文档,为搜索引擎站点的数据库服务器追加和更新数据提供原始数据,这些数据包括标题、长度、文件建立时间、HTML文件中的各种链接数目等。
所述爬虫程序启动标识指用于标识爬虫程序是否为首次启动的值,可以包括首次启动标识和非首次启动标识。如,首次启动时,标识为first=true,非首次启动时,标识为first=false。又如,首次启动时,标识为first=1,非首次启动时,标识为first=0。
其中,首次启动可以为爬虫程序首次开启,也可以为爬虫程序在执行时中断并再次开启。在本申请实施例中,所涉及的应用场景为爬虫程序在执行时中断并再次开启为首次启动。
S102,当所述爬虫程序启动标识为第一标识时,从预设的数据缓存中获取当前待处理数据,所述第一标识指示所述爬虫程序首次启动;
数据缓存指在数据爬取装置上所添加的内存数据库,如Redis数据库。Redis数据库是一个基于内存的Key-Value非关系型数据库,其读写速度极快(每秒10W左右的读写速度)。Redis支持存储的value类型包括string(字符串)、list(链表)、set(集合)、zset(sorted set有序集合)和hash(哈希类型)。同时,Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。
所述当前待处理数据即为待处理的URL,数据爬取装置可基于URL访问网页,并对网页内容进行解析。
其中,URL是用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它,其对应的URL格式一般包含三部分:协议(或称为服务方式)、存有该资源的主机IP地址(有时也包括端口号)、主机资源的具体地址,如目录和文件名等。
具体实现中,当所述爬虫程序启动标识指示爬虫程序首次启动时,表明该爬虫程序为中断后的首次启动,则直接从数据缓存中访问待处理数据,从而方便采用线程处理所访问的待处理数据。
当然,为了避免爬虫程序再次中断而导致待处理数据丢失,则需要在数据缓存中访问待处理数据时,将该待处理数据备份并存储在该数据缓存中。
可选的,若在数据缓存中不存在待处理数据,则需要向主存服务器请求该待处理数据。
S103,将所述当前待处理数据存放至内存数组中,采用所述爬虫程序爬取所述内存数组中的待处理数据。
数组是无序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便,把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组,如int compact(type*Array,int Count)。
内存数组即为存放在内存中的用于访问的数组。内存数组中的数组元素和数组变量在内存里是分开存放的。实际的数组对象被存储在堆内存中,数组变量是一个引用类型的变量,被存储在栈内存中。通过栈内存中的指针指向对应元素在堆内存中的位置来实现访问,内存数组的存储示意图如图3所示。
对于内存数组,包含有数组长度,即内存数组中堆内存所占的字节数,可通过访问函数获取数组长度。
例如,对于C语言,用sizeof可以获得数据类型或变量在内存中所占的字节数。同样,用sizeof也可以获得整个数组在内存中所占的字节数。因为数组中每个元素的类型都是一样的,在内存中所占的字节数都是相同的,所以总的字节数除以一个元素所占的字节数就是数组的长度。
具体实现中,数据爬取装置获取所述内存数组的数组长度,并判断数组长度是否大于或者等于爬虫程序中预设线程的个数,当所述数组长度大于或者等于所述爬虫程序中预设线程的个数时,采用所述预设线程爬取所述内存数组中的待处理数据。
本申请实施例的方案在执行时,数据爬取装置(子节点)获取爬虫程序启动标识,当所述爬虫程序启动标识指示所述爬虫程序首次启动时,从预设的数据缓存中获取当前待处理数据,将所述当前待处理数据存放至内存数组中,并采用所述爬虫程序爬取所述内存数组中的待处理数据。即使在爬虫程序意外中断时,可以从数据缓存中获取所请求的当前待处理数据,增加了容错性,避免正在爬取的待处理数据丢失。
请参见图4,为本申请实施例提供了一种数据爬取方法的流程示意图。本实施例以数据爬取方法应用于服务器中来举例说明。该数据爬取方法可以包括以下步骤:
S201,向主存服务器获取当前待处理数据,将所述当前待处理数据备份至预设的数据缓存中;
主存服务器即为爬虫系统中包含了主存数据库的服务器,在主存数据库中存储有待处理数据。其中的爬虫系统如图1所示。在本申请实施例中,所述主存数据库可以为主存Redis。Redis数据库是一个基于内存的Key-Value非关系型数据库,基于Redis的数据存储在内存的机制,其数据读写效率相较于将数据备份到本地磁盘更高。
所述待处理数据即为待处理的URL,数据爬取装置可基于待处理的URL访问网页,并对网页内容进行解析。
数据爬取装置向主存服务器请求当前待处理URL,所请求的当前待处理URL可以为主存数据库中的全部待处理数据,也可以为主存数据库中的部分待处理数据。然后将所获取到的当前待处理URL进行备份,并同步将备份的URL存储在数据缓存中。
例如,在主存数据库中存储有URL1、URL2、…、URL9,数据爬取装置向主存服务器请求其中的URL1~URL3,并将URL1~URL3备份到预先创建的数据缓存中。
S202,获取爬虫程序启动标识,当所述爬虫程序启动标识为第一标识时,判断预设的数据缓存中是否存在当前待处理数据,所述第一标识指示所述爬虫程序首次启动;
爬虫程序是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。其主要功能是自动从网络上的各Web站点抓取Web文档并从该Web文档中提取一些信息来描述该Web文档,为搜索引擎站点的数据库服务器追加和更新数据提供原始数据,这些数据包括标题、长度、文件建立时间、HTML文件中的各种链接数目等。
所述爬虫程序启动标识指用于标识爬虫程序是否为首次启动的值,可以包括首次启动标识和非首次启动标识。如,首次启动时,标识为first=true,非首次启动时,标识为first=false。又如,首次启动时,标识为first=1,非首次启动时,标识为first=0。
其中,首次启动可以为爬虫程序首次开启,也可以为爬虫程序在执行时中断并再次开启。
当确定爬虫程序首次启动时,则直接查询数据缓存中是否存在当前待处理的URL(如URL1、URL2或URL3等),并基于查询结果从而可确定当前次首次启动为爬虫程序的首次开启还是爬虫程序中断后的启动。其中,所述数据缓存可以为缓存Redis。
S203,若所述预设的数据缓存中存在所述当前待处理数据,则从预设的数据缓存中获取当前待处理数据;
当确定在数据缓存中存在当前待处理数据时,表明该首次启动为爬虫程序中断后的启动,则直接在缓存中读取该待处理数据,并将该待处理数据插入到队列尾部进行排队处理。
可选的,若所述预设的数据缓存中不存在所述当前待处理数据,表明该首次启动为爬虫程序首次开启,此时数据缓存为空,则向主存服务器获取当前待处理数据,并将所述当前待处理数据备份至预设的数据缓存中。其中,所获取的当前待处理数据用于插入到队列尾部进行处理,而备份的当前待处理数据是用于在爬虫程序中断时当前待处理数据丢失从而可以直接从备份中读取数据。
S204,将所述当前待处理数据备份至所述预设的数据缓存中,并将所述当前待处理数据存放至内存数组中;
当确定在数据缓存中存在当前待处理数据时,还需要对该待处理数据再次进行备份,以防在之前备份的当前待处理数据存放到队列尾部后,一旦爬虫程序再次中断,则通过再次备份可以防止当前待处理数据的丢失。
需要说明的是,数据备份即为在将当前待处理数据存放至内存数组之前,可以理解为,在数据缓存中读取当前待处理数据,并对该当前待处理数据进行备份,然后将当前待处理数据存放至内存数组中进行处理。即两份相同的数据,一份在数据缓存中存储,一份存放到内存数据中进行处理。
S205,获取所述内存数组的数组长度;
数组长度,即内存数组中堆内存所占的字节数,可通过访问函数获取数组长度。
S206,当所述数组长度大于或者等于所述爬虫程序中预设线程的个数时,采用所述预设线程爬取所述内存数组中的待处理数据;
线程,是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针,寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。
每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。线程是程序中一个单一的顺序控制流程。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
对于数据爬取装置上的爬虫程序,可包括至少一个线程。通过将所获取的数组长度与线程个数进行比较,当数组长度大于或者等于线程的个数时,每个线程都可以读取对应的值,拷贝到自己线程变量中进行处理。
例如,数组长度为3,线程个数为3,则此时各线程爬取内存数据中的待处理数据进行处理。
S207,当所述数组长度小于所述预设线程的个数时,从所述数据缓存中获取所述当前待处理数据的下一个待处理数据;
当数组长度小于线程的个数时,还需要继续在数据缓存中读取待处理数据存放至内存数组中,直到数组长度大于或者等于线程的个数。
S208,将所述当前待处理数据的下一个待处理数据存放至所述内存数组中,并执行所述获取所述内存数组的数组长度的步骤。
S209,清除所述数据缓存,并将所述爬虫程序启动标识设置为第二标识,所述第二标识指示所述当前爬虫程序非首次启动;
当获取的待处理数据已全部存放至内存数据中时,表明缓存数据已读取完毕时,则将所述爬虫程序启动标识设置为第二标识,从而方便数据爬取装置基于该第二标识获取下一批次的待处理数据。第二标识即为爬虫程序非首次启动标识,如,first=false,或者first=0。
同时,清除数据缓存中所备份的数据,以方便存储向主存服务器获取的下一批次待处理数据。
S210,将所述当前待处理数据的下一批次待处理数据确定为当前待处理数据,并转入执行所述向主存服务器获取当前待处理数据的步骤;
在当前待处理数据爬取完成后,继续向主存服务器采用相同的方式爬取下一批次的待处理数据。
具体爬取过程可参见S201~S209,此处不再赘述。
S211,当检测到所述下一批次待处理数据为空时,退出所述爬虫程序。
在确定下一匹配待处理数据为空时,表明主存Redis已没有待处理数据,当前任务执行完成,则退出爬虫程序。
本申请实施例的方案在执行时,数据爬取装置(子节点)获取爬虫程序启动标识,当所述爬虫程序启动标识指示所述爬虫程序首次启动时,从预设的数据缓存中获取当前待处理数据,将所述当前待处理数据存放至内存数组中,并采用所述爬虫程序爬取所述内存数组中的待处理数据。即使在爬虫程序意外中断时,可以从数据缓存中获取所请求的当前待处理数据,增加了容错性,避免正在爬取的待处理数据丢失。同时,基于Redis的数据存储机制,其数据读写效率相较于将数据备份到本地磁盘更高。另外,Redis的内存数据存储是基于队列的,在子节点进行数据的读取时,不用维护队列的下标,利于多进程操作。
下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
请参见图5,其示出了本申请一个示例性实施例提供的数据爬取装置的结构示意图。该数据爬取装置可以通过软件、硬件或者两者的结合实现成为终端的全部或一部分。该装置10包括标识获取模块101、数据获取模块102和数据爬取模块103。
标识获取模块101,用于获取爬虫程序启动标识;
数据获取模块102,用于当所述爬虫程序启动标识为第一标识时,从预设的数据缓存中获取当前待处理数据,所述第一标识指示所述爬虫程序首次启动;
数据爬取模块103,用于将所述当前待处理数据存放至内存数组中,采用所述爬虫程序爬取所述内存数组中的待处理数据。
可选的,如图6所示,所述装置10还包括:
缓存判断模块104,用于判断预设的数据缓存中是否存在当前待处理数据;
第一数据备份模块105,用于若所述预设的数据缓存中不存在所述当前待处理数据,则向主存服务器获取当前待处理数据,并将所述当前待处理数据备份至预设的数据缓存中。
可选的,所述数据获取模块102,具体用于:
若所述预设的数据缓存中存在所述当前待处理数据,则从预设的数据缓存中获取当前待处理数据。
可选的,如图6所示,所述装置10还包括:
第二数据备份模块106,用于向主存服务器获取当前待处理数据,将所述当前待处理数据备份至预设的数据缓存中。
可选的,如图6所示,所述装置10还包括:
第三数据备份模块107,用于将所述当前待处理数据备份至所述预设的数据缓存中。
可选的,如图6所示,所述装置10还包括:
缓存清除模块108,用于清除所述数据缓存。
可选的,如图6所示,所述装置10还包括:
标识设置模块109,用于将所述爬虫程序启动标识设置为第二标识,所述第二标识指示所述当前爬虫程序非首次启动。
可选的,如图6所示,所述装置10还包括:
数据设置模块110,用于将所述当前待处理数据的下一批次待处理数据确定为当前待处理数据,并触发数据获取模块向主存服务器获取当前待处理数据;
程序退出模块111,用于当检测到所述下一批次待处理数据为空时,退出所述爬虫程序。
可选的,如图7所示,所述数据爬取模块103,包括:
长度获取单元1031,用于获取所述内存数组的数组长度;
数据爬取单元1032,用于当所述数组长度大于或者等于所述爬虫程序中预设线程的个数时,采用所述预设线程爬取所述内存数组中的待处理数据。
可选的,如图7所示,所述数据爬取模块103,还包括:
数据获取单元1033,用于当所述数组长度小于所述预设线程的个数时,从所述数据缓存中获取所述当前待处理数据的下一个待处理数据;
数据存放单元1034,用于将所述当前待处理数据的下一个待处理数据存放至所述内存数组中,并触发所述长度获取单元获取所述内存数组的数组长度。
需要说明的是,上述实施例提供的数据爬取装置在执行数据爬取方法时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据爬取装置与数据爬取方法实施例属于同一构思,其体现实现过程详见方法实施例,这里不再赘述。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
本申请实施例的方案在执行时,数据爬取装置(子节点)获取爬虫程序启动标识,当所述爬虫程序启动标识指示所述爬虫程序首次启动时,从预设的数据缓存中获取当前待处理数据,将所述当前待处理数据存放至内存数组中,并采用所述爬虫程序爬取所述内存数组中的待处理数据。即使在爬虫程序意外中断时,可以从数据缓存中获取所请求的当前待处理数据,增加了容错性,避免正在爬取的待处理数据丢失。同时,基于Redis的数据存储机制,其数据读写效率相较于将数据备份到本地磁盘更高。另外,Redis的内存数据存储是基于队列的,在子节点进行数据的读取时,不用维护队列的下标,利于多进程操作。
本申请实施例还提供了一种计算机存储介质,所述计算机存储介质可以存储有多条指令,所述指令适于由处理器加载并执行如上述图2-图4所示实施例的方法步骤,具体执行过程可以参见图2-图4所示实施例的具体说明,在此不进行赘述。
本申请还提供了一种计算机程序产品,该计算机程序产品存储有至少一条指令,所述至少一条指令由所述处理器加载并执行以实现如上各个实施例所述的焦点状态刷新方法。
请参见图8,为本申请实施例提供了一种服务器的结构示意图。如图8所示,所述服务器1000可以包括:至少一个处理器1001,至少一个网络接口1004,用户接口1003,存储器1005,至少一个通信总线1002。
其中,通信总线1002用于实现这些组件之间的连接通信。
其中,用户接口1003可以包括显示屏(Display)、摄像头(Camera),可选用户接口1003还可以包括标准的有线接口、无线接口。
其中,网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。
其中,处理器1001可以包括一个或者多个处理核心。处理器1001利用各种借口和线路连接整个服务器1000内的各个部分,通过运行或执行存储在存储器1005内的指令、程序、代码集或指令集,以及调用存储在存储器1005内的数据,执行服务器1000的各种功能和处理数据。可选的,处理器1001可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable Logic Array,PLA)中的至少一种硬件形式来实现。处理器1001可集成中央处理器(Central Processing Unit,CPU)、图像处理器(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示屏所需要显示的内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器1001中,单独通过一块芯片进行实现。
其中,存储器1005可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。可选的,该存储器1005包括非瞬时性计算机可读介质(non-transitory computer-readable storage medium)。存储器1005可用于存储指令、程序、代码、代码集或指令集。存储器1005可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现上述各个方法实施例的指令等;存储数据区可存储上面各个方法实施例中涉及到的数据等。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图8所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及数据爬取应用程序。
在图8所示的服务器1000中,用户接口1003主要用于为用户提供输入的接口,获取用户输入的数据;而处理器1001可以用于调用存储器1005中存储的数据爬取应用程序,并具体执行以下操作:
获取爬虫程序启动标识;
当所述爬虫程序启动标识为第一标识时,从预设的数据缓存中获取当前待处理数据,所述第一标识指示所述爬虫程序首次启动;
将所述当前待处理数据存放至内存数组中,采用所述爬虫程序爬取所述内存数组中的待处理数据。
在一个实施例中,所述处理器1001在执行当所述爬虫程序启动标识为第一标识时之后,还执行以下操作:
判断预设的数据缓存中是否存在当前待处理数据;
若所述预设的数据缓存中不存在所述当前待处理数据,则向主存服务器获取当前待处理数据,并将所述当前待处理数据备份至预设的数据缓存中。
在一个实施例中,所述处理器1001还执行以下操作:
若所述预设的数据缓存中存在所述当前待处理数据,则执行所述从预设的数据缓存中获取当前待处理数据的步骤。
在一个实施例中,所述处理器1001在执行获取爬虫程序启动标识之前,还执行以下操作:
向主存服务器获取当前待处理数据,将所述当前待处理数据备份至预设的数据缓存中。
在一个实施例中,所述处理器1001在执行从预设的数据缓存中获取当前待处理数据之后,还执行以下操作:
将所述当前待处理数据备份至所述预设的数据缓存中。
在一个实施例中,所述处理器1001在执行采用所述爬虫程序爬取所述内存数组中的待处理数据之后,还执行以下操作:
清除所述数据缓存。
在一个实施例中,所述处理器1001在执行采用所述爬虫程序爬取所述内存数组中的待处理数据之后之后,还执行以下操作:
将所述爬虫程序启动标识设置为第二标识,所述第二标识指示所述当前爬虫程序非首次启动。
在一个实施例中,所述处理器1001在执行清空所述数据缓存之后,还执行以下操作:
将所述当前待处理数据的下一批次待处理数据确定为当前待处理数据,并转入执行所述向主存服务器获取当前待处理数据的步骤;
当检测到所述下一批次待处理数据为空时,退出所述爬虫程序。
在一个实施例中,所述处理器1001在执行采用所述爬虫程序爬取所述内存数组中的待处理数据时,具体执行以下操作:
获取所述内存数组的数组长度;
当所述数组长度大于或者等于所述爬虫程序中预设线程的个数时,采用所述预设线程爬取所述内存数组中的待处理数据。
在一个实施例中,所述处理器1001还执行以下操作:
当所述数组长度小于所述预设线程的个数时,从所述数据缓存中获取所述当前待处理数据的下一个待处理数据;
将所述当前待处理数据的下一个待处理数据存放至所述内存数组中,并执行所述获取所述内存数组的数组长度的步骤。
本申请实施例的方案在执行时,数据爬取装置(子节点)获取爬虫程序启动标识,当所述爬虫程序启动标识指示所述爬虫程序首次启动时,从预设的数据缓存中获取当前待处理数据,将所述当前待处理数据存放至内存数组中,并采用所述爬虫程序爬取所述内存数组中的待处理数据。即使在爬虫程序意外中断时,可以从数据缓存中获取所请求的当前待处理数据,增加了容错性,避免正在爬取的待处理数据丢失。同时,基于Redis的数据存储机制,其数据读写效率相较于将数据备份到本地磁盘更高。另外,Redis的内存数据存储是基于队列的,在子节点进行数据的读取时,不用维护队列的下标,利于多进程操作。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体或随机存储记忆体等。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。
Claims (22)
1.一种数据爬取方法,其特征在于,所述方法包括:
获取爬虫程序启动标识;
当所述爬虫程序启动标识为第一标识时,从预设的数据缓存中获取当前待处理数据,所述第一标识指示所述爬虫程序首次启动;
将所述当前待处理数据存放至内存数组中,采用所述爬虫程序爬取所述内存数组中的待处理数据。
2.根据权利要求1所述的方法,其特征在于,所述当所述爬虫程序启动标识为第一标识时之后,还包括:
判断预设的数据缓存中是否存在当前待处理数据;
若所述预设的数据缓存中不存在所述当前待处理数据,则向主存服务器获取当前待处理数据,并将所述当前待处理数据备份至所述预设的数据缓存中。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
若所述预设的数据缓存中存在所述当前待处理数据,则执行所述从预设的数据缓存中获取当前待处理数据的步骤。
4.根据权利要求3所述的方法,其特征在于,所述获取爬虫程序启动标识之前,还包括:
向主存服务器获取当前待处理数据,将所述当前待处理数据备份至预设的数据缓存中。
5.根据权利要求4所述的方法,其特征在于,所述从预设的数据缓存中获取当前待处理数据之后,还包括:
将所述当前待处理数据备份至所述预设的数据缓存中。
6.根据权利要求5所述的方法,其特征在于,所述采用所述爬虫程序爬取所述内存数组中的待处理数据之后,还包括:
清除所述数据缓存。
7.根据权利要求5所述的方法,其特征在于,所述采用所述爬虫程序爬取所述内存数组中的待处理数据之后,还包括:
将所述爬虫程序启动标识设置为第二标识,所述第二标识指示所述当前爬虫程序非首次启动。
8.根据权利要求6所述的方法,其特征在于,所述清空所述数据缓存之后,还包括:
将所述当前待处理数据的下一批次待处理数据确定为当前待处理数据,并转入执行所述向主存服务器获取当前待处理数据的步骤;
当检测到所述下一批次待处理数据为空时,退出所述爬虫程序。
9.根据权利要求1所述的方法,其特征在于,所述采用所述爬虫程序爬取所述内存数组中的待处理数据,包括:
获取所述内存数组的数组长度;
当所述数组长度大于或者等于所述爬虫程序中预设线程的个数时,采用所述预设线程爬取所述内存数组中的待处理数据。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
当所述数组长度小于所述预设线程的个数时,从所述数据缓存中获取所述当前待处理数据的下一个待处理数据;
将所述当前待处理数据的下一个待处理数据存放至所述内存数组中,并执行所述获取所述内存数组的数组长度的步骤。
11.一种数据爬取装置,其特征在于,所述装置包括:
标识获取模块,用于获取爬虫程序启动标识;
数据获取模块,用于当所述爬虫程序启动标识为第一标识时,从预设的数据缓存中获取当前待处理数据,所述第一标识指示所述爬虫程序首次启动;
数据爬取模块,用于将所述当前待处理数据存放至内存数组中,采用所述爬虫程序爬取所述内存数组中的待处理数据。
12.根据权利要求11所述的装置,其特征在于,所述装置,还包括:
缓存判断模块,用于判断预设的数据缓存中是否存在当前待处理数据;
第一数据备份模块,用于若所述预设的数据缓存中不存在所述当前待处理数据,则向主存服务器获取当前待处理数据,并将所述当前待处理数据备份至所述预设的数据缓存中。
13.根据权利要求12所述的装置,其特征在于,所述数据获取模块具体用于:
若所述预设的数据缓存中存在所述当前待处理数据,则从预设的数据缓存中获取当前待处理数据。
14.根据权利要求13所述的装置,其特征在于,所述装置,还包括:
第二数据备份模块,用于向主存服务器获取当前待处理数据,将所述当前待处理数据备份至预设的数据缓存中。
15.根据权利要求14所述的装置,其特征在于,所述装置,还包括:
第三数据备份模块,用于将所述当前待处理数据备份至所述预设的数据缓存中。
16.根据权利要求15所述的装置,其特征在于,所述装置,还包括:
缓存清除模块,用于清除所述数据缓存。
17.根据权利要求15所述的装置,其特征在于,所述装置,还包括:
标识设置模块,用于将所述爬虫程序启动标识设置为第二标识,所述第二标识指示所述当前爬虫程序非首次启动。
18.根据权利要求16所述的装置,其特征在于,所述装置,还包括:
数据设置模块,用于将所述当前待处理数据的下一批次待处理数据确定为当前待处理数据,并触发所述数据获取模块向主存服务器获取当前待处理数据;
程序退出模块,用于当检测到所述下一批次待处理数据为空时,退出所述爬虫程序。
19.根据权利要求11所述的装置,其特征在于,所述数据爬取模块,包括:
长度获取单元,用于获取所述内存数组的数组长度;
数据爬取单元,用于当所述数组长度大于或者等于所述爬虫程序中预设线程的个数时,采用所述预设线程爬取所述内存数组中的待处理数据。
20.根据权利要求19所述的装置,其特征在于,所述数据爬取模块,还包括:
数据获取单元,用于当所述数组长度小于所述预设线程的个数时,从所述数据缓存中获取所述当前待处理数据的下一个待处理数据;
数据存放单元,用于将所述当前待处理数据的下一个待处理数据存放至所述内存数组中,并执行所述获取所述内存数组的数组长度的步骤。
21.一种计算机存储介质,其特征在于,所述计算机存储介质存储有多条指令,所述指令适于由处理器加载并执行如权利要求1~10任意一项的方法步骤。
22.一种服务器,其特征在于,包括:处理器和存储器;其中,所述存储器存储有计算机程序,所述计算机程序适于由所述处理器加载并执行如权利要求1~10任意一项的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910205518.1A CN109992707A (zh) | 2019-03-18 | 2019-03-18 | 一种数据爬取方法、装置、存储介质及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910205518.1A CN109992707A (zh) | 2019-03-18 | 2019-03-18 | 一种数据爬取方法、装置、存储介质及服务器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109992707A true CN109992707A (zh) | 2019-07-09 |
Family
ID=67130329
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910205518.1A Pending CN109992707A (zh) | 2019-03-18 | 2019-03-18 | 一种数据爬取方法、装置、存储介质及服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109992707A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112612939A (zh) * | 2020-12-18 | 2021-04-06 | 山东中创软件工程股份有限公司 | 一种爬虫部署方法、系统、装置、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101635718A (zh) * | 2009-08-26 | 2010-01-27 | 中兴通讯股份有限公司 | 网络爬虫系统及其获取资源的方法和网络资源抓取装置 |
CN109033195A (zh) * | 2018-06-28 | 2018-12-18 | 上海盛付通电子支付服务有限公司 | 网页信息的获取方法、获取设备及计算机可读介质 |
-
2019
- 2019-03-18 CN CN201910205518.1A patent/CN109992707A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101635718A (zh) * | 2009-08-26 | 2010-01-27 | 中兴通讯股份有限公司 | 网络爬虫系统及其获取资源的方法和网络资源抓取装置 |
CN109033195A (zh) * | 2018-06-28 | 2018-12-18 | 上海盛付通电子支付服务有限公司 | 网页信息的获取方法、获取设备及计算机可读介质 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112612939A (zh) * | 2020-12-18 | 2021-04-06 | 山东中创软件工程股份有限公司 | 一种爬虫部署方法、系统、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11860874B2 (en) | Multi-partitioning data for combination operations | |
US11328114B2 (en) | Batch-optimized render and fetch architecture | |
US11151137B2 (en) | Multi-partition operation in combination operations | |
US20200257691A1 (en) | Executing untrusted commands from a distributed execution model | |
US20200050586A1 (en) | Query execution at a remote heterogeneous data store of a data fabric service | |
CN103970788A (zh) | 一种基于网页爬取的爬虫技术 | |
EP0898754B1 (en) | Information retrieval in cache database | |
CN109600385B (zh) | 一种访问控制方法及装置 | |
CN105260388A (zh) | 一种分布式垂直爬虫服务系统的优化方法 | |
US11748029B2 (en) | Protecting writes to shared storage in a distributed search system | |
CN113656673A (zh) | 面向广告投放的主从分布内容爬取机器人 | |
US8407713B2 (en) | Infrastructure of data summarization including light programs and helper steps | |
JP2002108671A (ja) | コンピュータ処理システムにおいてカスタマイズした情報を提供する方法とシステム | |
CN113703867A (zh) | 一种无服务计算中加速启动方法及系统 | |
JP6568985B2 (ja) | バッチ最適化レンダリング及びフェッチアーキテクチャ | |
US20180300132A1 (en) | Method and system for restructuring of collections for synchronization | |
CN109992707A (zh) | 一种数据爬取方法、装置、存储介质及服务器 | |
CN111444412B (zh) | 网络爬虫任务的调度方法及装置 | |
Cannon et al. | Automated object persistence for JavaScript | |
CN110020297A (zh) | 一种网页内容的加载方法、装置及系统 | |
CN102333123B (zh) | 文件存储方法、设备、查找方法、设备和网络设备 | |
CN114756362A (zh) | 资源配额管理方法及系统、智能终端、存储介质 | |
RU2490702C1 (ru) | Способ ускорения обработки множественных запросов типа select к rdf базе данных с помощью графического процессора | |
US11017032B1 (en) | Document recovery utilizing serialized data | |
Bui et al. | Fast distributed evaluation of stateful attribute-based access control policies |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190709 |
|
RJ01 | Rejection of invention patent application after publication |