CN113868502A - 一种页面爬虫方法、装置、电子设备及可读存储介质 - Google Patents

一种页面爬虫方法、装置、电子设备及可读存储介质 Download PDF

Info

Publication number
CN113868502A
CN113868502A CN202111155641.0A CN202111155641A CN113868502A CN 113868502 A CN113868502 A CN 113868502A CN 202111155641 A CN202111155641 A CN 202111155641A CN 113868502 A CN113868502 A CN 113868502A
Authority
CN
China
Prior art keywords
page
crawler
event
response data
thread
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
Application number
CN202111155641.0A
Other languages
English (en)
Inventor
宋洋洋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sangfor Technologies Co Ltd
Original Assignee
Sangfor Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sangfor Technologies Co Ltd filed Critical Sangfor Technologies Co Ltd
Priority to CN202111155641.0A priority Critical patent/CN113868502A/zh
Publication of CN113868502A publication Critical patent/CN113868502A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/951Indexing; Web crawling techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/955Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本申请公开了一种页面爬虫方法、装置、电子设备及计算机可读存储介质,该方法包括:基于目标网页地址,在浏览器中新建标签页;对标签页执行模拟控制操作,并对模拟控制操作进行监听,得到操作响应数据;对操作响应数据进行解析,得到爬虫结果;由于模拟控制操作触发响应的方式不仅仅包括发送请求,通常可以触发网页中的所有能够引起事件响应的元素,因此得到的相应结果的类型更多,提高了页面覆盖率和爬虫效率。

Description

