网络爬虫的东东

原创 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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

实现js与Qt程序的交互的一些方法

持续更新中。。。 1.  在QtWebkit的javascript里访问QObject的最关键的关键就是下面这个方法: void QWebFrame::addToJavaScriptWindowO...

智方8000系汽车配件进销存管理系统 v8.28 bt

Welcome to my blog!智方8000系汽车配件进销存管理系统 v8.28 软件大小:3106 KB软件语言:简体中文软件类别:国产软件 / 试用版 / ...

Qt5.0 正则表达式 QRegularExpression 的使用

相对于QRegExp,QRegularExpression class修复了很多bug,提高了效率,提供了对Perl的RegEx几乎全面兼容的搜索引擎,使用时建议使用QRegularExpressio...

Qt 正则表达式 用QRegularExpression代替QRegExp

QRegularExpression 是Qt 5.0才引进的,相对于QRegExp,QRegularExpression class修复了很多bug,提高了效率,提供了对Perl的RegEx几乎全面兼...

抓取糗百内容小爬虫(python2.7) 2015最新版

由于糗百网页格式又变了了,我就小小的更新了一下,现在只能抓取文字内容,过几天写一个可以文字图片一起抓取的,这个图片一定不能遗漏啊。。。。。 有什么问题请您提出,跪求指正啊。 # -*- coding:...

Qt中用 QRegularExpression 代替QRegExp

原文地址:https://www.codeproject.com/Tips/729656/Reasons-to-abandon-and-replace-QRegExp-in-your-Qt A qui...

HtmlUnit实现ajax网络爬虫

网上关于网络爬虫实现方式有很多种,但是很多都不支持Ajax,李兄说:模拟才是王道。确实,如果能够模拟一个没有界面的浏览器,还有什么不能做到的呢?关于解析Ajax网站的框架也有不少,我选择了HtmlUn...
  • lu8000
  • lu8000
  • 2013-08-30 23:46
  • 17318

Qt的Script、Quick、QML的关系与总结

最近在学QML,感觉也不难,就是一直以来接触 Qt 的脚本类的东西的顺序是Script、Quick1、Declarative、Quick2、QML。那么每一个都是干什么的呢,这些东西搞的我有点混乱,所...
  • zhgn2
  • zhgn2
  • 2014-08-10 18:04
  • 13020

QtScript

QtScript 模块起源于 QSA,在Qt4.6时,QtScript 进行过完全重写。原来的QtScript 以 Qt Script classic的名字放到了 Qt Solutions 中。对 j...
  • bbjjqq
  • bbjjqq
  • 2011-01-26 10:46
  • 4252
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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