网络爬虫的东东

原创 2013年12月04日 23:30:57

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://wenku.baidu.com/link?url=jjKm7D8QnlqMQIfUNR164NoP1WZRMMJcY-tEJMWKuoDkTDpjbbgshJ-aG5ildk7A5yWtdlJTznCwvjLm237Wym6TN3dkxBiO8TLBxc-Zyea

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 onclick=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页面数据采集研究论述:

http://www.docin.com/p-663697098.html

java 网络爬虫

  • 2017年11月23日 16:11
  • 1.04MB
  • 下载

Java网络爬虫crawler4j学习笔记<22> Parser 类

简介Parser类负责将从服务器得到的byte[]数据(存储在Page对象里)进行解析,按照binary,text,html的类型,分别调用相应的parseData类>。这里有个容易混淆的点:类Bin...

python实现网络爬虫

  • 2017年12月11日 20:43
  • 207KB
  • 下载

Python之网络爬虫完全教程

[Python]网络爬虫(一):抓取网页的含义和URL基本构成 一、网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字。 把互联网比喻成一个蜘蛛网,那么Spid...
  • roler_
  • roler_
  • 2014年07月19日 17:09
  • 8616

《用python写网络爬虫》pdf

  • 2017年11月24日 14:57
  • 9.4MB
  • 下载

用Python写网络爬虫

  • 2017年11月14日 17:37
  • 22.48MB
  • 下载

零基础自学用Python 3开发网络爬虫(五): 使用第三方模块快速抓取与解析

点击进入本系列目录 在前面的四篇文章中, 我们一直采用 python 3 自带的 urllib  模块来抓取网页, 然后用 re 模块来处理抓取到的数据. 这次我们使用 Requests 库来代替 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:网络爬虫的东东
举报原因:
原因补充:

(最多只允许输入30个字)