爬虫原理

原文地址:http://syc001.iteye.com/blog/1028001

爬虫原理: 
每个网页页面返回到客户端的都是 html,你需要的内容就在这html里面,这个html你可以用一个字符串去保存到java变量里,你要做的工作就是截取字符串相应位置的内容并保存起来 
,你给的这个网站每个商品的网页有个特殊的地方 



爬虫分为两类: 
聚集爬虫: 
聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。 

通用爬虫: 
 网络爬虫的组成 
  在网络爬虫的系统框架中,主过程由控制器,解析器,资源库三部分组成。控制器的主要工作是负责 
给多线程中的各个爬虫线程分配工作任务。解析器的主要工作是下载网页,进行页面的处理,主要是将一些JS脚本标签、CSS代码内容、空格字符、HTML标 
签等内容处理掉,爬虫的基本工作是由解析器完成。资源库是用来存放下载到的网页资源,一般都采用大型的数据库存储,如Oracle数据库 
,并对其建立索引。 

控制器: 
  控制器是网络爬虫的中央控制器,它主要是负责根据系统传过来的URL链接,分配一线程,然后启动线程调用爬虫爬取网页的过程。 
   
解析器: 
  解析器是负责网络爬虫的主要部分,其负责的工作主要有:下载网页的功能,对网页的文本进行处理,如过滤功能,抽取特殊HTML标签的功能,分析数据功能。 
   
资源库: 
  主要是用来存储网页中下载下来的数据记录的容器,并提供生成索引的目标源。中大型的数据库产品有:Oracle、Sql Server等。 



概览web爬虫 
web爬虫主要功能是从web中发现,下载以及存储内容。广泛应用于各种搜索引擎中。 
一个典型的web爬虫主要由以下的部分组成: 

  • 能被爬虫识别的URL库。
  • 文档下载模块,主要用于从web中下载内容。
  • 文档解析模块,用于解析下载文档中的内容,如解析HTML,PDF,Word等等。这个模块还要提取网页中的URL和一些对于索引有用的数据。
  • 存储文档的元数据以及内容的库。
  • 规范化URL模块,把URL转成标准的格式。
  • URL过滤器,爬虫可以过滤掉不需要的URL。



设计与实现上述模块,主要取决于你的爬虫到底要爬取什么以及要抓取的范围。最简单的例子是从一个已知的站点抓取一些网页,这个爬虫代码用一页纸 
就可以写完。互联网应用中,可能会碰到这种十分简单的需求,但是如果要实现一个爬取大量文档的爬虫,就不是那么简单了。一般来说这个爬虫就是N个应用组 
成,并且难点是基于分布式的。 

爬虫的两个阶段 
一个典型的爬虫主要有如下两个阶段 

  1. URL库初始化然后开始爬取。
  2. 爬虫读取没有访问过的URL,来确定它的工作范围。



对于要抓取的URL,要进行如下的不重 

  1. 获取URL的内容
  2. 解析内容,获取URL以及所需的数据。
  3. 存储有价值的数据。
  4. 规范化新抓取的URL。
  5. 过滤掉不需要爬去的URL。
  6. 把要抓取的URL更新到URL库中。
  7. 重复步骤2,直到抓取的网页深度完毕为止。



从广度进行分类的话,爬虫有两类。通用型和集中型。通用型是采集所有能解析的文档。它们主要通过URL过滤技术来实现这一过程。而集中型爬虫主要爬取特定内容的文档,如爬取sina博客,格式为固定内容也是我们感兴趣的。 

幸运的是,有开源的爬虫可以使用 
在java中,nutch和heritrix都提供了爬虫的实现。Nutch是apache lucene的子项目,地址是http://lucene.apache.org/nutch/ 
。这个项目非常稳定,并且文档丰富。Nutch把多个网页存储在一个文件中。对于大的爬虫来说,这么降低I/O读写,性能更加优秀。 

Heritrix是互联网存档的web爬虫。项目地址为http://crawler.archive.org/ 
。Heritrix专注于大型爬虫的实现。许可证为LGPL。 

另外提一下,还有一个项目值得关注,那就是apache tika。项目地址为http://tika.apache.org/ 
。tika使用解析器从文档中发现以及提取元数据和文本内容。 


Google:《Java开源Web爬虫分类列表》 
(1) 
ItSucks是一个java web spider(web机器人,爬虫)开源项目。支持通过下载模板和正则表达式来定义下载规则。提供一个swing GUI操作界面。下载地址:http://itsucks.sourceforge.net/ 

(2) 
WebSPHINX 
WebSPHINX是一个Java类包和Web爬虫的交互式开发环境。Web爬虫(也叫作机器人或蜘蛛)是可以自动浏览与处理Web页面的程序。WebSPHINX由两部分组成:爬虫工作平台和WebSPHINX类包。http://www.cs.cmu.edu/~rcm/websphinx/

