本发明涉及网络爬虫技术领域,提供了一种基于浏览器插件的网络爬虫系统。
背景技术:
网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的url开始,获得初始网页上的url,在抓取网页的过程中,不断从当前页面上抽取新的url放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的url队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页url,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索。
现有技术:
方案一:主流的网络爬虫系统(如开源项目scrapy),通过在服务器端,模拟浏览器发起网络请求,模拟浏览器网页渲染过程,获取网页最终源代码。
方案二:一种基于浏览器内核的网络爬虫系统如专利:201611005039.8
现有技术缺点
方案一缺点:在服务器端模拟浏览器发起网络请求,模拟浏览器网页渲染过程的方式,与浏览器实际打开网页,始终存在偏差。在某些情况下,比如不支持最新的js/css规范,模拟的结果会出现错误。然而开发一款新的模拟浏览器,其花费的代价太大,导致现有的模拟浏览器已经不能适应目前现有的各种网页类型。
方案二优点:基于浏览器的网络爬虫系统,解决了方案一的缺点,即直接通过浏览器而非模拟器,得到网页最终源代码。
方案二缺点:基于浏览器内核开发,需要修改浏览器内核代码,重新编译得到新的浏览器,对开发人员要求高,开发速度慢,开发成本高,难以快速满足定制化数据爬取需求。
技术实现要素:
本发明解决的问题如下:传统的爬虫程序,需要实现模拟器来完成网页的渲染过程。模拟器需要模拟执行html、js、css代码,并兼容不同版本,工作量大实现难度高。
由于传统的思路都是在后端实现爬虫,后端程序员对浏览器插件不熟悉,将两者结合相当于跨领域,要求知识全面,一般人想不到,所以主流方案并没有采用这种方式。
为解决上述技术问题,本发明采用以下技术方案:
一种基于浏览器插件的网络爬虫方法,包括以下步骤:
步骤s1、打开种子网页,浏览器发起网络请求加载网页初始源代码;
步骤s2、浏览器获取网页初始源代码后,执行网页初始源代码中的html、css、js代码,得到网页中间源代码;
步骤s3、浏览器执行网页中间源代码中的动态js代码,发起ajax请求,获取网页数据;
步骤s4、浏览器获取网页数据后,根据网页中间源代码中的js代码逻辑,将数据插入到网页中间源代码中,渲染得到网页最终源代码;
步骤s5、浏览器渲染得到网页最终源代码后,触发网页加载完成事件;
步骤s6、插件监听浏览器网页加载完成事件,当浏览器出发网页加载完成事件时,插件收到浏览器通知,调起插件的网页处理程序;
步骤s7、插件的网页处理程序,通过调用浏览器获取网页源代码接口,得到网页最终源代码;
步骤s8、插件的网页处理程序,通过将网页最终源代码作为接口参数,调用浏览器下载接口,将网页最终源代码下载至本地,完成当前网页的爬取;
步骤s9、插件的网页处理程序,解析网页最终源代码的所有网页url,去重后保存至待抓取队列中,得到下一步待抓取的网页;
步骤10、插件的抓取调度程序,轮询检查待抓取队列,如果待抓取队列不为空,则根据先进先出的原则,从队列中取出最先进入队列的网页url,调用浏览器打开新标签接口,打开该网页url,并跳转至步骤s6完成下一个网页抓取;
步骤s11、插件的抓取调度程序,轮询检查待抓取队列,如果抓取队列为空,则所有网页抓取结束,结束本次抓取任务。
一种基于浏览器插件的网络爬虫装置,包括以下装置:
加载模块:打开种子网页,浏览器发起网络请求加载网页初始源代码;
中间源代码生成装置:浏览器获取网页初始源代码后,执行网页初始源代码中的html、css、js代码,得到网页中间源代码;
网页数据获取模块:浏览器执行网页中间源代码中的动态js代码,发起ajax请求,获取网页数据;
渲染模块:浏览器获取网页数据后,根据网页中间源代码中的js代码逻辑,将数据插入到网页中间源代码中,渲染得到网页最终源代码;
触发模块:浏览器渲染得到网页最终源代码后,触发网页加载完成事件;
监听模块:插件监听浏览器网页加载完成事件,当浏览器出发网页加载完成事件时,插件收到浏览器通知,调起插件的网页处理程序;
网页处理模块:插件的网页处理程序,通过调用浏览器获取网页源代码接口,得到网页最终源代码;
下载模块:插件的网页处理程序,通过将网页最终源代码作为接口参数,调用浏览器下载接口,将网页最终源代码下载至本地,完成当前网页的爬取;
待抓取网页模块:插件的网页处理程序,解析网页最终源代码的所有网页url,去重后保存至待抓取队列中,得到下一步待抓取的网页;
循环调度模块:插件的抓取调度程序,轮询检查待抓取队列,如果待抓取队列不为空,则根据先进先出的原则,从队列中取出最先进入队列的网页url,调用浏览器打开新标签接口,打开该网页url,并跳转至监听模块完成下一个网页抓取;
结束判断模块:插件的抓取调度程序,轮询检查待抓取队列,如果抓取队列为空,则所有网页抓取结束,结束本次抓取任务。
因为本发明采用了以上技术方案,因此具备以下有益效果:
一、基于插件开发网络爬虫系统,简单易行,成本低。
二、直接通过浏览器而非模拟器,得到网页最终源代码,不存在模拟偏差。也不需要额外开发模拟浏览器。
三、以插件的形式通过浏览器接口即可获取浏览器能力,不需要修改浏览器内核代码,插件开发简单快速。
四、基于浏览器插件实现网络爬虫,无须修改内核代码,即可获取浏览器各种能力,简单高效。
五、本发明克服了现有技术的技术偏见,由于传统的思路都是在后端实现爬虫,从前端浏览器插件实现爬虫,克服了传统爬虫模拟浏览器的弊端,且插件可快速配合浏览器进行扩展。
具体实施方式
下面将结合具体实施方式对本发明作进一步的描述。
一种基于浏览器插件的网络爬虫方法,包括以下步骤:
步骤s1、打开种子网页,浏览器发起网络请求加载网页初始源代码;
步骤s2、浏览器获取网页初始源代码后,执行网页初始源代码中的html、css、js代码,得到网页中间源代码;
步骤s3、浏览器执行网页中间源代码中的动态js代码,发起ajax请求,获取网页数据;
步骤s4、浏览器获取网页数据后,根据网页中间源代码中的js代码逻辑,将数据插入到网页中间源代码中,渲染得到网页最终源代码;
步骤s5、浏览器渲染得到网页最终源代码后,触发网页加载完成事件;
步骤s6、插件监听浏览器网页加载完成事件,当浏览器出发网页加载完成事件时,插件收到浏览器通知,调起插件的网页处理程序;
步骤s7、插件的网页处理程序,通过调用浏览器获取网页源代码接口,得到网页最终源代码;
步骤s8、插件的网页处理程序,通过将网页最终源代码作为接口参数,调用浏览器下载接口,将网页最终源代码下载至本地,完成当前网页的爬取;
步骤s9、插件的网页处理程序,解析网页最终源代码的所有网页url,去重后保存至待抓取队列中,得到下一步待抓取的网页;
步骤10、插件的抓取调度程序,轮询检查待抓取队列,如果待抓取队列不为空,则根据先进先出的原则,从队列中取出最先进入队列的网页url,调用浏览器打开新标签接口,打开该网页url,并跳转至步骤s6完成下一个网页抓取;
步骤s11、插件的抓取调度程序,轮询检查待抓取队列,如果抓取队列为空,则所有网页抓取结束,结束本次抓取任务。
一种基于浏览器插件的网络爬虫装置,包括以下装置:
加载模块:打开种子网页,浏览器发起网络请求加载网页初始源代码;
中间源代码生成装置:浏览器获取网页初始源代码后,执行网页初始源代码中的html、css、js代码,得到网页中间源代码;
网页数据获取模块:浏览器执行网页中间源代码中的动态js代码,发起ajax请求,获取网页数据;
渲染模块:浏览器获取网页数据后,根据网页中间源代码中的js代码逻辑,将数据插入到网页中间源代码中,渲染得到网页最终源代码;
触发模块:浏览器渲染得到网页最终源代码后,触发网页加载完成事件;
监听模块:插件监听浏览器网页加载完成事件,当浏览器出发网页加载完成事件时,插件收到浏览器通知,调起插件的网页处理程序;
网页处理模块:插件的网页处理程序,通过调用浏览器获取网页源代码接口,得到网页最终源代码;
下载模块:插件的网页处理程序,通过将网页最终源代码作为接口参数,调用浏览器下载接口,将网页最终源代码下载至本地,完成当前网页的爬取;
待抓取网页模块:插件的网页处理程序,解析网页最终源代码的所有网页url,去重后保存至待抓取队列中,得到下一步待抓取的网页;
循环调度模块:插件的抓取调度程序,轮询检查待抓取队列,如果待抓取队列不为空,则根据先进先出的原则,从队列中取出最先进入队列的网页url,调用浏览器打开新标签接口,打开该网页url,并跳转至监听模块完成下一个网页抓取;
结束判断模块:插件的抓取调度程序,轮询检查待抓取队列,如果抓取队列为空,则所有网页抓取结束,结束本次抓取任务。
以上仅是本发明众多具体应用范围中的代表性实施例,对本发明的保护范围不构成任何限制。凡采用变换或是等效替换而形成的技术方案,均落在本发明权利保护范围之内。