基于WebKit的网络爬虫
2019独角兽企业重金招聘Python工程师标准>>>
https://github.com/emyller/webkitcrawler
一个开源的项目,可以快速入门。
http://crawl.group.iteye.com/关于爬虫的一个坛子,主要是Java开源组件Heritrix,nutch爬虫的源码剖析
一些基于webkit实现爬虫的文章
http://www.cnblogs.com/Jiajun/archive/2012/12/12/2813888.html
http://rfyiamcool.blog.51cto.com/1030776/1287810
http://www.haogongju.net/art/511472
http://www.google.com.tw/url?sa=t&rct=j&q=%E7%88%AC%E8%99%AB%20webkit&source=web&cd=5&ved=0CEQQFjAE&url=http%3a%2f%2fwww%2epaper%2eedu%2ecn%2fdownload%2fdownPaper%2f201012-730&ei=K6tqUtmLGeaKiQfdh4HYDA&usg=AFQjCNE-7htExUbQtDnheV0D9ZRVNwZszg&bvm=bv.55123115,d.aGc&cad=rjt
http://blog.csdn.net/rongrong0206/article/details/6087974
http://wenku.baidu.com/view/39b88fdd6f1aff00bed51eb5.html
http://www.lianglong.org/tags/webkit/
摘 要: 以AJAX技术为代表的Web应用新技术的出现,赋予了JavaScript更加丰富的功能。但也导致更多的URL以数据形式存在于JavaScript代码中,给网络爬虫的URL提取带来了新的挑战。为了解决这一问题,在此提出了一种基于WebKit的网络爬虫,以WebKit作为爬虫的前端来解析并执行JavaScript。一是实现JavaScript对网页DOM的修改,从而将存在于此类代码中的URL转换成HTML形式并以静态分析方法来提取;二是定位JavaScript页面导航的代码并且劫持输入导航方法及对象的变量以提取变量中的URL。这充分降低了客户端脚本给爬虫带来的障碍,从而更好地提取网页中的URL。
关键词: 网络爬虫; 浏览器引擎; WebKit; JavaScript
1004?373X(2013)18?0062?03
0 引 言
随着各种形式的互联网应用不断出现,互联网正在显著改变着人类的生活方式,互联网应用已经成为了一部分人类生活中不可或缺的一部分。互联网规模的不断扩大,互联网上的信息也呈几何倍数增长。如何快速准确地找到所需要的信息就成了一个难题,而网络爬虫正是解决这个问题的关键。在网络爬虫的众多应用场景中,最典型的例子就是搜索引擎。而在备受关注的Web应用安全领域,网络爬虫也是不可或缺的一部分。
网络爬虫是一个按照一定逻辑扫描或者“爬行”网页的程序或者脚本。工作流程一般是根据设定的初始URL(统一资源定位符)从网络上获取相应的内容,从这些内容中抽取出需要的信息以及URL,随后以新抽取的URL为基础重复之前的工作。网络爬虫的目的并不是单纯的“爬行”,而是为更高层次的目的所服务。比如搜索引擎所使用的爬虫在爬行的过程中会根据关键字协助搜索引擎建立索引,而黑盒Web应用漏洞扫描工具所使用的爬虫在工作时会将发现的Web应用入口记录并提交给漏洞检测模块进行检测。所以网络爬虫的工作效果将直接决定这些工作的效果。
为了解决JavaScript执行问题,本文提出了一种基于WebKit的网络爬虫。在网络爬虫中引入浏览器引擎,使得网络爬虫可以执行JavaScript并对网页进行渲染,获取网页在浏览器上呈现给用户的结果,从而在之后的分析中提取到更多的URL。
1 WebKit分析
浏览器引擎,是浏览器的核心部分,也称浏览器内核,负责对网页语法的解释(如HTML,JavaScript)并渲染网页。主流的浏览器引擎包括Trident,Gecko,Presto以及WebKit。Trident是微软Internet Explorer的浏览器引擎的名称,主要使用者有IE和世界之窗浏览器。Gecko是由Mozilla基金会开发的浏览器引擎的名字,主要代表是Firefox。Presto是一个由Opera Software开发的浏览器引擎,供Opera 7.0及以上使用。Webkit是一款开源的浏览器引擎[9],目前使用WebKit引擎的浏览器主要有苹果Safari、谷歌Chrome、遨游浏览器以及360极速浏览器。
使用WebKit引擎的浏览器都是以速度著称的浏览器,这说明了WebKit相对与其他浏览器引擎的最大优势是速度。这正是选择在网络爬虫中使用WebKit的原因。因为网络爬虫抓取网页的速度是制约网络爬虫速度的瓶颈。WebKit的核心主要由2个模块组成:WebCore和JavaScriptCore,其代码起源于自由软件社区KDE的HTML排版引擎KHTML及JavaScript引擎KJS的代码。这两个模块将完成HTML解析、JavaScript解析以及网页布局和渲染三部分工作。
WebCore主要组成部分如表1所示。
2 方案设计
网络爬虫总体上分为4个模块:网页获取模块、网页渲染模块、URL抽取模块以及URL队列管理模块。总体方案设计如图1所示。网页获取模块的功能是通过网络接口向服务器发起请求并获取服务器的响应,即获取URL对应文档的源代码。网页渲染模块的功能是解析源代码中的HTML和JavaScript,并运行JavaScript代码对网页进行渲染,即获取浏览器呈现给用户的网页形式,但是仍然是以HTML的形式存储的。URL抽取模块的功能是分析经过渲染的HTML代码,从中抽取出新的URL,并将新的URL放入链接队列中。链接抽取模块分成2个子模块:HTMLParser和JSParser。HTMLParser通过HTML语法分析和正则表达式提取URL。JSParser则对JavaScript进行进一步的处理[如果只是简单的小部分数据爬取这里其实也可以直接模拟执行用户的动作来得到这些URL]。这是由于JavaScript中可能包含引起页面跳转的语句,比如window对象的open方法,location对象的href属性和replace方法等。这些语
句当中包含有URL,但是不会引起网页DOM结构的变化,所以网页渲染模块不能使它们显现在HTML中,还需要进一步分析JavaScript以提取这些URL。URL队列管理模块的功能是管理URL队列,负责决定下一个爬行的URL,并决定哪些新发现的URL需要放入队列中。
3 运行测试
4 结 语
本文设计并实现了一种基于WebKit浏览器引擎的网络爬虫,较好地实现了网页中的JavaScript代码对网页的渲染,从而提升了网络爬虫的URL提取能力,可以有效提高搜索引擎和Web应用漏洞扫描程序的覆盖率。目前在处理用户触发的JavaScript代码(如onclick事件)方面还有所欠缺,这将是下一步的研究目标。
参考文献
Wikipedia. Web crawler [EB/OL]. [2013?05?30]. http://en.wikipedia.org/wiki/Web_crawler. University of Toronto. HTML and XHTML document type definitions [EB/OL]. [2013?04?23]. http://
源于:论文封面格式http://www.jhlyzz.cn
转载于:https://my.oschina.net/xiaominmin/blog/1828583
基于WebKit的网络爬虫相关推荐
- python网络爬虫_python小知识,基于Python 的网络爬虫技术分析
在现阶段大数据的时代中,想要实现对数据的获取和分析,要先具备足够的数据源,网络爬虫技术就为其数据获取提供了良好的条件,且还能够实现对数据源的目的性采集. 在网络爬虫技术应用中,Python 脚本语言的 ...
- 爬虫技术python流程图_基于Python的网络爬虫技术研究
基于 Python 的网络爬虫技术研究 王碧瑶 [摘 要] 摘要:专用型的网络爬虫能够得到想要的返回结果 , 本文就以拉勾网作 为例子 , 对基于 Python 的网络爬虫技术进行研究和分析. [期刊 ...
- python网络爬虫的流程图_基于Python的网络爬虫的设计与实现
龙源期刊网 http://www.qikan.com.cn 基于 Python 的网络爬虫的设计与实现 作者:高祖彦 来源:<商情> 2020 年第 33 期 [摘要]一个爬虫从网上爬取数 ...
- 【ShoppingWebCrawler】-C#开发的基于Webkit内核开源爬虫蜘蛛引擎
概述 在各个电商平台发展日渐成熟的今天.很多时候,我们需要一些平台上的基础数据.比如:商品分类,分类下的商品详细,甚至业务订单数据.电商平台大多数提供了相应的业务接口.允许ISV接入,用来扩展自身平台 ...
- 【OpenCV图像处理入门学习教程六】基于Python的网络爬虫与OpenCV扩展库中的人脸识别算法比较
OpenCV图像处理入门学习教程系列,上一篇第五篇:基于背景差分法的视频目标运动侦测 一.网络爬虫简介(Python3) 网络爬虫,大家应该不陌生了.接下来援引一些Jack-Cui在专栏<Pyt ...
- 基于python的网络爬虫编程_基于Python的网络爬虫程序设计
程序设计 ●Program Design 基于 Python的网络爬虫程序设计 网络 信 息量 的迅 猛 增 长,对 如何从海量的信息中准确的搜索 到用户需要的信息提 出了极大的 挑战.网络爬 虫具有 ...
- 基于Thinkphp5+phpQuery 网络爬虫抓取数据接口,统一输出接口数据api
TP5_Splider 一个基于Thinkphp5+phpQuery 网络爬虫抓取数据接口 统一输出接口数据api.适合正在学习Vue,AngularJs框架学习 开发demo,需要接口并保证接口不跨 ...
- 基于python的网络爬虫技术_基于python的网络爬虫技术的研究
龙源期刊网 http://www.qikan.com.cn 基于 python 的网络爬虫技术的研究 作者:刘文辉 李丽
- python爬虫论文摘要怎么写_毕业论文-基于Python 的网络爬虫.docx
北京林业大学本科毕业论文(设计) PAGE \* MERGEFORMATI 基于Python的网络爬虫 摘要 随着计算机技术的不断发展,新的编程语言层出不穷,Python,Html正是其中的佼佼者.相 ...
最新文章
- $.messager.progress ajax,ajax异步上传文件返回undefined
- 4固定在底部_自建房不搭彩钢棚,4根钢结构撑个玻璃棚遮风挡雨,上面多个露台...
- iOS开发——导入第三方库引起的unknown type name 'NSString'
- 算法基础课-动态规划-区间dp-AcWing 282. 石子合并:区间dp
- 如何表示数组所有数都不等于一个数_每日算法系列【LeetCode 330】按要求补齐数组...
- 程序架构--BS,CS
- linux系统学习第一天
- Python学习笔记之类(三)
- stm32仿真不能设置断点_使用LiteOS Studio图形化查看LiteOS在STM32上运行的奥秘
- python os 遍历 子目录中所有文件_Python处理文件系统的10种方法 !
- fedora与win双系统 设置win为默认启动
- Matlab图例legend换行
- 等腰三角形悬臂梁式光纤光栅振动传感器分析
- MySQL the configuration step Starting Server is taking the longer than expected
- 经典美文诵读2 If I Were a Boy Again假如我又回到了童年
- 硬盘、光驱、刻录机维修技术
- 手机开机启动慢是什么原因_手机开机慢,详细教您手机开机慢怎么办
- python提示unmatched_Python: Unmatched group exception
- Python三步爬取VMgirls小姐姐图片
- 洛谷 P3858 路标设置