无锡免费做网站,注册资金100万的公司要多少钱,网站开发需要什么条件,中国在菲律宾做网站SuperSpider——打造功能强大的爬虫利器 博文作者#xff1a;加菲 发布日期#xff1a;2013-12-11 阅读次数#xff1a;4506 博文内容#xff1a; 1.爬虫的介绍 图1-1 爬虫#xff08;spider) 网络爬虫(web spider)是一个自动的通过网络抓取互联网上的网页的程序#xf…SuperSpider——打造功能强大的爬虫利器 博文作者加菲 发布日期2013-12-11 阅读次数4506 博文内容 1.爬虫的介绍 图1-1 爬虫spider) 网络爬虫(web spider)是一个自动的通过网络抓取互联网上的网页的程序在当今互联网中得到越来越广泛的使用。这种技术一般用来爬取网页中链接资源等当然更为高级的技术是把网页中的相关数据保存下来成为搜索引擎例如著名的google和百度。常见的爬虫应用还有像一淘这样的比价网站电影推荐网站等。 为了让大家进一步感受到爬虫的魅力笔者编写了一个爬取淘宝和京东数据的比价网站http://jiafei.org:8888/如图1-2所示。由于淘宝和京东的搜索结果页面中有部分内容引如价格是通过ajax动态获得的再用javascript把内容写入到相应的标签中的当搜索Iphone 5s时后台爬虫利用webkit生成去最终的dom树爬取有用的数据经过简单的处理后返回相应的结果。 图1-2 一个简单的比较网站 2.为何需要爬虫 爬虫对于扫描器来说至关重要站在整个扫描器的最前线如图2-1所示。在一个专业扫描器中一般首先会由爬虫爬取指定的页面接着把爬到的url传递给调度server,最后由调度server分发需要扫描的url给扫描agent来完成整个扫描过程。 图2-1 扫描器的组成 2.爬虫的架构与分析 Web安全对于互联网公司来说至关重要为了让公司的扫描器与业界的扫描器看齐server安全组自研了一款功能强大的爬虫——SuperSpider主要用来为漏洞扫描提供丰富的urls。SuperSpider的架构如图3-1所示首先由下载器模块下载指定的页面分析页面模块分析完成后一方面把需要的数据传递给存储模块另一方面将爬取的urls传递给去重模块去重后放到url队列中最后由调度器安排次序传递url给下载器下载新的页面。接下来详细讲讲分析页面调度器和去重这3个模块。 图3-1 爬虫的架构 3.1分析页面 简单的来说, 爬虫主要作用就是用来分析页面。 难点因为现在是web2.0时代绝大部分网页都会使用javascript处理页面而且很多网页内容都是通过Ajax技术加载的。因此只是简单地解析HTML文件会远远不够。 解决如何做到这点编写一个基于webkit的爬虫SuperSpider。下面将详细说明SuperSpider所具有的5个功能强大的爬取能力。 a. 静态页面链接分析 简单点来说就是分析html文档例如下图的一个a标签的超链接SuperSpider会识别出href中的值为一个超链接提取其值html_link.php?id1。 b. javascript动态解析 下图为一段javascript代码该代码的目的是在id为hi的a标签中提交属性href。 SuperSpider利用webkit内核执行以上javascript代码生成出以下html代码再通过静态页面链接分析获取js_link.php?id1msgabc这个url。 c. 自动分析表单 SuperSpider会自动识别出action中的值为所提交的地址提取input标签中的name和value作为参数最终生成出 post_link.php?id1msgabc 这个url。 d. 自动交互 自动交换就是说要模仿出人的行为例如点击鼠标按下回车键等下图就是一个需要点击鼠标的例子。 SuperSpider会自动识别出onclick是一个交换行为从而执行里面的js代码生成出以下html从而爬到了 click_link.php?id1 这个url。 e. hook所有的网络请求 这是一个ajax请求有别于以上4种基于dom树解析的分析技术要捉到其请求的url只能通过hook请求而webkit文档中并没有提到hook 网络请求的方法。于是通过修改webkit代码hook住每一个由webkit发送出去的请求从而拿到了 ajax_link.php?id1t1这个url。 3.2调度器 SuperSpider的调度器使用广度优先搜索策略具体的逻辑如下图所示。首先从入口页面1.html中爬到了2.html, 3.html和4.html依次把它们放到url队列中。接着取出2.html把爬到的5.html和6.html放到url队列中随后便开始爬取3.html依广度次序进行。 图3-2-1 爬虫调度的广度优先搜索策略 3.3去重 为了扫描的质量和效率需要进行去重。例如大部分网站中日期作为其url的组成部分尤其是门户网站。SuperSpider使用将数字替换成d的算法对url进行去重。例如 1.http://video.sina.com.cn/ent/s/h/2010-01-10/163961994.shtml?a1b10 2.http://video.sina.com.cn/ent/s/h/2009-12-10/16334456.shtml?a12b67 对数字进行模式处理为 http://video.sina.com.cn/ent/s/h/d-d-d/d.shtml?adbd 如果链接1已经爬取过链接2与链接1类似 不重复爬取。 试验证明这种方法简捷高效漏爬率极低大大提升扫描器的效率。 4.爬虫的具体实现 a.webkit的易用性 常用的chrome, safari等浏览器都是基于webkit内核不过提起这个内核大家可能会觉得有点庞大艰深。但如果只是对于应用层面来说webkit使用起来还是挺简易的。如图4-1所示只需14行便可以写出一个浏览器。 图4-1 使用webkit编写的浏览器 b.难点解决 问题Webkit需要视窗系统才能正常启动而服务器一般都没有视窗系统的那么如何在后台稳定地运行webkit?之前是去掉webkit中的图形渲染css等与gui有关的代码太麻烦易出众多bug。 解决使用xvfb虚拟出一个视窗系统只需把alert, confirm, prompt的代码注释掉因为会让浏览器卡住简单快捷稳定。 c.爬虫的逻辑代码 图4-2为爬虫的逻辑代码在parse函数里利用webkit生成出来的dom树来做具体的第三部分所提到的分析逻辑。 图4-2 爬虫的逻辑代码 5.效果 SuperSpider与wvs的爬虫对比在著名的爬虫测试平台http://demo.aisec.cn/demo/进行测试该平台要求爬虫要完全具备3.1所提到的5个功能才能爬取到所有的url,上图为扫描器的爬虫下图为wvs的爬虫, 其中click_link.php (在3.1.d提到是需要爬虫具有自动交换能力才能爬取到的。 结论SuperSpider全部都能爬到, 在自动交互方面比wvs表现更好 图4-1 SuperSpider与wvs的结果对比 6.结尾 以上笔者的一些思考与总结欢迎大牛们的意见和建议转载于:https://www.cnblogs.com/mfryf/p/3660640.html