https://github.com/emyller/webkitcrawler

一个开源的项目,可以快速入门。

http://spiderformysql.com/

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://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://

WebKit爬虫的更多相关文章

  1. fedora环境安装webkit支持作爬虫下载解析JS

    环境: 我使用的fedora19.1-xfce版本,属于redhat系的桌面环境. 1.安装 webkit源码安装webkit失败,这里提供的是yum安装方式. a.查看当前yum库中的webkit资 ...

  2. 【ShoppingWebCrawler】-基于Webkit内核的爬虫蜘蛛引擎概述

    写在开头 在各个电商平台发展日渐成熟的今天.很多时候,我们需要一些平台上的基础数据.比如:商品分类,分类下的商品详细,甚至业务订单数据.电商平台大多数提供了相应的业务接口.允许ISV接入,用来扩展自身 ...

  3. 【文智背后的奥秘】系列篇——分布式爬虫之WebKit

    版权声明:本文由文智原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/139 来源:腾云阁 https://www.qclou ...

  4. Webkit内核开源爬虫蜘蛛引擎

    C#开发的基于Webkit内核开源爬虫蜘蛛引擎 https://www.cnblogs.com/micro-chen/p/9075590.html 概述 在各个电商平台发展日渐成熟的今天.很多时候,我 ...

  5. 【ShoppingPeeker】-基于Webkit内核的爬虫蜘蛛引擎 ShoppingWebCrawler的姊妹篇-可视化任务Web管理

    ShoppingPeeker 这个项目是蜘蛛项目的可视化任务站点. 项目github地址:ShoppingPeeker 开发语言:C# 开发工具:Visual Studio 2017 +.Net Co ...

  6. headless webkit(无界面浏览器、爬虫)

    phantomjs / puppeteer https://github.com/amir20/phantomjs-node https://github.com/GoogleChrome/puppe ...

  7. Python爬虫小白入门(四)PhatomJS+Selenium第一篇

    一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...

  8. Java豆瓣电影爬虫——抓取电影详情和电影短评数据

    一直想做个这样的爬虫:定制自己的种子,爬取想要的数据,做点力所能及的小分析.正好,这段时间宝宝出生,一边陪宝宝和宝妈,一边把自己做的这个豆瓣电影爬虫的数据采集部分跑起来.现在做一个概要的介绍和演示. ...

  9. Python爬虫进阶二之PySpider框架安装配置

    关于 首先,在此附上项目的地址,以及官方文档 PySpider 官方文档 安装 1. pip 首先确保你已经安装了pip,若没有安装,请参照 pip安装 2. phantomjs PhantomJS ...

随机推荐

  1. GitHub详解(转)

    GitHub 是一个共享虚拟主机服务,用于存放使用Git版本控制的软件代码和内容项目.它由GitHub公司(曾称Logical Awesome)的开发者Chris Wanstrath.PJ Hyett ...

  2. java学习笔记-继承中super关键字

    背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...

  3. Linux 静态库&动态库调用

    1.什么是库在windows平台和linux平台下都大量存在着库.本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和linux的本质不同,因此二者库的二进制是不 ...

  4. Android 仿 窗帘效果 和 登录界面拖动效果 (Scroller类的应用) 附 2个DEMO及源码

    在android学习中,动作交互是软件中重要的一部分,其中的Scroller就是提供了拖动效果的类,在网上,比如说一些Launcher实现滑屏都可以通过这个类去实现.下面要说的就是上次Scroller ...

  5. MSSQL - 自增1的标识列一次增长了1000

    @情若天_RunUp: 1. Open "SQL Server Configuration Manager"2. Click "SQL Server Services&q ...

  6. 使用JDK自带的工具将中文转换为ascii码

    有时候在MyEclipse中,文件只能保存为“ISO-8859-1”的类型,而这种类型的文件时无法保存中文数据的,那么我们只能将中文数据经过Unicode编码才能往文件中保存,这里可以使用JDK自带的 ...

  7. CAS 单点登录

    首先,何谓单点登录. 单点登录(Single Sign On),简称为 SSO,是眼下比較流行的企业业务整合的解决方式之中的一个. SSO的定义是在多个应用系统中,用户仅仅须要登录一次就能够訪问全部相 ...

  8. cocos2d-x lua 内存回收

    使用cocos2d-x lua架构,游戏中存在两种内存回收方式. 1.cocos2d-x 本身内存回收 PS:假设在lua在创建一个类,继承cocos2d-x的一个类A,则该A也遵循cocos2d-x ...

  9. [知识库分享系列] 二、Web(高性能Web站点建设)

    知识库分享系列: [知识库分享系列] 二..NET(ASP.NET) [知识库分享系列] 一.开篇 分享介绍 此知识库之所以为 Web 系列,因为和 .NET 没有完全的关系,其中的技术和实践实用于各 ...

  10. winform实现listview中combox

    一.概要 因为要在项目中要在ListView中实现下拉框选择,用DataGrid的话,一个不美观,二个绑定数据麻烦,参考网上一种做法,就是单击ListView时,判断单击的区域,然后将Combox控件 ...