一种页面爬虫方法、装置、电子设备及可读存储介质
技术领域
本申请涉及网络爬虫技术领域,特别涉及一种页面爬虫方法、页面爬虫装置、电子设备及计算机可读存储介质。
背景技术
网络爬虫(web crawler)是一种用来自动浏览万维网的程序或者脚本。网络爬虫从一个或若干初始网页的URL(Uniform Resource Locator,统一资源定位符)开始,获得初始网页上的URL,进而不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。当前,网络爬虫发送请求,利用解析器来对响应的内容进行解析,并利用正则表达式对解析后的内容进行匹配,提取其中的URL。然而,该方法能够覆盖的网页内容有限,对于一些js(JavaScript的缩写,是一种编程语言)自动加载、js跳转等页面内容无法抓取,无法爬取到其对应的URL,页面覆盖率较低,进而导致爬虫效率较低。
发明内容
有鉴于此,本申请的目的在于提供一种页面爬虫方法、页面爬虫装置、电子设备及计算机可读存储介质,提高了页面覆盖率和爬虫效率。
为解决上述技术问题,本申请提供了一种页面爬虫方法,包括:
基于目标网页地址,在浏览器中新建标签页;
对所述标签页执行模拟控制操作,并对所述模拟控制操作进行监听,得到操作响应数据;
对所述操作响应数据进行解析,得到爬虫结果。
可选地,所述对所述标签页执行模拟控制操作,包括:
向所述浏览器注入控制代码;
利用所述控制代码对所述标签页执行模拟控制操作。
可选地,所述对所述标签页执行模拟控制操作,包括:
调用第三方库中的封装接口对所述标签页执行模拟控制操作。
可选地,还包括:
构建线程池,并在所述线程池中建立若干个线程;
建立所述浏览器与所述线程之间的链接;
相应的,所述基于目标网页地址,在浏览器中新建标签页,包括:
确定若干个所述目标网页地址;
利用各个所述线程,在所述浏览器中分别新建与各个所述目标网页地址对应的所述标签页;所述目标网页地址与所述线程的数量相同且一一对应。
可选地,还包括:
若检测到错误,则获取缓存数据,并根据错误类型控制所述线程或所述线程池进行错误修复;
在错误修复完成后,利用所述缓存数据进行数据恢复。
可选地,所述根据错误类型控制所述线程或所述线程池进行错误修复,包括:
若所述错误类型为页面错误,则控制所述线程对所述标签页进行重启;
或,
若所述错误类型为连接错误或意外错误,则控制所述线程或所述线程池重启。
可选地,所述操作响应数据包括对象文档模型对象;所述对所述操作响应数据进行解析,得到爬虫结果,包括:
生成所述对象文档模型对象对应的事件列表;
利用钩子函数对所述事件列表中的目标事件进行处理;所述目标事件为破坏页面逻辑的对象文档模型事件;
触发所述事件列表中的各个对象文档模型事件,得到所述爬虫结果。
可选地,所述触发所述事件列表中的各个对象文档模型事件,得到所述爬虫结果,包括:
若触发任一所述对象文档模型事件时,检测到阿贾克斯请求,则执行所述阿贾克斯请求;
判断所述阿贾克斯请求是否执行完毕;
若执行完毕,则将所述阿贾克斯请求的执行结果确定为所述爬虫结果;
若未执行完毕,则确定需要重新判断所述阿贾克斯请求是否执行完毕。
可选地,所述对所述操作响应数据进行解析,得到爬虫结果,包括:
对所述操作响应数据执行目标预处理,得到中间数据;所述目标预处理的处理方式与所述操作响应数据的数据类型相关;
对所述中间数据进行统一资源定位符提取,得到所述爬虫结果。
本申请还提供了一种页面爬虫装置,包括:
新建模块,用于基于目标网页地址,在浏览器中新建标签页;
模拟控制模块,用于对所述标签页执行模拟控制操作,并对所述模拟控制操作进行监听,得到操作响应数据;
结果获取模块,用于对所述操作响应数据进行解析,得到爬虫结果。
本申请还提供了一种电子设备,包括存储器和处理器,其中:
所述存储器,用于保存计算机程序;
所述处理器,用于执行所述计算机程序,以实现上述的页面爬虫方法。
本申请还提供了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现上述的页面爬虫方法。
本申请提供的页面爬虫方法,基于目标网页地址,在浏览器中新建标签页;对标签页执行模拟控制操作,并对模拟控制操作进行监听,得到操作响应数据;对操作响应数据进行解析,得到爬虫结果。
可见,该方法利用目标网页地址新建标签页后,并不仅仅采用发送请求的方式对目标网页地址进行爬虫操作,而是对新建的标签页执行模拟控制操作。模拟控制操作可以模拟正常用户对页面可能执行的操作,其能够利用发送请求以外的其他手段引起目标网页的响应。同时,对标签页中的模拟控制操作进行监听,以便得到标签页对模拟控制操作做出的响应,即得到操作响应数据,不同的模拟控制操作得到的操作响应数据通常不同。通过对操作响应数据进行对应方式的解析,可以从中解析得到爬虫结果。由于模拟控制操作触发响应的方式不仅仅包括发送请求,通常可以触发网页中的所有能够引起事件响应的元素,因此得到的相应结果的类型更多,提高了页面覆盖率和爬虫效率。解决了相关技术存在的页面覆盖率较低,导致爬虫效率较低的问题。
此外,本申请还提供了一种页面爬虫装置、电子设备及计算机可读存储介质,同样具有上述有益效果。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种页面爬虫方法流程图;
图2为本申请实施例提供的一种具体的标签页新建流程图;
图3为本申请实施例提供的一种具体的操作响应数据获取流程图;
图4为本申请实施例提供的一种页面爬虫装置的结构示意图;
图5为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
随着互联网业务的爆发式增长,网络安全形势也越来越严峻,攻击者将更多的注意力投入到网络安全中。网络爬虫作为漏洞扫描等安全工具中的重要一步,网络爬虫的页面覆盖率直接决定了漏洞扫描工具的扫描覆盖面和漏洞检出率。随着网络站点技术的变化发展,越来越多的js、html5(Hyper Text Markup Language 5.0,超文本标记语言5.0)技术被应用到网页中。传统的网络爬虫在网页爬取过程中,依靠所使用的编程语言对应的HTTP(HyperText Transfer Protocol,超文本传输协议)请求响应解析器来直接解析对请求进行响应而返回的内容,并提供正则表达式对其进行匹配,进而从中提取到URL。但对一些js自动加载、js跳转、post请求(一种HTTP请求,用于向指定的资源提交要被处理的数据)的拼接、事件驱动等的页面事件无法抓取并处理,并且对于DOM(文件对象模型,DocumentObject Model)操作、AJAX请求(即阿贾克斯请求)等输入点事件也无法触发并爬取。这使得网络爬虫的页面覆盖率较低,进而使得漏洞扫描工具的可靠性较低。
为了解决上述问题,本申请提供了一种页面爬虫方法。请参考图1,图1为本申请实施例提供的一种页面爬虫方法流程图。该方法包括:
S101:基于目标网页地址,在浏览器中新建标签页。
目标网页地址,是指需要被进行爬虫处理的网页地址,其内容可以根据需要进行设置,具体可以为任意数量的任意网页的地址。通常情况下,可以设置有任务队列,任务队列是指用于存放等待进行爬虫处理的网页地址的队列。因此,目标网页地址可以为任务队列中的一个或多个网页地址,例如可以为任务队列前端的若干个网页地址。可以理解的是,由于爬虫过程是迭代进行的,对一个目标网页地址进行爬虫处理后得到的新的网页地址可以作为下一轮爬虫过程中的目标网页地址。因此,在爬虫处理得到爬虫结果后,可以利用其更新任务队列。同时,这使得每次爬虫时的目标网页地址可以为预先设置的网页地址,或者可以为根据预先设置的网页地址爬虫得到的爬虫结果。
在确定目标网页地址后,可以在浏览器中新建其对应的标签页。在一种实施方式中,可以控制指定的线程执行上述的操作,即利用该线程与浏览器进行连接,在确定目标网页地址后,该线程负责在浏览器中新建一个与目标网页地址相对应的标签页,以便进行爬虫处理。在另一种实施方式中,为了提高爬虫的速度和效率,可以设置多个线程,并利用其组成线程池,其中每个线程分别负责一个对应的标签页。
S102:对标签页执行模拟控制操作,并对模拟控制操作进行监听,得到操作响应数据。
在创建标签页完毕后,为了对标签页中的各种事件进行触发,本申请采用了模拟控制的方式对标签页进行控制,以便触发其中的各种事件或元素。为了能够得到对应的操作响应数据,还需要对模拟控制操作进行监听,以便在事件被触发后获取对应的操作响应数据。
本实施例并不限定对标签页执行模拟控制操作的具体方式,例如可以调用具有封装接口的第三方库对标签页进行操作,封装接口是指用于对浏览器进行控制的接口,即封装好的API(Application Programming Interface,应用程序接口),利用这些封装接口可以操作浏览器并对标签页进行控制。该第三方库可以为名称为puppeteer的Node.js库,Node.js是一个Javascript运行环境(即runtime),其实质是对Chrome浏览器(蠕虫浏览器)的V8引擎进行了封装。除此之外,还可以调用其他具有封装接口的第三方库。
除上述方式以外,还可以采用控制代码注入的方式对浏览器进行控制,进而对标签页进行模拟控制操作。控制代码具体可以为js代码,即由js编程语言编写得到的代码,其形式可以为脚本形式或其他形式。根据模拟控制操作的需要,js代码可以为任何形式。通过向浏览器注入代码,浏览器即可执行该代码,进而根据代码的要求对标签页进行操作,实现模拟控制操作的效果。
可以理解的是,操作响应数据的具体类型可以有多种,根据模拟控制操作触发的事件的类型的不同,操作响应数据的类型通常不同,其对应的解析和处理方式也不同。通过模拟控制操作触发事件得到的操作响应数据,其中必然存在部分内容是无法通过发送请求的方式得到的,例如触发DOM(文件对象模型,Document Object Model)事件而得到的操作响应数据。通过扩大获取操作响应数据的途径,更大范围地获取操作响应数据,更加全面地覆盖网页,实现提高页面覆盖率和爬虫效率的效果。
S103:对操作响应数据进行解析,得到爬虫结果。
在得到操作响应数据后对其进行解析,即可得到爬虫结果。需要说明的是,根据操作响应数据的形式和类型的不同,其解析方式通常不同,由于真正的人工操作同样会得到对应的响应数据,且本申请中的操作响应数据的形式和类型均处于真正的人工操作同样会得到对应的响应数据的形式范围和类型范围内,因此操作响应数据均能够被正常解析并提取得到其中的爬虫结果。在得到爬虫结果后,可以执行预设操作。预设操作的具体内容不做限定,例如可以为利用预设操作更新任务队列,或者可以判断是否满足爬虫结束条件,爬虫结束条件可以为时间条件或爬虫深度条件,若满足则停止爬虫并存储历次爬虫的爬虫结果。
应用本申请实施例提供的页面爬虫方法,利用目标网页地址新建标签页后,并不仅仅采用发送请求的方式对目标网页地址进行爬虫操作,而是对新建的标签页执行模拟控制操作。模拟控制操作可以模拟正常用户对页面可能执行的操作,其能够利用发送请求以外的其他手段引起目标网页的响应。同时,对标签页中的模拟控制操作进行监听,以便得到标签页对模拟控制操作做出的响应,即得到操作响应数据,不同的模拟控制操作得到的操作响应数据通常不同。通过对操作响应数据进行对应方式的解析,可以从中解析得到爬虫结果。由于模拟控制操作触发响应的方式不仅仅包括发送请求,通常可以触发网页中的所有能够引起事件响应的元素,因此得到的相应结果的类型更多,提高了页面覆盖率和爬虫效率。解决了相关技术存在的页面覆盖率较低,导致爬虫效率较低的问题。
基于上述实施例,本实施例将对上述实施例中的若干步骤进行具体的阐述。其中,为了提高爬虫效率,可以构建线程池,利用多个线程并行地进行爬虫操作,具体的,可以包括如下步骤:
步骤11:构建线程池,并在线程池中建立若干个线程。
步骤12:建立浏览器与线程之间的链接。
其中,线程池可以被称为workerpool,其中的每个线程均充当worker(即工作者)的角色,每个线程与浏览器之间均存在链接,通过建立线程与浏览器之间的链接,使得线程能够对浏览器(或其中的标签页)进行控制,进而进行模拟控制操作。
相应的,基于目标网页地址,在浏览器中新建标签页的过程可以包括如下步骤:
步骤13:确定若干个目标网页地址;
步骤14:利用各个线程,在浏览器中分别新建与各个目标网页地址对应的标签页。
由于各个线程之间相互独立,每个线程用于在一个目标网页地址上进行爬虫操作,因此可以确定若干个目标网页地址,目标网页地址与线程的数量相同且一一对应。在这种情况下,各个线程可以控制浏览器新建与对应的目标网页地址相对应的标签页,进而在对应的标签页上进行模拟控制操作。
请参考图2,图2为本申请实施例提供的一种具体的标签页新建流程图。在爬虫开始后,首先设置任务队列,在其中添加若干个初始的网页地址作为一开始爬虫的目标网页地址。同时,建立一个线程池并在其中初始化多个线程(即thread1、thread2、thread3、thread4),并启动浏览器程序,在浏览器启动后,每个线程均会与浏览器建立一个链接,并在其中新建一个独立的标签页,即tab标签。在一种具体的实施方式中,浏览器为Chrome浏览器,线程池为node.js线程池。在后续过程中,各个线程分别从任务队列中获取对应的目标URL作为目标网页地址,并对其进行爬虫操作。在得到处理结果后,将其统一加入到任务队列中,并开始新一轮的爬取。
对于对标签页进行模拟控制操作的具体方式,本实施例并不进行限定,在一种实施方式中,为了减少模拟控制操作的复杂程度,可以调用已有的第三方库执行模拟控制操作。具体的,对标签页执行模拟控制操作的过程可以包括如下步骤:
步骤21:调用第三方库中的封装接口对标签页执行模拟控制操作。
其中,第三方库提供封装好的接口,即封装接口,利用其可以对浏览器进行常用的操作,例如点击、输入信息等。第三方库可以为puppeteer库,其是Google(即谷歌)官方推出的一个操作Chrome(即蠕虫浏览器)的node.js的第三方库,通过调用Chrome DevTools(一种开发者工具,或称为调试工具)开放的接口与Chrome通信,puppeteer对常用的chrome操作进行了封装。调用已有的第三方库可以方便地对标签页进行模拟控制操作。
在另一种实施方式中,由于第三方库提供的操作类型可能较少,为了使得模拟控制操作更加符合个性化的需要,可以通过代码注入的方式执行模拟控制操作。具体的,对标签页执行模拟控制操作的过程可以包括如下步骤:
步骤31:向浏览器注入控制代码。
步骤32:利用控制代码对标签页执行模拟控制操作。
控制代码,是指用于控制浏览器对标签页执行模拟控制操作的代码。通过代码注入的方式,可以直接获取并改变HTML内容,将其改变为所需的状态。控制代码可以控制浏览器执行模拟控制操作,因此将其注入后,即可利用控制代码对浏览器进行控制,进而对标签页执行模拟控制操作。由于控制代码的具体内容可以根据需要进行编写,因此其比调用第三方库的方式具有更高的灵活性。对于控制代码的具体形式,其可以为js代码,或者可以为其他任何可用的形式。
在第三种实施方式中,上述两种方式可以结合起来,以便综合两种方式的有点,在提高效率的同时也提高模拟控制操作的灵活性。请参考图3,图3为本申请实施例提供的一种具体的操作响应数据获取流程图。其中,线程(即thread)在连接到浏览器(即Chrome)后,部署事件监听,同时向Chrome中注入js代码(即控制代码)。在js代码注入完毕后,调用输入的js代码,同时进行事件监听,例如可以通过puppeteer的page.on监听事件,以便在触发某一事件后及时监听到并获取对应的操作响应数据,进而利用操作响应数据得到爬取结果,即爬虫结果。
需要说明的是,在一种实施方式中,可以监听所有因模拟控制操作而触发的事件;在另一种实施方式中,可以选择部分事件进行监听,以便提高爬虫效率。本实施例并不限定监听的事件的具体类型,例如可以包括以下事件:
Repuset事件:主要用于本地加载图片、js和css(层叠样式表,Cascading StyleSheets),处理多次重定向的请求,对文件下载的请求伪造返回包,支持并构造post请求,处理点击触发的DOM事件请求,处理AJAX请求。
Response事件:用于对返回包格式化处理,并正则匹配目标url。
Requestfailed事件和Requestfinished事件:用于处理AJAX请求。
Dialog事件:用于处理可能破坏chrome上下文关系的弹窗等。
Console事件:用于监听控制台中hook的事件url。
除此之外,还可以监听其他事件,对此本实施例不做限定。
在进行模拟控制操作得到操作响应数据后,需要对其进行解析,得到爬虫结果。在一种实施方式中,操作响应数据本身不需要经过任何处理,例如其对GET请求进行响应的响应数据,因此可以直接对其明面上的数据进行拆分解析,得到对应的爬虫结果。在另一种实施方式中,操作响应数据并没有直接记录有爬虫结果,需要对其进行预处理,并在预处理后得到爬虫结果。
具体的,对操作响应数据进行解析,得到爬虫结果的过程可以包括如下步骤:
步骤41:对操作响应数据执行目标预处理,得到中间数据。
步骤42:对中间数据进行统一资源定位符提取,得到爬虫结果。
可以理解的是,不同类型的操作响应数据的处理方式通常不同,因此在本实施方式中,目标预处理的处理方式与操作响应数据的数据类型相关,各种目标预处理的具体处理方式不做限定。由于操作响应数据可以视为真正由人工操作而生成的响应数据,因此其必然具有固定的处理方式和流程,这些处理方式和流程的全部或部分操作即可以为目标预处理的处理方式和流程。
中间数据,是指记录有统一资源定位符的数据。通过正则表达式匹配等方式可以对中间数据进行统一资源定位符的提取,进而得到爬虫结果。需要说明的是,爬虫结果可以不仅仅包括统一资源定位符,还可以包括其他信息,例如统一资源定位符中的部分数据,或者可以为其他用户指定的数据。
在一种具体的实施方式中,操作响应数据包括对象文档模型对象,即DOM对象。例如,模拟控制操作可以对标签页进行下拉操作,然后模拟点击并进行表单填充,在上述过程完成后,HTTP返回的页面可以看作为一个DOM对象。由于触发DOM事件时会破坏页面逻辑,导致无法完全遍历整个DOM树,导致爬虫过程无法完全覆盖整个页面,进而降低页面覆盖率。为了解决上述问题,对操作响应数据进行解析,得到爬虫结果的过程,可以包括如下步骤:
步骤51:生成对象文档模型对象对应的事件列表。
步骤52:利用钩子函数对事件列表中的目标事件进行处理;目标事件为破坏页面逻辑的对象文档模型事件。
步骤53:触发事件列表中的各个对象文档模型事件,得到爬虫结果。
对象文档模型对象即DOM对象,其中包括若干个对象文档模型事件,即DOM事件。各个DOM事件能够构成树形结构的DOM树。其中,某些DOM事件会破坏页面逻辑,例如open事件、alert事件、prompt事件、close事件、print事件等。破坏页面逻辑会使得DOM对象中的某些DOM事件无法被触发,进而导致其他剩余部分的DOM事件无法被触发。
为了解决上述问题,本申请对DOM对象进行遍历,以便生成由DOM事件构成的时间列表。钩子函数,是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息。钩子的本质是一段用以处理系统消息的程序,通过系统调用,把它挂入系统。目标事件,是指会破坏页面逻辑的DOM事件,某一DOM事件是否会破坏页面逻辑是明确无异议的,因此事件列表中哪些DOM事件为目标事件同样是确定的。在确定目标事件后,利用钩子函数对其进行处理,使得对其触发时不会破坏页面逻辑。在处理完毕后触发事件列表中的各个DOM事件,最终得到爬虫结果。具体的,DOM事件被触发后,可以利用事件监听函数来捕获该DOM事件触发后引出的事件URL,该事件URL则为爬虫结果。
在另一种实施方式中,触发DOM时间会引发AJAX请求,即阿贾克斯请求。AJAX(Asynchronous JavaScript and XML,异步的JavaScript和XML,XML是指ExtensibleMarkup Language,可扩展标记语言)是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。通常情况下,每个DOM事件会有最长时长的限制,以避免事件触发出现异常流程卡住而持续等待造成的死锁。而对于AJAX请求,则不受该限制,在检测到AJAX请求后触发循环等待机制,直至该AJAX请求执行完毕,无论其执行成功或失败。在检测到执行完毕后,将其执行结果确定为爬虫结果。因此,触发事件列表中的各个对象文档模型事件,得到爬虫结果的过程可以包括如下步骤:
步骤61:若触发任一对象文档模型事件时,检测到阿贾克斯请求,则执行阿贾克斯请求。
步骤62:判断阿贾克斯请求是否执行完毕。
步骤63:若执行完毕,则将阿贾克斯请求的执行结果确定为爬虫结果。
步骤64:若未执行完毕,则确定需要重新判断阿贾克斯请求是否执行完毕。
在将事件列表中的所有DOM事件触发完毕后,页面可能会发生刷新,刷新后可以再次获取新的页面的事件列表,并判断其与上一事件列表结构是否相同。若不同,则重复上述对事件列表的处理过程,直至满足停止条件。由于页面可能会陷入死循环,因此停止条件可以设置为最大深度条件,此外,还可以设置为时长条件等其他类型的条件,本实施例对此不做限定。
基于上述实施例,由于浏览器以及被调用的第三方库稳定性较差,在实际应用中,可能会出现标签页崩溃、请求页面报错,第三方库和浏览器连接奔溃、浏览器内存溢出等问题。在这种情况下,为了能够继续进行爬虫,需要进行错误修复。具体的,还可以包括如下步骤:
步骤71:若检测到错误,则获取缓存数据,并根据错误类型控制线程或线程池进行错误修复。
步骤72:在错误修复完成后,利用缓存数据进行数据恢复。
其中,缓存数据,是指设置到错误的线程或线程池在爬虫过程中生成的数据,其具体数据量、内容等不做限定。由于错误修复过程中,通常涉及到线程等的重启,而重启时会释放缓存,造成缓存丢失,爬虫需要重新开始。为了提高效率,在进行具体的错误修复之前,可以获取缓存数据,并对其进行保存。在错误修复完成后,利用缓存数据进行数据恢复,以便将线程或线程池恢复至错误发生前的状态,无需重新开始爬虫,而是在错误发生前的基础上继续进行爬虫。
可以理解的是,不同类型的错误对应的修复方式不同。具体的,根据错误类型控制线程或线程池进行错误修复,包括:
步骤81:若错误类型为页面错误,则控制线程对标签页进行重启。
或,
步骤82:若错误类型为连接错误或意外错误,则控制线程或线程池重启。
其中,页面错误,是指页面请求发生的除超时以外的错误,连接错误,是指第三方库或线程与浏览器之间的连接断开或异常的错误,意外错误,是指浏览器内存溢出、浏览器奔溃、线程奔溃等错误。肉发生页面错误,则说明线程、浏览器本身以及连接关系并未发生异常,在这种情况下,重启标签页即可完成错误修复。若错误类型为连接错误,则说明连接关系发生错误,例如线程与浏览器的链接,或者调用的第三方库与浏览器之间的链接发生错误。在这种情况下,可以控制重启线程,以便在线程重启时重新建立链接。若发生意外错误,则说明线程或浏览器本身发生了异常,在这种情况下,若浏览器发生异常,则直接重启线程池,若线程发生异常,则重启线程。
具体的,若调用第三方库puppeteer,利用Chrome浏览器进行爬虫,由于chrome和puppeteer的不稳定性,经常会有chrome tab标签页崩溃、请求页面报错、puppeteer和chrome的连接奔溃、chrome内存溢出的错误发生。当页面请求发生除超时以外的错误时,则执行回调函数去重启page页面。当puppeteer与chrome的连接失败时,则重新执行当前线程的初始化,即重启线程。如果线程发生意料之外的异常时,线程池捕获异常并杀掉线程,重启新的线程。当chrome因为种种原因奔溃关闭时,则调度去重启整个线程池。
下面对本申请实施例提供的页面爬虫装置进行介绍,下文描述的页面爬虫装置与上文描述的页面爬虫方法可相互对应参照。
请参考图4,图4为本申请实施例提供的一种页面爬虫装置的结构示意图,包括:
新建模块110,用于基于目标网页地址,在浏览器中新建标签页;
模拟控制模块120,用于对标签页执行模拟控制操作,并对模拟控制操作进行监听,得到操作响应数据;
结果获取模块130,用于对操作响应数据进行解析,得到爬虫结果。
可选地,模拟控制模块120,包括:
注入单元,用于向浏览器注入控制代码;
第一控制单元,用于利用控制代码对标签页执行模拟控制操作。
可选地,模拟控制模块120,包括:
第二控制单元,用于调用第三方库中的封装接口对标签页执行模拟控制操作。
可选地,还包括:
线程池构建模块,用于构建线程池,并在线程池中建立若干个线程;
链接建立模块,用于建立浏览器与线程之间的链接;
相应的,新建模块110,包括:
地址确定单元,用于确定若干个目标网页地址;
新建单元,用于利用各个线程,在浏览器中分别新建与各个目标网页地址对应的标签页;目标网页地址与线程的数量相同且一一对应。
可选地,还包括:
数据备份模块,用于若检测到错误,则获取缓存数据,并根据错误类型控制线程或线程池进行错误修复;
数据恢复模块,用于在错误修复完成后,利用缓存数据进行数据恢复。
可选地,数据恢复模块,包括:
标签页重启单元,用于若错误类型为页面错误,则控制线程对标签页进行重启;
或,
线程重启单元,用于若错误类型为连接错误或意外错误,则控制线程或线程池重启。
可选地,结果获取模块,包括:
列表生成单元,用于生成对象文档模型对象对应的事件列表;
钩子处理单元,用于利用钩子函数对事件列表中的目标事件进行处理;目标事件为破坏页面逻辑的对象文档模型事件;
事件触发单元,用于触发事件列表中的各个对象文档模型事件,得到爬虫结果。
可选地,事件触发单元,包括:
请求检测子单元,用于若触发任一对象文档模型事件时,检测到阿贾克斯请求,则执行阿贾克斯请求;
判断子单元,用于判断阿贾克斯请求是否执行完毕;
结果确定子单元,用于若执行完毕,则将阿贾克斯请求的执行结果确定为爬虫结果;
重新判断子单元,用于若未执行完毕,则确定需要重新判断阿贾克斯请求是否执行完毕。
可选地,结果获取模块,包括:
预处理单元,用于对操作响应数据执行目标预处理,得到中间数据;目标预处理的处理方式与操作响应数据的数据类型相关;
提取单元,用于对中间数据进行统一资源定位符提取,得到爬虫结果。
下面对本申请实施例提供的电子设备进行介绍,下文描述的电子设备与上文描述的页面爬虫方法可相互对应参照。
请参考图5,图5为本申请实施例提供的一种电子设备的结构示意图。其中电子设备100可以包括处理器101和存储器102,还可以进一步包括多媒体组件103、信息输入/信息输出(I/O)接口104以及通信组件105中的一种或多种。
其中,处理器101用于控制电子设备100的整体操作,以完成上述的页面爬虫方法中的全部或部分步骤;存储器102用于存储各种类型的数据以支持在电子设备100的操作,这些数据例如可以包括用于在该电子设备100上操作的任何应用程序或方法的指令,以及应用程序相关的数据。该存储器102可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,SRAM)、电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,EPROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、只读存储器(Read-OnlyMemory,ROM)、磁存储器、快闪存储器、磁盘或光盘中的一种或多种。
多媒体组件103可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器102或通过通信组件105发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口104为处理器101和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件105用于电子设备100与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near Field Communication,简称NFC),2G、3G或4G,或它们中的一种或几种的组合,因此相应的该通信组件105可以包括:Wi-Fi部件,蓝牙部件,NFC部件。
电子设备100可以被一个或多个应用专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、数字信号处理器(Digital Signal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field ProgrammableGate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述实施例给出的页面爬虫方法。
下面对本申请实施例提供的计算机可读存储介质进行介绍,下文描述的计算机可读存储介质与上文描述的页面爬虫方法可相互对应参照。
本申请还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述的页面爬虫方法的步骤。
该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
本领域技术人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应该认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系属于仅仅用来将一个实体或者操作与另一个实体或者操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语包括、包含或者其他任何变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (12)

1.一种页面爬虫方法,其特征在于,包括:
基于目标网页地址,在浏览器中新建标签页;
对所述标签页执行模拟控制操作,并对所述模拟控制操作进行监听,得到操作响应数据;
对所述操作响应数据进行解析,得到爬虫结果。
2.根据权利要求1所述的页面爬虫方法,其特征在于,所述对所述标签页执行模拟控制操作,包括:
向所述浏览器注入控制代码;
利用所述控制代码对所述标签页执行模拟控制操作。
3.根据权利要求1所述的页面爬虫方法,其特征在于,所述对所述标签页执行模拟控制操作,包括:
调用第三方库中的封装接口对所述标签页执行模拟控制操作。
4.根据权利要求1所述的页面爬虫方法,其特征在于,还包括:
构建线程池,并在所述线程池中建立若干个线程;
建立所述浏览器与所述线程之间的链接;
相应的,所述基于目标网页地址,在浏览器中新建标签页,包括:
确定若干个所述目标网页地址;
利用各个所述线程,在所述浏览器中分别新建与各个所述目标网页地址对应的所述标签页;所述目标网页地址与所述线程的数量相同且一一对应。
5.根据权利要求4所述的页面爬虫方法,其特征在于,还包括:
若检测到错误,则获取缓存数据,并根据错误类型控制所述线程或所述线程池进行错误修复;
在错误修复完成后,利用所述缓存数据进行数据恢复。
6.根据权利要求5所述的页面爬虫方法,其特征在于,所述根据错误类型控制所述线程或所述线程池进行错误修复,包括:
若所述错误类型为页面错误,则控制所述线程对所述标签页进行重启;
或,
若所述错误类型为连接错误或意外错误,则控制所述线程或所述线程池重启。
7.根据权利要求1所述的页面爬虫方法,其特征在于,所述操作响应数据包括对象文档模型对象;所述对所述操作响应数据进行解析,得到爬虫结果,包括:
生成所述对象文档模型对象对应的事件列表;
利用钩子函数对所述事件列表中的目标事件进行处理;所述目标事件为破坏页面逻辑的对象文档模型事件;
触发所述事件列表中的各个所述对象文档模型事件,得到所述爬虫结果。
8.根据权利要求7所述的页面爬虫方法,其特征在于,所述触发所述事件列表中的各个对象文档模型事件,得到所述爬虫结果,包括:
若触发任一所述对象文档模型事件时,检测到阿贾克斯请求,则执行所述阿贾克斯请求;
判断所述阿贾克斯请求是否执行完毕;
若执行完毕,则将所述阿贾克斯请求的执行结果确定为所述爬虫结果;
若未执行完毕,则确定需要重新判断所述阿贾克斯请求是否执行完毕。
9.根据权利要求1所述的页面爬虫方法,其特征在于,所述对所述操作响应数据进行解析,得到爬虫结果,包括:
对所述操作响应数据执行目标预处理,得到中间数据;所述目标预处理的处理方式与所述操作响应数据的数据类型相关;
对所述中间数据进行统一资源定位符提取,得到所述爬虫结果。
10.一种页面爬虫装置,其特征在于,包括:
新建模块,用于基于目标网页地址,在浏览器中新建标签页;
模拟控制模块,用于对所述标签页执行模拟控制操作,并对所述模拟控制操作进行监听,得到操作响应数据;
结果获取模块,用于对所述操作响应数据进行解析,得到爬虫结果。
11.一种电子设备,其特征在于,包括存储器和处理器,其中:
所述存储器,用于保存计算机程序;
所述处理器,用于执行所述计算机程序,以实现如权利要求1至9任一项所述的页面爬虫方法。
12.一种计算机可读存储介质,其特征在于,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1至9任一项所述的页面爬虫方法。
CN202111155641.0A 2021-09-29 2021-09-29 一种页面爬虫方法、装置、电子设备及可读存储介质 Pending CN113868502A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111155641.0A CN113868502A (zh) 2021-09-29 2021-09-29 一种页面爬虫方法、装置、电子设备及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111155641.0A CN113868502A (zh) 2021-09-29 2021-09-29 一种页面爬虫方法、装置、电子设备及可读存储介质

Publications (1)

Publication Number Publication Date
CN113868502A true CN113868502A (zh) 2021-12-31

Family

ID=79000807

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111155641.0A Pending CN113868502A (zh) 2021-09-29 2021-09-29 一种页面爬虫方法、装置、电子设备及可读存储介质

Country Status (1)

Country Link
CN (1) CN113868502A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115858902A (zh) * 2023-02-23 2023-03-28 巢湖学院 一种页面爬虫规则更新方法、系统、介质及设备
CN117370635A (zh) * 2023-12-08 2024-01-09 杭州实在智能科技有限公司 用于rpa网页内容提取与处理的方法及系统

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115858902A (zh) * 2023-02-23 2023-03-28 巢湖学院 一种页面爬虫规则更新方法、系统、介质及设备
CN115858902B (zh) * 2023-02-23 2023-05-09 巢湖学院 一种页面爬虫规则更新方法、系统、介质及设备
CN117370635A (zh) * 2023-12-08 2024-01-09 杭州实在智能科技有限公司 用于rpa网页内容提取与处理的方法及系统
CN117370635B (zh) * 2023-12-08 2024-03-15 杭州实在智能科技有限公司 用于rpa网页内容提取与处理的方法及系统

Similar Documents

Publication Publication Date Title
US20210294727A1 (en) Monitoring web application behavior from a browser using a document object model
CN108304498B (zh) 网页数据采集方法、装置、计算机设备和存储介质
US8527860B1 (en) System and method for exposing the dynamic web server-side
US8849985B1 (en) On-the-fly instrumentation of Web applications, Web-pages or Web-sites
US7958232B1 (en) Dashboard for on-the-fly AJAX monitoring
JP5511845B2 (ja) マークアップ言語を通してクライアント・ブラウザ状態のサーバ側ロギングを遂行するための方法
US8639743B1 (en) System and method for on-the-fly rewriting of JavaScript
US9798524B1 (en) System and method for exposing the dynamic web server-side
US8914774B1 (en) System and method for tagging code to determine where the code runs
CN108415804B (zh) 获取信息的方法、终端设备及计算机可读存储介质
CN113868502A (zh) 一种页面爬虫方法、装置、电子设备及可读存储介质
CN112637361B (zh) 一种页面代理方法、装置、电子设备及存储介质
US8806431B1 (en) Aspect oriented programming
US8756579B1 (en) Client-side and server-side unified validation
CN103177115A (zh) 一种提取网页页面链接的方法和装置
CN111930472B (zh) 一种代码调试方法、装置、电子设备及存储介质
EP1717715B1 (en) State machine-driven interactive system and associated methods
EP3291109A1 (en) Document object model transaction crawler
CN111679976A (zh) 一种页面对象的查找方法及装置
CN111949903B (zh) 一种网页数据采集方法、装置、设备及可读存储介质
US8938491B1 (en) System and method for secure binding of client calls and server functions
US20210064685A1 (en) Identifying a script that originates synchronous and asynchronous actions
CN117879976B (zh) 基于跨站脚本攻击的请求数据处理方法、计算机设备
CA2538504C (en) Method and system for obtaining script related information for website crawling
CN115237698A (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