作者:渡渡鸟工作室http://hi.baidu.com/dudubirdstudio(版权所有,转载须注明出处)
spider是整个搜索引擎系统中很重要的一个组成部分,可以说是搜索引擎的基础。它不仅仅是为搜索引擎提供了搜索对象——海量数据,更重要的是它使搜索引擎从一个检索工具上升为一个信息整合的平台。
搜索引擎的本质就是信息的整合,通过信息的整合构建了一个用户平台。这样就使得搜索引擎成为一个很好的且很有利润的商业化对象。
好的搜索引擎必须配一个好的spider,好的spider需要设计人员优雅的去设计。
设计时spider重点要解决以下几个问题:
1. 抓取的效率
抓取的效率和计算机硬件的性能、硬件的多少、网络的带宽有关系,但为了提高抓取效率不能一味地增加硬件,而是要利用有限的硬件资源在一定的时间内抓取最多的的网页。
常见的提高抓取效率的策略有:
(1)采用多线程并发抓取
(2)采用单线程、非阻塞I/O抓取
(3)分布式抓取,把抓取工作分布到多台服务器完成,对于Google这样的搜索引擎还包括地理上的分布式,把抓取服务器机群分布到全球各个国家的主干网上抓取。
(4) 抓取的效率很大程度也取决于抓取的对象——网站服务器和带宽的速度。因此设计spider时要有估算抓取网站服务器负载和带宽的功能并且有一个很好调度策略,使得访问不同状况网站服务器有不同的频率。
2. 抓取的质量
设计spider的目标不是把互联网上的所有网页都抓回来,而是抓重要的而且是最新的网页的即可。
怎样抓取高质量的网页?哪些网页是质量比较高的?这里就要求设计人员对互联网以及用户的习惯和常理都有一定的理解。
从互联网整体上看,网站中各个网页之间的链接关系是一个很重要的资源,因此在抓取网页时要记录网页之间的链接关系,以便进行链接分析,从而通过链接关系来评价网页的质量。
网页重要性的评价指标可以从以下几个方面着手:
(1)某个网页的链接深度。
(2)网页的入度。
(3)网页的父网页的入度。
(4)网页的重复数。
以上这些指标都基于这么几个常理:
(1)网站最重要的网页都放在前面,即层次越浅。网站首页以及首页指向的网页都是比较重要的。
(2)有很多网页、很重要的网页都指向这个网页,这个网页就比较重要,就像检索工具《SCI》评价论文的质量一样,被引用的论文的次数越多,则说明这篇论文比较重要。
(3)第二点讲的是引用,还有一个就是转载,网页转载的次数越多,则说明这个网页比较重要,就像报纸或杂志文章一样,好的文章都被其他媒体大量转载。
具体实现时除了第一个指标外,其他三个指标只有在预处理阶段的统计才能得出。
所以在抓取时应首先获得尽量多的网站首页,然后从该网站首页出发采用先宽的抓取策略。
3. 抓取的礼貌问题
礼貌的抓取具体表现在:网站不让抓取的网页就不要抓取,控制好访问网站的频率,spider的抓取行为不能影响正常用户的访问。因此spider在抓取时要:
(1)限制单位时间内对一个网站抓取网页的数量。
(2)限制同时对同一个网站抓取的线程/进程的数量。
(3)控制对同一个网站抓取的时间间隔。
(4)遵循robots、META Tag 、sitemap.htm协议 ,对不允许访问的目录不访问。
(5)在抓取网页的时发送的请求中,通过User-agent、Form字段,标识spider的身份、联系Email、spdier注意事项页面URL。
4. 避免重复抓取
之所以会造成重复抓取,是因为:
(1)互联网上大量网页被其他网页引用,这就使得同一个网页的URL出现在多个不同的网页中,这就要求spider必须有URL消重功能。
(2)网页被其他网页转载,这就使得同一篇文章出现在不同URL的页面中,这就要求spider具有内容消重功能,目前这块比较难以实现,当前很多搜索引擎公司都没有较好的解决这个问题。
(3)网页的URL有多种表示形式,这是由于DNS与IP对应关系造成的。
一个URL对应一个网页,但由于URL可以采用以下两种表示方式:
[协议://]域名[:端口][/路径/文件名]
[协议://]点分十进制IP地址[:端口][/路径/文件名]
且域名与IP存在以下对应关系:
-- 一对一,http://www.baidu.com 与http://220.231.39.97指向的是同一网页。
-- 一对多,DNS轮转,http://www.163.com 与http://202.108.42.73,http://202.108.42.91指向的是同一网页。
-- 多对一,虚拟主机,多个域名对应同一个ip,不同的URL指向不同的网页。
一个网站具有多个域名,对应同一个IP,例如:www.netease.com,www.163.com指向同一个网页。
- - 多个域名对应多个ip ,一个网站有多个域名,同时采用了DNS轮转技术,一个域名对应多个ip地址。
5. 抓取数据的更新
抓取数据的更新问题是一个很重要的问题,它决定了用户能不能马上搜索到最新的新闻,最新的内容,但是由于互联网上海量的网页使得一次抓取的周期都很长 ,如果通过每次重新抓取一次来更新,势必更新周期很长。
spider已经抓取的网页可能被修改、删除,spider要定期检测这些网页的更新情况,同时更新原始网页库、提取的数据库以及索引库。
互联网上同时不断的产生新的网页,spider也要抓取回来。
不同的网站的更新周期不一样,有的很长,有点很短。
spider要根据网站的更新周期,对网站进行分类,不同更新周期的网站抓取的周期不一样。
一般来说,网络蜘蛛在更新原始网页库等的时候,不用把URL对应的网页重新抓取一遍,对于大部分的网页,只需要HTTP Head请求、条件Get请求来更新。
6.内容提取
spider要抓取的文件各种各样,比如有HTML、XML网页,有doc、ppt、xls、pdf等带格式的文档,有图片、音频、视频等多媒体数据,对这些不同类型文件spider都要提取出文件里的纯文本内容。
对于doc、pdf等文档,这种由专业厂商提供的软件生成的文档,厂商都会提供相应的文本提取接口。
对于HTML、XML网页来说,除了标题和正文以外,会有许多版权信息、广告链接以及公共的频道链接,这些链接和文本正文一点关系也没有,在提取网页内容的时候,也需要过滤这些无用的链接。
对于多媒体、图片等文件,一般是通过链接的锚文本(即,链接文本)和相关的文件注释来判断这些文件的内容。另外,许多多媒体文件中有文件属性,考虑这些属性也可以更好的了解文件的内容。
对于网页内容的提取一般采用插件的形式,通过一个插件管理服务程序,遇到不同格式的网页采用不同的插件处理。这种方式的好处在于扩充性好,以后每发现一种新的类型,就可以把其处理方式做成一个插件补充到插件管理服务程序之中。
7. 硬件投入、抓取速度、一次抓取时间、抓取数据量等估算
孙子曰:凡是预则立,不预则废。强调计划的重要性。很多事情也要做到心中有数。
设计一个spider一定要考虑抓取10亿网页需要多长时间,需要多少硬盘来存,需要多少服务器来抓等。这些都可以通过估算得到一个最好/最大值的。
例如:抓取时应该使用多少台机器以及一台机器启动多少抓取进程/线程呢?
这里要考虑硬件资源情况:
-- 局域网带宽 //发送速率
-- 互联网接入带宽
-- 局域网时间延迟 //1 ~ 10 ms
-- 互联网时间延迟 //100 ~ 500 ms
-- 服务器端接收请求、响应时间
-- CPU利用率
-- 内存大小以及利用率
-- 硬盘大小以及读写速度
-- 系统负载情况
以上提到了设计spider时要着重考虑的几个问题,这只是从大的方面概略地介绍了以一下,技术其实还是一门精工细作的工作,需要技术人员不断地去打磨。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chengg0769/archive/2007/08/13/1741710.aspx
分享到:
相关推荐
在使用Spider进行网络分析时,有几个关键知识点需要掌握: 1. **HTTP协议**:理解HTTP协议的基本原理,包括请求方法(GET、POST等)、响应状态码和头部信息,这对于编写高效的爬虫至关重要。 2. **网页解析**:...
SpiderMonkey的工作原理主要分为以下几个步骤: 1. **解析阶段**:SpiderMonkey接收到JavaScript源代码后,首先将其转化为抽象语法树(AST,Abstract Syntax Tree)。这个过程类似于编译器的词法分析和语法分析,将...
Scrapy由几个关键组件构成,包括Spiders(蜘蛛)、Item Pipeline、Downloader Middleware(下载中间件)和Request/Response对象。在"spider_news_all"中,Spiders是核心部分,负责定义如何从目标网站抓取数据。它们...
本设计主要涉及以下几个核心知识点: 1. **面向对象设计**:使用面向对象的方法进行分析和设计,有助于模块化和抽象化Spider的各个组件,使得系统更具扩展性。对象可以代表如爬虫客户端、服务器监控器等实体,它们...
Spider 的运行流程可以分为以下几步: 1. 以初始的 URL 初始化 Request,并设置回调函数。当该 request 下载完毕并返回时,将生成 response,并作为参数传给该回调函数。 2. 在回调函数内分析返回的网页内容,返回 ...
代码结构方面,一个简单的豆瓣爬虫项目可能包括以下几个部分: 1. 设置请求参数,如URL、headers、cookies等。 2. 使用requests发送请求并获取响应。 3. 解析响应内容,使用BeautifulSoup或其他解析库。 4. 提取所...
在"spider优化技术"中,有几个关键点需要注意: 1. **并发控制**:优化爬虫性能的一个常见方法是设置多线程或异步请求,以同时抓取多个网页,但要注意避免对目标服务器造成过大压力,防止被封IP。 2. **动态加载...
在"spidermonkey 1.6,包含dll和lib,release版本"的描述中,我们可以提取出几个关键点: 1. **Release版本**:这意味着它是经过完整测试和优化的稳定版本,适合用于生产环境。相比于开发版本,release版本通常会有...
网络爬虫的工作流程主要包括以下几个步骤: 1. **种子URL获取**:首先,爬虫需要有一批起始URL(种子URL),通常是用户指定的特定网站或者从已有的索引中获取。 2. **页面下载**:爬虫会按照种子URL逐个访问这些...
一个基本的网络爬虫通常由以下几个组件构成: 1. **URL管理器(URL Manager)**:负责存储待爬取和已爬取的URL,避免重复访问,并按照一定的策略(如深度优先、广度优先)决定下一个要爬取的网页。 2. **下载器...
【标签】列出了几个关键的关键词: 1. **Java**:这是一个强类型、面向对象的编程语言,常用于开发后端服务器应用程序。 2. **源码**:这里指的是WebSpider蓝蜘蛛的程序代码,可供学习者查看、分析和修改,有助于...
Java Spider 的工作流程主要包括以下几个步骤: 1. **初始化**:首先创建一个`Spider`实例,并设置起始URL。 2. **抓取网页**:根据起始URL抓取页面数据。 3. **解析页面**:对抓取到的数据进行解析,提取出需要的...
网络爬虫的工作原理通常包括以下几个步骤: 1. **初始化**:首先,爬虫会有一个起始URL列表,这些URL是爬虫开始抓取的种子页面。这些种子页面可以从用户输入、配置文件或预定义的列表中获取。 2. **请求与响应**:...
下面,我们将深入探讨与这个项目相关的几个关键知识点: 1. **网络爬虫**:网络爬虫是自动化地在互联网上抓取信息的程序。在这个项目中,QQ-Groups-Spider 可能会遍历QQ群网页,收集群名称、群号、群成员信息等。...
一个Scrapy项目通常包括以下几个核心组件: 1. **Spider**:蜘蛛(Spider)是Scrapy的核心,负责定义爬取规则和解析响应数据。在本例中,我们有一个名为"spider"的Spider,它专门针对中国新闻网设计,用于抓取各类...
Spider的实现通常涉及以下几个关键技术: 1. **网络库**:如Python的requests库,用于发起HTTP请求和处理响应。 2. **HTML解析器**:如BeautifulSoup或lxml,解析HTML文档,提取出链接和内容。 3. **并发控制**:...
在这个场景中,"spider"通常指的是一款名为“网站扒皮软件”的工具,它能够帮助用户快速获取网站的部分源码,以便进行分析、仿站或者数据挖掘。这种软件的主要功能是模拟浏览器行为,对指定网址发起请求,然后解析...
在C++中实现网络爬虫,需要掌握以下几个关键知识点: 1. **HTTP协议理解**:网络爬虫是基于HTTP/HTTPS协议与服务器交互的,因此你需要了解请求方法(GET、POST等)、请求头、状态码以及响应内容的基本结构。 2. **...
预计未来几年内,WebSpider蓝蜘蛛网页抓取软件将进一步加强其智能化水平,提供更多定制化服务以满足不同用户的需求。同时,针对日益严峻的数据安全与隐私保护挑战,也将涌现出更多创新性的解决方案和技术手段。 综...
在爬虫编程领域,这样的工具通常涉及到以下几个核心知识点: 1. **网络爬虫基础**:爬虫是通过模拟浏览器发送HTTP/HTTPS请求到服务器,接收响应数据,解析网页内容的一种技术。在Python中,常用的爬虫框架有Scrapy...