(3) 
JSpider 
JSpider:是一个完全可配置和定制的Web Spider引擎.你可以利用它来检查网站的错误(内在的服务器错误等),网站内外部链接检查,分析网站的结构(可创建一个网站地图),下载整个Web站点,你还可以写一个JSpider插件来扩展你所需要的功能。http://j-spider.sourceforge.net/ 

(4) 
Arale 
Arale主要为个人使用而设计,而没有像其它爬虫一样是关注于页面索引。Arale能够下载整个web站点或来自web站点的某些资源。Arale还能够把动态页面映射成静态页面。 http://web.tiscali.it/_flat/arale.jsp.html 

(5) 
Web-Harvest 
Web-Harvest是一个Java开源Web数据抽取工具。它能够收集指定的Web页面并从这些页面中提取有用的数据。Web-Harvest主要是运用了像XSLT,XQuery,正则表达式等这些技术来实现对text/xml的操作。 http://web-harvest.sourceforge.net/

 

原文地址:http://www.cnblogs.com/wawlian/archive/2012/06/18/2553061.html有一些小改动进行了高亮

 网络爬虫是捜索引擎抓取系统的重要组成部分。爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份。这篇博客主要对爬虫以及抓取系统进行一个简单的概述。

一、网络爬虫的基本结构及工作流程

    一个通用的网络爬虫的框架如图所示:

    网络爬虫的基本工作流程如下:

    1.首先选取一部分精心挑选的种子URL;

    2.将这些URL放入待抓取URL队列;

    3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。

    4.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。

二、从爬虫的角度对互联网进行划分

    对应的,可以将互联网的所有页面分为五个部分:

    1.已下载未过期网页

    2.已下载已过期网页:抓取到的网页实际上是互联网内容的一个镜像与备份,互联网是动态变化的,一部分互联网上的内容已经发生了变化,这时,这部分抓取到的网页就已经过期了。

    3.待下载网页:也就是待抓取URL队列中的那些页面

    4.可知网页:还没有抓取下来,也没有在待抓取URL队列中,但是可以通过对已抓取页面或者待抓取URL对应页面进行分析获取到的URL,认为是可知网页。

    5.还有一部分网页,爬虫是无法直接抓取下载的。称为不可知网页。

三、抓取策略

    在爬虫系统中,待抓取URL队列是很重要的一部分。待抓取URL队列中的URL以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取哪个页面。而决定这些URL排列顺序的方法,叫做抓取策略。下面重点介绍几种常见的抓取策略:

    1.深度优先遍历策略

深度优先遍历策略是指网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接。我们以下面的图为例:

    遍历的路径:A-F-G  E-H-I B C D

    2.宽度优先遍历策略

    宽度优先遍历策略的基本思路是,将新下载网页中发现的链接直接插入待抓取URL队列的末尾。也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。还是以上面的图为例:

    遍历路径:A-B-C-D-E-F G H I

    3.反向链接数策略

    反向链接数是指一个网页被其他网页链接指向的数量。反向链接数表示的是一个网页的内容受到其他人的推荐的程度。因此,很多时候搜索引擎的抓取系统会使用这个指标来评价网页的重要程度,从而决定不同网页的抓取先后顺序。

    在真实的网络环境中,由于广告链接、作弊链接的存在,反向链接数不能完全等他我那个也的重要程度。因此,搜索引擎往往考虑一些可靠的反向链接数。

    4.Partial PageRank策略

    Partial PageRank算法借鉴了PageRank算法的思想:对于已经下载的网页中进行分析获取到的URL,连同待抓取URL队列中的URL,形成网页集合,计算每个页面的PageRank值,计算完之后,将待抓取URL队列中的URL按照PageRank值的大小排列,并按照该顺序抓取页面。

    如果每次抓取一个页面,就重新计算PageRank值,一种折中方案是:每抓取K个页面后,重新计算一次PageRank值。但是这种情况还会有一个问题:对于已经下载下来的页面中分析出的链接,也就是我们之前提到的可知网页那一部分,暂时是没有PageRank值的。为了解决这个问题,会给这些页面一个临时的PageRank值:将这个网页所有入链传递进来的PageRank值进行汇总,这样就形成了该未知页面的PageRank值,从而参与排序。下面举例说明:

    5.OPIC策略策略

    该算法实际上也是对页面进行一个重要性打分。在算法开始前,给所有页面一个相同的初始现金(cash)。当下载了某个页面P之后,将P的现金分摊给所有从P中分析出的链接,并且将P的现金清空。对于待抓取URL队列中的所有页面按照现金数进行排序。

    6.大站优先策略

    对于待抓取URL队列中的所有网页,根据所属的网站进行分类。对于待下载页面数多的网站,优先下载。这个策略也因此叫做大站优先策略。

posted on 2015-01-19 14:37  太极芋头  阅读(284)  评论(0编辑  收藏  举报

导航