http://www.kaiyuanba.cn/list/107-1.htm
http://blog.csdn.net/lu8000/article/details/10693091
http://www.open-open.com/lib/view/1324864120014
http://www.php100.com/html/download/pl/2013/0111/9090.html
http://d.wanfangdata.com.cn/Periodical_xddzjs201318019.aspx
http://blog.csdn.net/lu8000/article/details/10693091
利用Webkit抓取动态网页和链接:http://www.cnblogs.com/Jiajun/archive/2012/12/12/2813888.html
Headless Browser: A headless browser is a web browser without a graphical user interface. In other words it is a browser, a piece of software, that access web pages but doesn’t show them to any human being. They’re actually used to provide the content of web pages to other programs.
学Ajax爬虫原理
转自http://bbs.cnyouling.com/bbs-read-run?tid=4456
随着WEB2.0流行开源,DIV+CSS已经成为网站开发的标配,而Ajax则是在这个中间起着连贯不同页面的粘合剂。这给爬虫开发人员来带来了较大的压力,不管是搜索引擎开发人员,还是我们这些安全屌丝,如何最全面地爬取网站链接和参数已经成为如何优于其他同类产品的优势,比如最近崛起的AISEC扫描器[1],其主打首款支持AJAX爬虫检测的特点更是在其他安全产品中脱颖而出,受到安全人员的好评,那么AJAX爬虫究竟是如何工作的呢,作者带着这个疑问对相关技术进行了理解,现分享如下。PS,如何你还不知道什么是Ajax、DOM的话,最好Google下(多搜索对你有好处~)。
2、研究现状
AJAX,也就是Asychronous Javascript and XML,由于采用了Javascript驱动的异步请求响应机制,以往的爬虫们缺乏Javascript语义上的理解,基本上是无法模拟触发Javascript的异步调用并解析返回的异步回调逻辑和内容。另外AJAX的应用中,Javascript会对DOM结构进行大量地变动,甚至页面所有的内容都是通过Javascript直接从服务器端读取并动态绘制出来,91ri.org这个对于“习惯了”DOM结构相对不变的静态页面,简直是无法理解的.由此可以看出,以往的爬虫是基于协议驱动的,而对于AJAX这样的技术,所需要的“爬虫”引擎必须是基于事件驱动的。要实现事件驱动。
学术界发表的相关论文有Crawling Ajax-driven Web 2.0 Applications[3],AJAX CrawlMaking AJAX Applications Searchable[4]等(下个系列再添加)其中第一篇文章中采用的是rbNarcissus(验证和分析Javascript代码,非执行)[5], Watir(一款基于ruby的自动化测试工具,通过代码操作浏览器)[6],提出了这类爬虫面临这下面三方面的问题:
Javascript分析与Ajax之间的交互
DOM事件的处理和解释分发
动态DOM内容语义的创建
3、论文实例讲解
第一篇文章中的作者从三方面解决上面的问题:
如何处理事件驱动的爬虫?
例如一个网站的源码是:
01 !DOCTYPE html PUBLIC -W3CDTD XHTML 1.0 StrictEN
02 httpwww.w3.orgTRxhtml1DTDxhtml1-strict.dtd
03 html xmlns=httpwww.w3.org1999xhtml
04 head
05 titleDynamic sitetitle
06 script src=.srcmaster.jsscript
07 scriptloadhtml()script
08 div id='main'div
09 div id='myarea'div
10 body
11 html
很明显,如果基于协议的爬虫是无法爬取该网站的链接和内容的,页面的内容是通过Javascript来动态创建的,而这类创建一般都是通过XHR请求来创建的。
如何分析Javascript代码?
我们需要工具来对网页中的Javascript进行分析,看是否调用了XHR,这里就可以用rbNarcissus来进行分析
01 Dcrawl-ajax jsparser.rb master.js
02 ---- XHR call mapping ----
03 http.onreadystatechange
04 getQuote[XHR found]
05 getPrice
06 loadmyarea[XHR found]
07 loadhtml[XHR found]
08 --------------------------
09 ---- Function mapping ----
10 http.onreadystatechange
11 getQuote
12 [+]http.onreadystatechange
13 getPrice
14 [+]getQuote
15 loadmyarea
16 [+]http.onreadystatechange
17 loadhtml
18 [+]http.onreadystatechange
19 --------------------------
处理结果发现有XHR调用,并得出了一些内部关联getQuote,loadmyarea和loadhtml,因此就需要浏览器去触发这类行为。
利用IE和Watir进行测试?
可以利用一些自动化工具进行测试,为了更好地观察效果,采用irb(命令行交互)进行测试,如何要更好地查看网络通信,可以用burp设置代理。
1 Dcrawl-ajax irb --simple-prompt
2 require 'watir'
3 = true
4 include Watir
5 = Object
6 require 'webtraffic'
7 = tru
新建IE对象
1 ie=IE.new
请求页面,
1 ie.goto(httpajax.example.com)
2 = 4.847
查看页面链接
1 ie.show_links
2 index name id href
3 textsrc
4 1 Login httpajax.example.comlogin.asp
5 2 News httpwww.91ri.org news.asp
6 3 Your area Javascriptloadmyarea()
7
8 = nil
9
可以看到有三个链接,通过发现一个链接还有JavaScript代码,打开链接3,
1 ie.links[3].html
2 = A href=javascriptloadmyarea()Your areaA
3 ie.links[3].href
4 = javascriptloadmyarea()
再次点击页面:
1 ie.links[3].click
2 =
3
最后这个链接生成了个人页面。
通过前面的技术得到了下面这些链接:
01 ie.show_links
02 index name id href
03 textsrc
04 1 httpajax.example.comlogin.asp
05 Login
06 2 httpajax.example.comnews.asp
07 News
08 3 javascriptloadmyarea()
09 Your area
10 4 httpajax.example.comtrade.asp
11 Online trade
12 5 httpajax.example.combank.asp
13 Your Bank
14 6 httpajax.example.commail.asp
15 Mail
16 = nil
17
下面继续分析按钮事件:
1 ie.buttons.length
2 = 1
3 ie.buttons[1].html
4 = INPUT οnclick=getPrice(this.form) type=button value=Get name=button
5 ie.buttons[1].click
6 =
7
发现这个页面调用了getPrice这个函数,而这个页面又将参数提交到了myquote.asp这个页面
通过XHR和按钮就把页面所有的内容全部链接抓出来了。
4、本节总结
这节主要对AJAX爬虫的需求出发,阐述了该类爬虫面临的一些困难,并以一篇paper进行阐述其详细过程,通过这个实例相信对整个过程也有一定的了解,下篇文章继续,周末愉快~
参考文献
0)httpblog.ourren.com20121214learn_ajax_crawl_with_ourren_1.html
1)AIScanner httpwww.aisec.cn
2)网络爬虫如何抓取web2.0 Ajax页面 httpblog.minidx.com2007103139.html
3)Crawling Ajax-driven Web 2.0 Applications httpwww.infosecwriters.comtext_resourcespdfCrawling_AJAX_SShah.pdf
4)AJAX Crawl Making AJAX Applications httpe-collection.library.ethz.cheserveth30709eth-30709-01.pdf
5)rbnarcissus httpcode.google.comprbnarcissus
6) Watir httpwatir.com
深层网站AJAX页面数据采集研究论述: