CN109933706A - 一种数据获取方法、装置、电子设备及存储介质 - Google Patents
一种数据获取方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN109933706A CN109933706A CN201910251969.9A CN201910251969A CN109933706A CN 109933706 A CN109933706 A CN 109933706A CN 201910251969 A CN201910251969 A CN 201910251969A CN 109933706 A CN109933706 A CN 109933706A
- Authority
- CN
- China
- Prior art keywords
- data
- request
- crawled
- link
- crawls
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种数据获取方法、装置、电子设备及存储介质,该方法包括:集群中的每个处理模块都可以从分布式队列中获取爬取请求,处理模块根据获取到的爬取请求爬取数据后,如果数据中仍包括链接,则可以继续将该链接封装成新的爬取请求,将该新的爬取请求投递至分布式队列中,这样,各处理模块可以并行爬取数据,提高了爬取效率。
Description
技术领域
本申请涉及网络爬虫技术领域,特别是涉及一种数据获取方法、装置、电子设备及存储介质。
背景技术
网络中的数据量越来越大,仅通过人工搜索、肉眼解析已经远不能有效的利用网络中的数据。目前,一般通过网络爬虫爬取网络中的数据。网络爬虫(又被称为网页蜘蛛,网络机器人等),是一种按照一定的规则,自动爬取网络中数据的程序或者脚本。
一些相关的网络爬虫一般基于单台设备在网络中爬取数据,这样,爬取数据的效率较低。
发明内容
本申请实施例的目的在于提供一种数据获取方法、装置、电子设备及存储介质,以提高爬取效率。
为达到上述目的,本申请实施例提供了一种数据获取方法,应用于集群中的每个处理模块,所述集群中包括多个处理模块,所述方法包括:
从分布式队列中获取爬取请求;
根据所获取的爬取请求爬取数据;
将所爬取的数据中包括的链接封装为新的爬取请求;
将所述新的爬取请求投递至所述分布式队列中。
可选的,所述将所爬取的数据中包括的链接封装为新的爬取请求,包括:
读取所爬取的数据中的链接,作为待处理链接;
获取所述待处理链接对应的用户代理信息;
将所获取的用户代理信息和所述待处理链接封装为新的爬取请求。
可选的,所述获取所述待处理链接对应的用户代理信息,包括:
从所述集群的数据池中获取以下任意一种或多种所述待处理链接对应的用户代理信息:代理IP、Cookie、源请求方信息、代理浏览器信息。
可选的,所述根据所获取的爬取请求爬取数据,包括:对所述爬取请求进行校验,若所述爬取请求通过校验,则根据所述爬取请求爬取数据;
和/或,在所述根据所获取的爬取请求爬取数据之后,还包括:
对所爬取的数据进行校验,删除未通过校验的数据。
可选的,在所述对所述爬取请求进行校验之后,还包括:
记录所述爬取请求的校验结果,作为第一校验结果;若所述爬取请求未通过校验,则基于所述第一校验结果,判断所述爬取请求未通过校验的次数是否小于第一预设阈值;如果小于,返回执行所述对所述爬取请求进行校验的步骤;
在所述对所爬取的数据进行校验之后,还包括:记录所爬取的数据的校验结果,作为第二校验结果;
所述删除未通过校验的数据,包括:若所爬取的数据未通过校验,则基于所述第二校验结果,判断所爬取的数据未通过校验的次数是否小于第二预设阈值;如果小于,返回执行所述对所爬取的数据进行校验的步骤;如果不小于,删除所爬取的数据。
可选的,所述对所述爬取请求进行校验,包括:对所述爬取请求进行以下任意一种或多种校验处理:去重处理、黑名单过滤;
所述对所爬取的数据进行校验,包括:对所爬取的数据进行以下任意一种或多种校验处理:去重处理、黑名单过滤。
可选的,在所述根据所获取的爬取请求爬取数据之后,还包括:
对所爬取的数据进行结构化处理,得到结构化数据,作为爬取结果。
为达到上述目的,本申请实施例还提供了一种数据获取装置,应用于集群中,所述装置包括:初始模块和多个爬取模块,其中,
所述初始模块,被配置为接收爬取指令,读取所述爬取指令中的初始链接;将所述初始链接封装为爬取请求;将所述爬取请求发送至分布式队列;
每个爬取模块,被配置为从所述分布式队列中获取爬取请求;根据所获取的爬取请求爬取数据;读取所爬取的数据中的链接,作为待处理链接;将所述待处理链接发送至所述初始模块;
所述初始模块,还被配置为将所述待处理链接封装为新的爬取请求,并将所述新的爬取请求投递至所述分布式队列中。
可选的,所述初始模块,还被配置为:
获取所述初始链接对应的用户代理信息,将所获取的用户代理信息和所述初始链接封装为爬取请求;
获取所述待处理链接对应的用户代理信息,将所获取的用户代理信息和所述待处理链接封装为新的爬取请求。
可选的,所述装置还包括:
中间层模块,被配置为从所述集群的数据池中获取以下任意一种或多种用户代理信息:代理IP、Cookie、源请求方信息、代理浏览器信息,将所获取的用户代理信息发送至所述初始模块。
可选的,所述中间层模块,还被配置为:
对爬取请求进行校验,若爬取请求通过校验,则将所述爬取请求发送至所述爬取模块;
对所述爬取模块爬取的数据进行校验,删除未通过校验的数据。
可选的,所述中间层模块,还被配置为:
记录所述爬取请求的校验结果,作为第一校验结果;若所述爬取请求未通过校验,则基于所述第一校验结果,判断所述爬取请求未通过校验的次数是否小于第一预设阈值;如果小于,返回执行所述对所述爬取请求进行校验的步骤;如果大于,删除所述爬取请求;
记录所爬取的数据的校验结果,作为第二校验结果;若所爬取的数据未通过校验,则基于所述第二校验结果,判断所爬取的数据未通过校验的次数是否小于第二预设阈值;如果小于,返回执行所述对所爬取的数据进行校验的步骤;如果不小于,删除所爬取的数据。
可选的,所述中间层模块,还被配置为:
对所述爬取请求进行以下任意一种或多种校验处理:去重处理、黑名单过滤;
对所爬取的数据进行以下任意一种或多种校验处理:去重处理、黑名单过滤。
可选的,所述装置还包括:
导管模块,被配置为对所述爬取模块爬取的数据进行结构化处理,得到结构化数据;将所述结构化数据存储至所述集群的数据库中。
为达到上述目的,本申请实施例还提供了一种电子设备,包括处理器和用于存储处理器可执行指令的存储器;其中,所述处理器被配置为实现上述任一种数据获取方法。
为达到上述目的,本申请实施例还提供了一种非临时性计算机可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备执行上述任一种数据获取方法。
为达到上述目的,本申请实施例还提供了一种计算机程序产品,当所述计算机程序产品中的指令由电子设备的处理器执行时,使得电子设备执行上述任一种数据获取方法。
应用本申请实施例,集群中的每个处理模块都可以从分布式队列中获取爬取请求,处理模块根据获取到的爬取请求爬取数据后,如果数据中仍包括链接,则可以继续将该链接封装成新的爬取请求,将该新的爬取请求投递至分布式队列中,这样,各处理模块可以并行爬取数据,提高了爬取效率。
一些相关方案中,单台服务器只能对自身的数据进行处理,比如服务器根据爬取请求爬取数据,如果自身爬取的数据中包括链接,则继续爬取该链接指向的数据,直到爬取的数据中不存在链接的情况下,爬取结束;之后等待处理下一次爬取请求。本申请实施例中,采用分布式队列作为中心节点,各处理模块都可以从分布式队列中获取爬取请求,并根据该爬取请求爬取数据,如果爬取的数据中包括链接,则将该链接再次封装为新的爬取请求,将该新的爬取请求投递回该分布式队列;这样,可以认为各处理模块组成了服务器集群,达到了服务器集群共同为一个或多个爬取请求爬取数据的效果,对于一个爬取请求来说,由服务器集群共同对其进行处理,相比于由单台服务器对其进行处理,较大程度地提高了爬取效率。
另外一些相关方案中,比如基于Scrapy框架的网络爬虫,大多使用基于内存的调度队列,而本方案中使用的是分布式队列,相比于基于内存的调度队列,分布式队列能够通过后进先出、设定优先级的方式,使得新数据、高优先级的数据被及时处理,这样的处理方式更合理。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种数据获取方法的流程示意图;
图2为本申请实施例提供的一种数据获取装置的结构示意图;
图3为本申请实施例提供的另一种数据获取装置的结构示意图;
图4是根据一示例性实施例示出的一种电子设备的结构示意图;
图5是根据一示例性实施例示出的另一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了解决上述技术问题,本申请实施例提供了一种数据获取方法、装置、电子设备及存储介质。该数据获取方法可以应用于集群中的每个处理模块,该处理模块可以为虚拟模块,也可以为实体设备,具体不做限定。举例来说,一个处理模块可以为一台或多台服务器;或者,也可以由多台服务器组成一个服务器集群,然后再将该服务器集群划分为多个处理模块,这种情况下,服务器与处理模块可以为一对一、多对一、一对多、多对多的对应关系。每个处理模块的处理流程类似,下面以一个处理模块为例,对本申请实施例提供的数据获取方法进行详细介绍。
图1为本申请实施例提供的一种数据获取方法的流程示意图,包括:
S101:从分布式队列中获取爬取请求。
一种实施方式中,爬取请求可以包括待爬取链接和用户信息。该用户代理信息可以包括以下任意一种或多种:代理IP、Cookie、源请求方信息、代理浏览器信息。
代理IP可以理解为数据爬取过程中对外提供的伪IP。Cookie通常指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地终端上的数据,如果爬取请求中包括某网站的Cookie,则根据该爬取请求爬取该网站数据的成功率较高。源请求方信息可以理解为发送爬取指令的用户信息。一些情况下,只能通过指定浏览器才能访问一些网站的数据,这种情况下,如果爬取请求中包括该指定浏览器的信息,也就是代理浏览器信息,则根据该爬取请求爬取该网站数据的成功率较高。
举例来说,用户可以向集群发送爬取指令,该指令中可以携带初始链接。一种实施方式中,处理模块可以获取该初始链接对应的用户代理信息,该用户代理信息可以包括以下任意一种或多种:代理IP、Cookie、源请求方信息、代理浏览器信息。然后处理模块将所获取的用户代理信息与该初始链接封装为爬取请求。
封装得到的爬取请求可以被投递至分布式队列中。集群中的各处理模块可以从分布式队列中获取爬取请求。一种情况下,可以将分布式队列理解为一种具备读写操作能力的“存储器”,该“存储器”可以不属于集群。或者,该“存储器”也可以属于集群,具体不做限定。
S102:根据所获取的爬取请求爬取数据。
对于每个处理模块来说,其从分布式队列中获取爬取请求后,根据该爬取请求,可以从互联网或者其他网络或者其他存储空间中爬取数据。
一种实施方式中,可以先对S101中获取的爬取请求进行校验,若所述爬取请求通过校验,再执行S102。
举例来说,校验可以包括:去重处理、黑名单过滤等等,具体不做限定。去重处理也就是删除重复的爬取请求,减少重复爬取,提高爬取效率。黑名单过滤,可以理解为,预先设定黑名单,比如,黑名单中可以包括一些不需要爬取的网站链接,如果爬取请求中包括黑名单中的链接,则该爬取请求不能通过校验。
举例来说,如果爬取请求与其他爬取请求重复,或者爬取请求中包括黑名单中的链接,则爬取请求不能通过校验。一种情况下,可以将未通过校验的爬取请求直接删除。或者,对于未通过校验的爬取请求来说,也可以不将其删除,但也不再基于这种爬取请求爬取数据。
或者,另一种情况下,可以对未通过校验的爬取请求进行多次校验,如果爬取请求未通过校验的次数达到阈值,再删除该爬取请求。或者,对于未通过校验的次数达到阈值的爬取请求来说,也可以不将其删除,但也不再基于这种爬取请求爬取数据。
这种情况下,可以记录爬取请求的校验结果,作为第一校验结果;若所述爬取请求未通过校验,则基于所述第一校验结果,判断所述爬取请求未通过校验的次数是否小于第一预设阈值;如果小于,返回执行所述对所述爬取请求进行校验的步骤。
一种实施方式中,可以在S102之后,对所爬取的数据进行校验,删除未通过校验的数据。
举例来说,校验可以包括:去重处理、黑名单过滤等等,具体不做限定。去重处理也就是删除重复的数据。黑名单过滤,可以理解为,预先设定黑名单,比如,黑名单中可以包括一些不需要爬取的数据类型,如果S102中爬取的数据的类型与黑名单中的数据类型相同或相似,则该爬取的数据不能通过校验。
举例来说,如果爬取的数据重复,或者爬取的数据的类型与黑名单中的数据类型相同或相似,则爬取的数据不能通过校验。一种情况下,可以将未通过校验的数据直接删除。或者,对于未通过校验的数据来说,也可以不将其删除,但也不将这种数据作为爬取结果。
或者,另一种情况下,可以对未通过校验的数据进行多次校验,如果数据未通过校验的次数达到阈值,再删除该数据。或者,对于未通过校验的次数达到阈值的数据来说,也可以不将其删除,但也不将这种数据作为爬取结果。
这种情况下,可以记录所爬取的数据的校验结果,作为第二校验结果;若所爬取的数据未通过校验,则基于所述第二校验结果,判断所爬取的数据未通过校验的次数是否小于第二预设阈值;如果小于,返回执行所述对所爬取的数据进行校验的步骤;如果不小于,删除所爬取的数据。
S103:将所爬取的数据中包括的链接封装为新的爬取请求。
如上所述,爬取请求中包括链接和用户代理信息,一种情况下,处理模块可以读取所爬取的数据中的链接,作为待处理链接;获取待处理链接对应的用户代理信息;将所获取的用户代理信息和所述待处理链接封装为新的爬取请求。
爬取的数据中通常包括多层嵌套的链接。举例来说,假设上述初始链接为A网站的主网址,根据包括该初始链接的爬取请求,爬取到A网站的全部数据。该全部数据中包括A网站下的子网站的链接A1、A2和A3,则分别将链接A1、A2和A3作为待处理链接:获取链接A1对应的用户代理信息,将链接A1对应的用户代理信息与链接A1封装为新的爬取请求1;获取链接A2对应的用户代理信息,将链接A2对应的用户代理信息与链接A2封装为新的爬取请求2;获取链接A3对应的用户代理信息,将链接A3对应的用户代理信息与链接A3封装为新的爬取请求3。
一种情况下,处理模块可以从集群的数据池中获取以下任意一种或多种所述待处理链接对应的用户代理信息:代理IP、Cookie、源请求方信息、代理浏览器信息。前面内容中已经对用户代理信息进行过介绍,这里不再赘述。
S104:将该新的爬取请求投递至分布式队列中。
延续上述例子,将封装得到的新的爬取请求1-3都投递至分布式队列中。集群中的各处理模块继续从分布式队列中获取爬取请求。
作为一种实施方式,在S102之后,还可以对所爬取的数据进行结构化处理,得到结构化数据,作为爬取结果。
一种情况下,可以直接将S102中爬取的数据作为爬取结果。另一种情况下,也可以对S102中爬取的数据进行结构化处理。结构化处理可以理解为,将爬取的数据处理成预设结构的数据,这里称为结构化数据。然后将结构化数据作为爬取结果。或者,另一种情况下,也可以先对S102中爬取的数据进行过滤处理,过滤处理也就是过滤掉一些不符合业务需求的数据,然后对过滤后的数据再进行结构化处理。
应用本申请图1所示实施例,集群中的每个处理模块都可以从分布式队列中获取爬取请求,处理模块根据获取到的爬取请求爬取数据后,如果数据中仍包括链接,则可以继续将该链接封装成新的爬取请求,将该新的爬取请求投递至分布式队列中,这样,各处理模块可以并行爬取数据,提高了爬取效率。
一些相关方案中,单台服务器只能对自身的数据进行处理,比如服务器根据爬取请求爬取数据,如果自身爬取的数据中包括链接,则继续爬取该链接指向的数据,直到爬取的数据中不存在链接的情况下,爬取结束;之后等待处理下一次爬取请求。本申请实施例中,采用分布式队列作为中心节点,各处理模块都可以从分布式队列中获取爬取请求,并根据该爬取请求爬取数据,如果爬取的数据中包括链接,则将该链接再次封装为新的爬取请求,将该新的爬取请求投递回该分布式队列;这样,可以认为各处理模块组成了服务器集群,达到了服务器集群共同为一个或多个爬取请求爬取数据的效果,对于一个爬取请求来说,由服务器集群共同对其进行处理,相比于由单台服务器对其进行处理,较大程度地提高了爬取效率。
另外一些相关方案中,比如基于Scrapy框架的网络爬虫,大多使用基于内存的调度队列,而本方案中使用的是分布式队列,相比于基于内存的调度队列,分布式队列能够通过后进先出、设定优先级的方式,使得新数据、高优先级的数据被及时处理,这样的处理方式更合理。
与上述方法实施例相对应,本申请实施例还提供了一种数据获取装置,应用于集群中,其中,所述集群中包括多个处理模块,对应的,该数据获取装置应用于集群中的每个处理模块中。如图2所示,该装置包括:初始模块和多个爬取模块(爬取模块1、爬取模块2……爬取模块N),其中,
所述初始模块,被配置为接收爬取指令,读取所述爬取指令中的初始链接;将所述初始链接封装为爬取请求;将所述爬取请求发送至分布式队列;
每个爬取模块,被配置为从所述分布式队列中获取爬取请求;根据所获取的爬取请求爬取数据;读取所爬取的数据中的链接,作为待处理链接;将所述待处理链接发送至所述初始模块;
所述初始模块,还被配置为将所述待处理链接封装为新的爬取请求,并将所述新的爬取请求投递至所述分布式队列中。
一种情况下,可以将分布式队列理解为一种具备读写操作能力的“存储器”,分布式队列可以不属于集群,或者,分布式队列也可以属于集群,具体不做限定。
初始模块可以为Spider(蜘蛛)模块。本实施例中,可以将该多个爬取模块统称为Downloader(下载器),其中每个爬取模块可以为一个线程、或者为一个进程,具体不做限定。分布式队列可以为Scheduler(调度机)中的队列,该队列可以为基于Kafka(一种高吞吐量的分布式发布订阅消息系统)的队列,或者也可以为基于Redis(是一个key-value存储系统)的队列,或者也可以为RocketMQ(一款分布式、队列模型的消息中间件),或者也可以为QMQ(可靠消息队列)具体不做限定。爬取请求可以被序列化为字节后插入分布式队列中,等待被空闲的爬取模块获取。
作为一种实施方式,爬取请求中可以包括链接和用户代理信息;这样,初始模块可以获取所述初始链接对应的用户代理信息,将所获取的用户代理信息和所述初始链接封装为爬取请求;获取所述待处理链接对应的用户代理信息,将所获取的用户代理信息和所述待处理链接封装为新的爬取请求。
作为一种实施方式,该装置还可以包括中间层模块,被配置为从所述集群的数据池中获取以下任意一种或多种用户代理信息:代理IP、Cookie、源请求方信息、代理浏览器信息,将所获取的用户代理信息发送至所述初始模块。
集群中可以预先配置有代理IP池、Cookie池等各种数据池。中间层模块可以为Middleware(中间软件),中间层模块可以从集群中配置的代理IP池中获取代理IP,从集群中配置的Cookie池中获取Cookie,等等,不再一一列举。
这种实施方式中,初始模块读取爬取指令中的初始链接,并通过中间层模块获取该初始链接对应的用户代理信息;然后将该用户代理信息和该初始链接封装为爬取请求;将所述爬取请求发送至所述分布式队列。初始模块接收爬取模块发送的待处理链接,并通过中间层模块获取该待处理链接对应的用户代理信息;然后将该用户代理信息和该待处理链接封装为新的爬取请求;将所述新的爬取请求发送至所述分布式队列。
作为一种实施方式,中间层模块,还被配置为:
对爬取请求进行校验,若爬取请求通过校验,则将所述爬取请求发送至所述爬取模块;对所述爬取模块爬取的数据进行校验,删除未通过校验的数据。
一种情况下,爬取模块从分布式队列中获取爬取请求过程中,爬取请求先经过中间层模块,由中间层模块对爬取请求进行校验,校验通过后爬取请求再发送至爬取模块进行处理。
一种情况下,爬取模块爬取的数据也要经过中间层模块,由中间层模块对爬取模块爬取的数据进行校验,中间层模块可以删除未通过校验的数据,或者也可以不删除未对它校验的数据,但未通过校验的数据可以不再参与后续处理。
中间层模块中可以包括基于Redis的过滤器,或者基于Mysql(关系型数据库管理系统)的过滤器,由过滤器执行校验操作,具体过滤器的类型不作限定。
作为一种实施方式,中间层模块,还被配置为:
记录所述爬取请求的校验结果,作为第一校验结果;若所述爬取请求未通过校验,则基于所述第一校验结果,判断所述爬取请求未通过校验的次数是否小于第一预设阈值;如果小于,返回执行所述对所述爬取请求进行校验的步骤;如果大于,删除所述爬取请求;
记录所爬取的数据的校验结果,作为第二校验结果;若所爬取的数据未通过校验,则基于所述第二校验结果,判断所爬取的数据未通过校验的次数是否小于第二预设阈值;如果小于,返回执行所述对所爬取的数据进行校验的步骤;如果不小于,删除所爬取的数据。
这种实施方式中,对爬取请求/所爬取的数据进行多次校验,多次校验都未通过才认为是未通过校验,这样可以避免一次校验的偶然性,提高校验准确性。
作为一种实施方式,中间层模块,还被配置为:对所述爬取请求进行以下任意一种或多种校验处理:去重处理、黑名单过滤;对所爬取的数据进行以下任意一种或多种校验处理:去重处理、黑名单过滤。
作为一种实施方式,所述装置还包括:
导管模块,被配置为对所述爬取模块爬取的数据进行结构化处理,得到结构化数据;将所述结构化数据存储至所述集群的数据库中。
导管模块可以为Pipeline(计算机用语,导管),Pipeline也可以对数据进行过滤处理,还可以进行构建实例对象,也就是上述结构化处理。
一种情况下,导管模块可以直接将爬取模块爬取的数据作为爬取结果。另一种情况下,导管模块也可以对爬取模块爬取的数据进行结构化处理。结构化处理可以理解为,将爬取的数据处理成预设结构的数据,这里称为结构化数据。然后将结构化数据作为爬取结果。或者,另一种情况下,导管模块也可以先对爬取模块爬取的数据进行过滤处理,过滤处理也就是过滤掉一些不符合业务需求的数据,然后对过滤后的数据再进行结构化处理。
数据获取装置实施例中的各个模块:初始模块、爬取模块、中间层模块和导管模块都可以对应于数据获取方法实施例中的处理模块。或者说,数据获取方法实施例中的处理模块中可以配置有初始模块、爬取模块、中间层模块和导管模块。
下面结合图3介绍一种具体的实施方式:
初始模块(Spider)可以先对集群的运行环境进行初始化,比如,对中间层模块(Middleware)中的数据进行初始化,连接分布式队列,连接去重器(图3中未示出),连接数据库,等等。该去重器可以被配置为对爬取的数据或者爬取请求进行去重处理,数据库可以被配置为存储爬取结果。
初始模块接收到用户的爬取指令后,对该指令进行解析,读取该指令中携带的链接,作为初始链接。初始模块通过中间层模块(Middleware)从集群中配置的代理IP池中获取代理IP,从集群中配置的Cookie池中获取Cookie,等等,获取到各种用户代理信息,用户代理信息可以包括:代理IP、Cookie、源请求方信息、代理浏览器信息。
初始模块将该初始链接和用户代理信息封装为爬取请求,将该爬取请求投递至Scheduler中的分布式队列。
在爬取模块(统称为Downloader)对爬取请求进行处理前,先由中间层模块对爬取请求进行校验,校验通过后爬取模块再根据爬取请求爬取数据。若爬取的数据中包括链接,则将该链接发送至初始模块,初始模块通过中间层模块从集群中配置的各种数据池中获取到各种用户代理信息,初始模块将该链接与该用户代理信息封装为新的爬取请求,仍将该爬取请求投递至Scheduler中的分布式队列。继续基于分布式队列中的爬取请求爬取数据的过程类似,不再赘述。
爬取模块将所爬取的数据发送至导管模块(Pipeline),导管模块对这些数据对进行结构化处理,得到结构化数据,作为爬取结果。导管模块中也可以设置有过滤器,以对数据进行过滤处理,过滤掉一些不符合业务需求的数据。一种情况下,导管模块可以先对这些数据进行过滤处理后,再对过滤后的数据进行结构化处理,得到爬取结果。
导管模块将爬取结果存储至数据库中。当爬取过程结束后,可以将数据库中的爬取结果反馈给用户。或者,也可以实时、或周期性的、或非周期性的将数据库中的爬取结果反馈给用户,具体不做限定。
下面结合一些相关方案,详细说明本方案的技术效果:
第一方面,一些相关的网络爬虫,比如基于Scrapy框架的网络爬虫,采用的是单机流式爬虫框架,这种爬虫框架只能采用单一进程爬取大量数据,比如一个进程根据爬取请求爬取数据,如果自身爬取的数据中包括链接,则继续爬取该链接指向的数据,直到爬取的数据中不存在链接的情况下,爬取结束;之后等待处理下一次爬取请求。本申请实施例中,采用分布式队列作为中心节点,各爬取模块都可以从分布式队列中获取爬取请求,并根据该爬取请求爬取数据,如果爬取的数据中包括链接,则将该链接再次封装为新的爬取请求,将该新的爬取请求投递回该分布式队列;这样,可以认为各爬取模块组成了服务器集群,达到了服务器集群共同为一个或多个爬取请求爬取数据的效果,对于一个爬取请求来说,由服务器集群共同对其进行处理,相比于由单一进程对其进行处理,较大程度地提高了爬取效率。
第二方面,一些相关的网络爬虫,比如基于Scrapy框架的网络爬虫,大多使用基于内存的调度队列,由于这种队列受到内存容量限制,这些网络爬虫并不适用于数据量较大的业务场景。而本方案中采用分布式队列,该分布式队列可以连接多个爬取模块,各爬取模块都可以从分布式队列中获取爬取请求,并根据爬取请求爬取数据,可见,采用本方案可以对大数据量进行有效处理,本方案适用于数据量较大的业务场景。而且,相比于基于内存的调度队列,分布式队列能够通过后进先出、设定优先级的方式,使得新数据、高优先级的数据被及时处理,这样的处理方式更合理。
第三方面,基于Scrapy框架的网络爬虫不包括校验功能(去重处理、黑名单过滤等),需要用户手动敲代码或者设置其他的校验器来实现这些校验功能。而本方案中,在集群中配置了中间层模块,通过中间层模块可以实现对爬取请求及爬取数据的校验,不需要用户手动敲代码或者设置其他的校验器,用户体验更佳。
第四方面,本方案中预先在集群中配置代理IP池、Cookie池等各种数据池,这样,封装爬取请求时可以及时从数据池中获取到各种用户代理信息。这样,相比于现在方案中临时请求各种用户代理信息,提高了封装效率。
图4是根据一示例性实施例示出的一种电子设备400的结构示意图。如上所述,处理模块可以为实体设备,该实体设备即可以为电子设备400,电子设备400可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
参照图4,电子设备400可以包括以下一个或多个组件:处理组件402,存储器404,电力组件406,多媒体组件408,音频组件410,输入/输出(I/O)的接口412,传感器组件414,以及通信组件416。
处理组件402通常控制电子设备400的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件402可以包括一个或多个处理器420来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件402可以包括一个或多个模块,便于处理组件402和其他组件之间的交互。例如,处理组件402可以包括多媒体模块,以方便多媒体组件408和处理组件402之间的交互。
存储器404被配置为存储各种类型的数据以支持在设备400的操作。这些数据的示例包括用于在电子设备400上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器404可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电源组件406为电子设备400的各种组件提供电力。电源组件406可以包括电源管理系统,一个或多个电源,及其他与为电子设备400生成、管理和分配电力相关联的组件。
多媒体组件408包括在所述电子设备400和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件408包括一个前置摄像头和/或后置摄像头。当设备400处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件410被配置为输出和/或输入音频信号。例如,音频组件410
包括一个麦克风(MIC),当电子设备400处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器404或经由通信组件416发送。在一些实施例中,音频组件410还包括一个扬声器,用于输出音频信号。
I/O接口412为处理组件402和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件414包括一个或多个传感器,用于为电子设备400提供各个方面的状态评估。例如,传感器组件414可以检测到设备400的打开/关闭状态,组件的相对定位,例如所述组件为电子设备400的显示器和小键盘,传感器组件414还可以检测电子设备400或电子设备400一个组件的位置改变,用户与电子设备400接触的存在或不存在,电子设备400方位或加速/减速和电子设备400的温度变化。传感器组件414可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件414还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件414还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件416被配置为便于电子设备400和其他设备之间有线或无线方式的通信。电子设备400可以接入基于通信标准的无线网络,如WiFi,运营商网络(如2G、3G、4G或5G),或它们的组合。在一个示例性实施例中,通信组件416经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件416还包括近场通信(NFC)模块,以促进短程通信。。
在示例性实施例中,电子设备400可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器404,上述指令可由电子设备400的处理器420执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
图5是根据一示例性实施例示出的一种电子设备500的结构示意图。如上所述,处理模块可以为实体设备,该实体设备即可以为电子设备500,电子设备500可以被提供为一服务器。参照图5,电子设备500包括处理组件522,其进一步包括一个或多个处理器,以及由存储器532所代表的存储器资源,用于存储可由处理组件522的执行的指令,例如应用程序。存储器532中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件522被配置为执行指令,以执行上述任一种数据获取方法。
电子设备500还可以包括一个电源组件526被配置为执行电子设备500的电源管理,一个有线或无线网络接口550被配置为将电子设备500连接到网络,和一个输入输出(I/O)接口558。电子设备500可以操作基于存储在存储器532的操作系统,例如WindowsServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
本申请实施例还提供了一种非临时性计算机可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述任一种数据获取方法。
本申请实施例还提供了一种计算机程序产品,当所述计算机程序产品中的指令由电子设备的处理器执行时,使得电子设备执行上述任一种数据获取方法。
本领域技术人员在考虑说明书及实践这里公开的申请后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例、设备实施例、存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。
Claims (10)
1.一种数据获取方法,其特征在于,应用于集群中的每个处理模块,所述集群中包括多个处理模块,所述方法包括:
从分布式队列中获取爬取请求;
根据所获取的爬取请求爬取数据;
将所爬取的数据中包括的链接封装为新的爬取请求;
将所述新的爬取请求投递至所述分布式队列中。
2.根据权利要求1所述的方法,其特征在于,所述将所爬取的数据中包括的链接封装为新的爬取请求,包括:
读取所爬取的数据中的链接,作为待处理链接;
获取所述待处理链接对应的用户代理信息;
将所获取的用户代理信息和所述待处理链接封装为新的爬取请求。
3.根据权利要求2所述的方法,其特征在于,所述获取所述待处理链接对应的用户代理信息,包括:
从所述集群的数据池中获取以下任意一种或多种所述待处理链接对应的用户代理信息:代理IP、Cookie、源请求方信息、代理浏览器信息。
4.根据权利要求1所述的方法,其特征在于,所述根据所获取的爬取请求爬取数据,包括:对所述爬取请求进行校验,若所述爬取请求通过校验,则根据所述爬取请求爬取数据;
和/或,在所述根据所获取的爬取请求爬取数据之后,还包括:
对所爬取的数据进行校验,删除未通过校验的数据。
5.根据权利要求4所述的方法,其特征在于,在所述对所述爬取请求进行校验之后,还包括:
记录所述爬取请求的校验结果,作为第一校验结果;若所述爬取请求未通过校验,则基于所述第一校验结果,判断所述爬取请求未通过校验的次数是否小于第一预设阈值;如果小于,返回执行所述对所述爬取请求进行校验的步骤;
在所述对所爬取的数据进行校验之后,还包括:记录所爬取的数据的校验结果,作为第二校验结果;
所述删除未通过校验的数据,包括:若所爬取的数据未通过校验,则基于所述第二校验结果,判断所爬取的数据未通过校验的次数是否小于第二预设阈值;如果小于,返回执行所述对所爬取的数据进行校验的步骤;如果不小于,删除所爬取的数据。
6.根据权利要求4或5所述的方法,其特征在于,所述对所述爬取请求进行校验,包括:对所述爬取请求进行以下任意一种或多种校验处理:去重处理、黑名单过滤;
所述对所爬取的数据进行校验,包括:对所爬取的数据进行以下任意一种或多种校验处理:去重处理、黑名单过滤。
7.根据权利要求1所述的方法,其特征在于,在所述根据所获取的爬取请求爬取数据之后,还包括:
对所爬取的数据进行结构化处理,得到结构化数据,作为爬取结果。
8.一种数据获取装置,其特征在于,应用于集群中,所述装置包括:初始模块和多个爬取模块,其中,
所述初始模块,被配置为接收爬取指令,读取所述爬取指令中的初始链接;将所述初始链接封装为爬取请求;将所述爬取请求发送至分布式队列;
每个爬取模块,被配置为从所述分布式队列中获取爬取请求;根据所获取的爬取请求爬取数据;读取所爬取的数据中的链接,作为待处理链接;将所述待处理链接发送至所述初始模块;
所述初始模块,还被配置为将所述待处理链接封装为新的爬取请求,并将所述新的爬取请求投递至所述分布式队列中。
9.一种电子设备,其特征在于,包括处理器和用于存储处理器可执行指令的存储器;其中,所述处理器被配置为实现权利要求1-7任一所述的方法步骤。
10.一种非临时性计算机可读存储介质,其特征在于,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备执行权利要求1-7任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910251969.9A CN109933706A (zh) | 2019-03-29 | 2019-03-29 | 一种数据获取方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910251969.9A CN109933706A (zh) | 2019-03-29 | 2019-03-29 | 一种数据获取方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109933706A true CN109933706A (zh) | 2019-06-25 |
Family
ID=66988801
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910251969.9A Pending CN109933706A (zh) | 2019-03-29 | 2019-03-29 | 一种数据获取方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109933706A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111444412A (zh) * | 2020-04-03 | 2020-07-24 | 北京明朝万达科技股份有限公司 | 网络爬虫任务的调度方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7502773B1 (en) * | 2003-12-31 | 2009-03-10 | Microsoft Corporation | System and method facilitating page indexing employing reference information |
CN102314463A (zh) * | 2010-07-07 | 2012-01-11 | 北京瑞信在线系统技术有限公司 | 分布式爬虫系统及其提取网页数据的方法 |
CN102902576A (zh) * | 2012-09-26 | 2013-01-30 | 北京奇虎科技有限公司 | 一种渲染网页的方法、服务器和系统 |
CN103970788A (zh) * | 2013-02-01 | 2014-08-06 | 北京英富森信息技术有限公司 | 一种基于网页爬取的爬虫技术 |
CN107895009A (zh) * | 2017-11-10 | 2018-04-10 | 北京国信宏数科技有限责任公司 | 一种基于分布式的互联网数据采集方法及系统 |
-
2019
- 2019-03-29 CN CN201910251969.9A patent/CN109933706A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7502773B1 (en) * | 2003-12-31 | 2009-03-10 | Microsoft Corporation | System and method facilitating page indexing employing reference information |
CN102314463A (zh) * | 2010-07-07 | 2012-01-11 | 北京瑞信在线系统技术有限公司 | 分布式爬虫系统及其提取网页数据的方法 |
CN102902576A (zh) * | 2012-09-26 | 2013-01-30 | 北京奇虎科技有限公司 | 一种渲染网页的方法、服务器和系统 |
CN103970788A (zh) * | 2013-02-01 | 2014-08-06 | 北京英富森信息技术有限公司 | 一种基于网页爬取的爬虫技术 |
CN107895009A (zh) * | 2017-11-10 | 2018-04-10 | 北京国信宏数科技有限责任公司 | 一种基于分布式的互联网数据采集方法及系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111444412A (zh) * | 2020-04-03 | 2020-07-24 | 北京明朝万达科技股份有限公司 | 网络爬虫任务的调度方法及装置 |
CN111444412B (zh) * | 2020-04-03 | 2023-06-16 | 北京明朝万达科技股份有限公司 | 网络爬虫任务的调度方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Ra et al. | Medusa: A programming framework for crowd-sensing applications | |
CN110489626A (zh) | 一种信息采集方法和装置 | |
KR102403771B1 (ko) | 미디어 컬렉션들의 생성, 큐레이션 및 프리젠테이션을 위한 방법들 및 시스템들 | |
CN105407134B (zh) | 一种表单提交设备、方法和移动终端 | |
WO2003081446A1 (en) | Multimedia advertising service through a mobile communication network and multimedia content controlling apparatus and method of a mobile terminal supporting said service | |
CN110020062B (zh) | 一种可定制的网络爬虫方法及系统 | |
CN104125162B (zh) | 网络资源的访问处理方法及装置 | |
CN108021496A (zh) | 线程数据处理方法及装置 | |
CN107273263A (zh) | 一种异常运行的分析方法、应用终端及监控服务器 | |
CN105912693A (zh) | 网络请求处理方法、网络数据获取方法、装置及服务器 | |
CN109685538B (zh) | 资源领取信息处理方法、装置及电子设备 | |
CN109542715A (zh) | 采集应用程序性能数据的方法、装置及终端设备 | |
CN106936635A (zh) | 网络媒体监管方法及装置 | |
CN110008037A (zh) | 消息处理方法、装置及存储介质 | |
CN103607454B (zh) | Android系统浏览器设置私有代理服务器的方法 | |
CN105553770B (zh) | 一种数据采集控制方法和装置 | |
CN107391518A (zh) | 统计页面加载性能信息的系统、方法及装置 | |
CN106230809A (zh) | 一种基于url的移动互联网舆情监测方法及系统 | |
CN103455602B (zh) | 一种视频url抓取方法、装置及终端设备 | |
CN109388737B (zh) | 一种内容项的曝光数据的发送方法、装置及存储介质 | |
CN108810833A (zh) | 手机号码绑定信息管理方法、装置及计算机可读存储介质 | |
CN109933706A (zh) | 一种数据获取方法、装置、电子设备及存储介质 | |
CN109828844A (zh) | 应用程序的处理方法、移动终端及存储介质 | |
CN108255567A (zh) | 一种基于Application的Web在线人员管理方法及系统 | |
CN106921710B (zh) | 一种群智感知方法及装置 |
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: 20190625 |
|
RJ01 | Rejection of invention patent application after publication |