第2讲网络爬行器_第1页
第2讲网络爬行器_第2页
第2讲网络爬行器_第3页
第2讲网络爬行器_第4页
第2讲网络爬行器_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二讲第二讲 网络爬行器网络爬行器 网络爬行器又称网络蜘蛛、或网络机器人。网络爬行器又称网络蜘蛛、或网络机器人。其目的是获取其目的是获取 Internet 上的网上的网页等各种资源页等各种资源。这也是搜索引擎工作的前提。这也是搜索引擎工作的前提。Internet上的网页:上的网页:1、一个网站可视为树结构。、一个网站可视为树结构。 一个网页视为一个结点。显然结点间存在着相互连接,本质上是图结一个网页视为一个结点。显然结点间存在着相互连接,本质上是图结 构。由于网站之间也相互连接,故整个构。由于网站之间也相互连接,故整个Internet可视为一个蜘蛛网或相互可视为一个蜘蛛网或相互 连接的森林。连

2、接的森林。2、网页众多,且不断更新。、网页众多,且不断更新。 据估计网页数量近千亿(谁也说不清)。据估计网页数量近千亿(谁也说不清)。Google号称收录上百亿。号称收录上百亿。3、搜索引擎能将全部网页存储后提供检索吗?、搜索引擎能将全部网页存储后提供检索吗? 假设每个网页平均假设每个网页平均 20K 大小(包括图片),则大小(包括图片),则 100 亿个网页约有亿个网页约有 20 万万G的大小。显然,搜索引擎若存储全部网页内容是不现实的。的大小。显然,搜索引擎若存储全部网页内容是不现实的。网络爬行器的基本功能要求网络爬行器的基本功能要求 URL队列的初值是待抓取的网站首页地队列的初值是待抓取

3、的网站首页地址的址的URL,可以是一个,也可以是一批,它,可以是一个,也可以是一批,它们也称为们也称为种子种子URL。 提取超链接是将抓取来的网页源代码中提取超链接是将抓取来的网页源代码中的指向下一级网页的超链接依次提取出来。的指向下一级网页的超链接依次提取出来。 网页去重的目的是防止对同一网页循环网页去重的目的是防止对同一网页循环抓取,而使爬行器陷入死循环。抓取,而使爬行器陷入死循环。将去重后的将去重后的URL依次送入队列。显然,该结构实现的是依次送入队列。显然,该结构实现的是图的宽度遍历。这里判断同一网页的标准是:图的宽度遍历。这里判断同一网页的标准是:若两个网页的若两个网页的URL完全相

4、同,则判定为同一完全相同,则判定为同一网页。网页。 提取正文是将抓取来的网页中的正文提提取正文是将抓取来的网页中的正文提取出来,并送入下一级处理程序(切词)。取出来,并送入下一级处理程序(切词)。注意,提取正文一般不是网络爬行器的工作,注意,提取正文一般不是网络爬行器的工作,逻辑上应放入下一级处理。逻辑上应放入下一级处理。URL队列队列抓取网页抓取网页提取超链接提取超链接网页去重网页去重提取正文提取正文取队列头取队列头URL送入下一级送入下一级 上述过程一直到队上述过程一直到队列空为止。以下相同。列空为止。以下相同。如何抓取网页如何抓取网页如果你不知道如何进行编程,怎么办?如果你不知道如何进行

5、编程,怎么办?别忘了网络搜索引擎的强大功能,现在的说法是:别忘了网络搜索引擎的强大功能,现在的说法是:“去搜搜去搜搜”。网络搜索网络搜索:如何利用:如何利用VC抓取网页。抓取网页。 使用类使用类 CInternetSession 创建并初始化一个或多个同时的创建并初始化一个或多个同时的 Internet 会话。会话。 OpenURL 将返回一个指向将返回一个指向 CFile 对象的指针。若按照对象的指针。若按照 HTTP 协议打开网协议打开网页,则返回一个页,则返回一个 CHttpFile 对象的指针。如果在打开网页时出现错误,则会抛对象的指针。如果在打开网页时出现错误,则会抛出出 CInte

6、rnetException 异常,然后利用异常,然后利用 GetErrorMessage 即可获得系统给出的即可获得系统给出的异常原因。异常原因。 在在 CHttpFile 类的父类中继承有类的父类中继承有 ReadString 成员,可从文件流中读取字符成员,可从文件流中读取字符流。流。 注意,使用上述类需要包含头文件注意,使用上述类需要包含头文件 afxinet.h 根据搜索到的例程,一名合格的程序员会知道如何进一步的搜索而深入了根据搜索到的例程,一名合格的程序员会知道如何进一步的搜索而深入了解,并在自己的头脑中建立一个理解模型。然后在实践中灵活应用,验证和修解,并在自己的头脑中建立一个理

7、解模型。然后在实践中灵活应用,验证和修正自己的认识模型。正自己的认识模型。抓取网页程序示例抓取网页程序示例CString PageText; CInternetSession session(HttpClient); CHttpFile *pfile = NULL;try pfile = (CHttpFile *)session.OpenURL(url); catch(CInternetException *pEx) char Message100; pEx-GetErrorMessage(Message, 100); printf(Error: %sn, Message); session.

8、Close(); return ERROR;DWORD dwStatusCode;pfile-QueryInfoStatusCode(dwStatusCode);if(dwStatusCode = HTTP_STATUS_OK)CString LineStr;while(pfile-ReadString(LineStr) PageText += LineStr;pfile-Close(); delete pfile; session.Close(); return OK;关于抓取网页的详关于抓取网页的详细代码参见例程中细代码参见例程中RetriSys.h中的中的GetPage函数。函数。超链接

9、特征与字符串处理超链接特征与字符串处理网页源代码中超链接的特征是什么?网页源代码中超链接的特征是什么?这就是一个超链接。这就是一个超链接。 我们所面临的任务就是在网页源代码的字符串中将满足上述特征的超链接我们所面临的任务就是在网页源代码的字符串中将满足上述特征的超链接子串都分别提取出来。子串都分别提取出来。所采用的技术就是字符串处理,提取子串。所采用的技术就是字符串处理,提取子串。例如例如:CString s, ss; int p, p1, s1;p1 = s.Find(ss, p); 在在 s 串中从第串中从第 p 个位置开始查找个位置开始查找 ss 子串,返回子串,返回 ss 子串所在子串

10、所在 的位置。若没找到则返回的位置。若没找到则返回 - -1 。s1 = s.Mid(s, p, p1); 从从 s 串中第串中第 p 个位置开始,连续取出长度为个位置开始,连续取出长度为 p1 的子串。的子串。s.Delete(p, p1); 从从 s 串中将第串中将第 p 个位置开始,连续长度为个位置开始,连续长度为 p1 的子串删除。的子串删除。提取超链接提取超链接int p1 = PageText.Find(href=http, 0);while(p1 != -1) int p2 = PageText.Find(, p1+6); if(p2 = -1) break; CString h

11、r = PageText.Mid(p1+6, p2-p1-6); p1 = PageText.Find(href=http, p2);p1p2 显然,这里提取出的超链接子串必须存储起来,为此建立一个显然,这里提取出的超链接子串必须存储起来,为此建立一个URL列表,列表,可用数据结构的线性表实现,具体可采用链表实现。可用数据结构的线性表实现,具体可采用链表实现。问题问题:如何实现网页去重呢?:如何实现网页去重呢?网页去重网页去重基本思想:基本思想:即在进行超链接提取时,对每一个提取出的即在进行超链接提取时,对每一个提取出的URL都去查都去查URL列表。列表。URL1URL2URL3URLnURL

12、列表列表提取提取URL查查URL列表列表加入加入URL列表列表丢弃丢弃没查到没查到查到查到 该该URL列表的实现可采用数据结构中的链式线性表实现,利用其中所提供列表的实现可采用数据结构中的链式线性表实现,利用其中所提供的操作即可完成对列表数据元素(的操作即可完成对列表数据元素(URL串)的插入、查找等操作。串)的插入、查找等操作。问题问题:若采集的:若采集的URL数量众多,比如一百万,上述过程效率高吗?如何改善?数量众多,比如一百万,上述过程效率高吗?如何改善?URLURL列表的散列逻辑结构列表的散列逻辑结构 散列的基本思想:散列的基本思想:寻找一个映射函数寻找一个映射函数 f ,将集合,将集

13、合 A 的元素映射为的元素映射为 0 N 的的自然数有限集合。自然数有限集合。URL URL散列表散列表即对所提取的每一个即对所提取的每一个URL,计算,计算p = f(URL) 根据计算结果,将该根据计算结果,将该URL存存入第入第 p 个位置处。当然有可能会个位置处。当然有可能会存在多个不同的存在多个不同的URL计算结果是计算结果是同一个位置(称为散列冲突),同一个位置(称为散列冲突),则将它们在位置则将它们在位置 p 处建立一个线处建立一个线性表。性表。 在查找时,先计算该在查找时,先计算该URL的的 p 值,然后在第值,然后在第 p 个位置对应的个位置对应的线性表中查找即可。其实质就是

14、线性表中查找即可。其实质就是缩小了查找的范围,以提高查找缩小了查找的范围,以提高查找速度。速度。012NURL URL URL URL URL URL URL 可见,该结构可利用数据结构的线可见,该结构可利用数据结构的线性表来实现。性表来实现。URLURL散列函数散列函数 URL即字符串,即可采用字符串的散列方法实现。下面采用的是字符串逐即字符串,即可采用字符串的散列方法实现。下面采用的是字符串逐个字符相加,再对散列表长度(即个字符相加,再对散列表长度(即N值)取余的映射方法。值)取余的映射方法。例如:例如:for ( int i = 0; i strlen(CurUrl); +i ) Sum

15、 += abs( (int) CurUrli );return Sum % N; 该方法经实验对比,其映射效果较为理想。映射效果是指众多的不同该方法经实验对比,其映射效果较为理想。映射效果是指众多的不同URL值能够较为平均地分布在值能够较为平均地分布在 0 N 范围内,这样查找范围内,这样查找URL列表的速度几乎就可提列表的速度几乎就可提高原有在线性表中依次查找的高原有在线性表中依次查找的 N 倍。倍。URLURL散列表物理存储结构设计散列表物理存储结构设计typedef struct char *Elem; unsigned long Length; unsigned long Size;

16、UrlList;typedef struct unsigned int TableLength; unsigned long UrlNum; SynonymList *Syn; HashTable;typedef struct unsigned long *Elem; unsigned long Length; unsigned long Size; SynonymList;URL串串 0 1 2 URL串串 UrlList列表列表Elem显然,这里也相当于对每显然,这里也相当于对每一个一个URL串进行了编号。串进行了编号。01NHashTableURL号号 URL号号 URL号号 URL号号

17、 URL号号 SynonymList 在散列表在散列表中只需存储各中只需存储各URL编号,通编号,通过该编号即可过该编号即可在在UrlList中定中定位到位到URL字符字符串。串。ElemSyn网页去重代码示例网页去重代码示例InitUrlList(UrlTable); InitHashTable(UrlHashTable, HASHTABLELEN);UrlListAppend(UrlTable, url);InsertUrlIntoHashTable(UrlHashTable, url);GetPage(url, PageText); int p1 = PageText.Find(href

18、=http, 1);while(p1 != -1)int p2 = PageText.Find(, p1+6); if(p2 = -1) break;CString hr = PageText.Mid(p1+6, p2-p1-6);char *hrUrl = (char *)LPCTSTR(hr);if(SearchUrlInHashTable(UrlHashTable, hrUrl) = NOFOUND) UrlListAppend(UrlTable, hrUrl); InsertUrlIntoHashTable(UrlHashTable, hrUrl);p1 = PageText.Find

19、(href=http, p2);这些函数的具这些函数的具体实现参见体实现参见UrlList.hSynonymList.hHashTable.hTrieTrie树树问题:你还有什么办法进一步提高网页去重的查找速度?问题:你还有什么办法进一步提高网页去重的查找速度?atbeebdatd终止终止结点结点问题:问题:bed、bef 是重复的网页吗?是重复的网页吗?例如某些例如某些URL串形式如下:串形式如下:http:/ http:/ 以字符串以字符串 at、atbe、be、bed、bat、ad 为例,可建立如下的为例,可建立如下的 Trie 树结构。树结构。答:显然若串在答:显然若串在Trie中则是

20、重复的网页;中则是重复的网页; 若不在若不在Trie树中则不是重复的网页,树中则不是重复的网页, 且将其插入且将其插入Trie树。树。该组织结构优点是查找速度快,缺点是占用存储空间比较大。该组织结构优点是查找速度快,缺点是占用存储空间比较大。爬行策略爬行策略即图搜索策略,可采用宽度优先或深度优先。一般网络爬行器采用宽度优先。即图搜索策略,可采用宽度优先或深度优先。一般网络爬行器采用宽度优先。URL队列队列抓取网页抓取网页提取超链接提取超链接网页去重网页去重取队列头取队列头URLABCDEFGHI宽度优先遍历顺序为:宽度优先遍历顺序为:ABCDEFGHI深度优先遍历顺序为:深度优先遍历顺序为:A

21、BFGCDHIE在如下结构中,在如下结构中,采用采用URL队列即可实现宽度优先遍历。队列即可实现宽度优先遍历。若采用若采用URL栈则可实现深度优先遍历。栈则可实现深度优先遍历。深度优先一般可实现按主题抓取网页。宽度优先相当于层深度优先一般可实现按主题抓取网页。宽度优先相当于层次遍历。次遍历。URL栈栈抓取网页抓取网页提取超链接提取超链接网页去重网页去重取栈顶取栈顶URL宽度优先爬行代码示例宽度优先爬行代码示例InitUrlPtrQueue(UrlQueue);EnUrlPtrQueue(UrlQueue, UrlListLength(UrlTable);while(TRUE) UrlPtrQu

22、eueElemType Qe; DeUrlPtrQueue(UrlQueue, Qe); char *CurUrl = NULL; UrlListGetElem(UrlTable, Qe, CurUrl); if(GetPage(CurUrl, PageText) = ERROR) continue; int p1 = PageText.Find(href=http, 1); while(p1 != -1) hrUrl = 在在PageText中提取超链接(这里省略)中提取超链接(这里省略); if(SearchUrlInHashTable(UrlHashTable, hrUrl) = NOF

23、OUND) UrlListAppend(UrlTable, hrUrl); InsertUrlIntoHashTable(UrlHashTable, hrUrl); EnUrlPtrQueue(UrlQueue, UrlListLength(UrlTable); p1 = PageText.Find(href=http, p2); DestroyUrlPtrQueue(UrlQueue);这里入队列的并不这里入队列的并不URL串串本身,而是它在本身,而是它在UrlList线线性表中的位置值。性表中的位置值。这里省略了种子这里省略了种子URL入入UrlList与与UrlHashTable。如何控

24、制爬行的层数如何控制爬行的层数若对以下层次结构只要求抓取两层的网页,则应该如何控制呢?若对以下层次结构只要求抓取两层的网页,则应该如何控制呢?URL队列队列抓取网页抓取网页提取超链接提取超链接网页去重网页去重取队列头取队列头URLABCDEFGHI基本思想基本思想0 入队列入队列LevelNum = 1根根URL入队列入队列是否为是否为0?否否LevelNum加加1是是满足要求?满足要求?结束结束是是0 入队列入队列 这里的这里的 0 起起到在层与层之间到在层与层之间的分隔作用。的分隔作用。J层次控制代码示例层次控制代码示例EnUrlPtrQueue(UrlQueue, UrlListLeng

25、th(UrlTable);EnUrlPtrQueue(UrlQueue, 0);LevelNum = 1;while(TRUE) UrlPtrQueueElemType Qe; DeUrlPtrQueue(UrlQueue, Qe); if(Qe = 0) if(UrlPtrQueueEmpty(UrlQueue) = TRUE) break; EnUrlPtrQueue(UrlQueue, 0); +LevelNum; continue; if(LevelNum = LEVELNUM) DestroyUrlPtrQueue(UrlQueue);这里省略网页抓取、这里省略网页抓取、超链接提取以

26、及网页超链接提取以及网页去重部分的代码。去重部分的代码。关于层次遍历抓取网关于层次遍历抓取网页的详细代码参见例页的详细代码参见例程中程中RetriSys.h中的中的GetWebPages函数。函数。网页正文提取网页正文提取网页中的正文有什么特征吗?网页中的正文有什么特征吗?利比亚多家驻外使馆称不再代表卡扎菲政权利比亚多家驻外使馆称不再代表卡扎菲政权_ _网易新闻中心网易新闻中心 现在,许多网页(尤其是新闻网页)在其头部都包含类似的上述信息,分现在,许多网页(尤其是新闻网页)在其头部都包含类似的上述信息,分别为标题、关键词及摘要提示。别为标题、关键词及摘要提示。 显然,这里的文字及所出现的词对描

27、述该网页的内容具有重要作用,因此显然,这里的文字及所出现的词对描述该网页的内容具有重要作用,因此这里的正文内容提取就尤为重要。同时,这里的正文有着非常明显的格式。这里的正文内容提取就尤为重要。同时,这里的正文有着非常明显的格式。 正文提取的过程就是扫描网页源代码字符串,从中提取出上述格式中的正正文提取的过程就是扫描网页源代码字符串,从中提取出上述格式中的正文文字串即可。文文字串即可。 对于网页中的其它正文信息,其格式较多,我们不妨就采取见到汉字就提对于网页中的其它正文信息,其格式较多,我们不妨就采取见到汉字就提取的简单办法。取的简单办法。标题、关键词及摘要正文的提取标题、关键词及摘要正文的提取

28、CString TKDContent(url); TKDContent += “”; /将将Url放至正文前面放至正文前面int p1 = PageText.Find(, 1); /提取标题提取标题if(p1 != -1) int p2 = PageText.Find(, p1+7); if(p2 != -1) TKDContent += PageText.Mid(p1+7, p2-p1-7);p1 = PageText.Find(name=keywords content=, 1); /提取关键词提取关键词if(p1 != -1) int p2 = PageText.Find(, p1+25

29、); if(p2 != -1) TKDContent += PageText.Mid(p1+25, p2-p1-25);p1 = PageText.Find(“name=descriptioncontent=, 1); /提取摘要提取摘要if(p1 != -1) int p2 = PageText.Find(, p1+28); if(p2 != -1) TKDContent += PageText.Mid(p1+28, p2-p1-28);/将提取的正文内容写入磁盘,形成检索系统的数据源。将提取的正文内容写入磁盘,形成检索系统的数据源。其他正文的提取其他正文的提取CString FullCon

30、tent;for(int i=0; i= 0 & ch = 127) continue; FullContent += ch; FullContent += PageText+i; 有时网页中会出现一些类似注释有时网页中会出现一些类似注释等形式的汉字形式,它们与网页内容等形式的汉字形式,它们与网页内容毫不相关。可考虑把它们去掉。毫不相关。可考虑把它们去掉。 诸如以下结构中的文字一般也与诸如以下结构中的文字一般也与网页内容无关。网页内容无关。script form a 等等。等等。p1 = PageText.Find(/*, 1);while(1) if(p1 = -1) break; int

31、p2 = PageText.Find(*/, p1); if(p2 = -1) break; PageText.Delete(p1, p2-p1+2); p1 = PageText.Find(/*, p1); 若需要将网页中的全部汉字若需要将网页中的全部汉字均提取出来而作为正文内容,则均提取出来而作为正文内容,则可采用左侧的代码示例。可采用左侧的代码示例。 显然,该方法与汉字的编码显然,该方法与汉字的编码有关。如有关。如 utf-8 编码就不适合。编码就不适合。提取的正文写入磁盘文件提取的正文写入磁盘文件即文件操作。即文件操作。FILE *fp = fopen(TKDFileName, w);

32、if(fp = NULL) printf( Create web page file error.n); return;fprintf(fp, %s , TKDContent);fclose(fp); 详细的正文提取代码参见例程中的详细的正文提取代码参见例程中的RetriSys.h中的中的GetTextFromWebPage函数。函数。 在那里,将从网页中提取出的标题、关键词及摘要,在那里,将从网页中提取出的标题、关键词及摘要,去掉注释等多余信息去掉注释等多余信息后,将网页中的全部汉字全部存入后,将网页中的全部汉字全部存入TKDBContent字符串。最后以文件的形式存字符串。最后以文件的形式

33、存入入Docs文件夹下。文件夹下。利用多线程抓取网页利用多线程抓取网页 也就是多线程编程问题。目的是提高抓取网页的速度。这在多核也就是多线程编程问题。目的是提高抓取网页的速度。这在多核CPU上效上效果明显。果明显。DWORD WINAPI ChildProcess1(LPVOID lpParameter) DWORD WINAPI ChildProcess2(LPVOID lpParameter) DWORD tID1, tID2;CreateThread(NULL, 0, ChildProcess1, NULL, 0, &tID1);CreateThread(NULL, 0, ChildPr

34、ocess2, NULL, 0, &tID2); 其中,其中,ChildProcess1与与ChildProcess2为线程处理程序。为线程处理程序。CreateThread函数函数用于创建线程。用于创建线程。 可以利用每一个线程来完成抓取网页、提取超链接、正文提取工作,这样可以利用每一个线程来完成抓取网页、提取超链接、正文提取工作,这样就可以实现多个线程来并行执行,以提高抓取和处理网页的速度。就可以实现多个线程来并行执行,以提高抓取和处理网页的速度。 注意,不是线程越多越好注意,不是线程越多越好,创建的线程多会增加,创建的线程多会增加CPU的调度负担。的调度负担。 这一部分详细代码参见例程中

35、的这一部分详细代码参见例程中的RetriSys.h中的中的mGetWebPages函数。函数。线程间的互斥问题线程间的互斥问题 类似于数据库系统中当多个事务同时存取同一个数据可能会出问题一样,类似于数据库系统中当多个事务同时存取同一个数据可能会出问题一样,若多个线程同时使用同一个资源也可能会出现意想不到的错误。若多个线程同时使用同一个资源也可能会出现意想不到的错误。 这一类问题的解决在这一类问题的解决在操作系统操作系统课程中介绍了一些线程同步的方法。这课程中介绍了一些线程同步的方法。这里采用一种临界区的机制,使之强行变为串行的方法。里采用一种临界区的机制,使之强行变为串行的方法。CCritic

36、alSection lobal_CriticalSection;global_CriticalSection.Lock();global_CriticalSection.Unlock(); 当多个线程访问一个独占性共享资源时当多个线程访问一个独占性共享资源时, ,可以使用可以使用CCriticalSection对象,对象,即临界区。任一时刻只有一个线程可以拥有临界区对象,拥有临界区的线程可即临界区。任一时刻只有一个线程可以拥有临界区对象,拥有临界区的线程可以访问被保护起来的资源或代码段,其他希望进入临界区的线程将被挂起,直以访问被保护起来的资源或代码段,其他希望进入临界区的线程将被挂起,直到拥

37、有临界区的线程放弃临界区时为止,这样就保证了不会在同一时刻出现多到拥有临界区的线程放弃临界区时为止,这样就保证了不会在同一时刻出现多个线程访问共享资源。个线程访问共享资源。 网页正文的其他问题网页正文的其他问题1、对于对于doc、pdf等文档,只需调用相应的插件接口,就可提取出文档中的文等文档,只需调用相应的插件接口,就可提取出文档中的文 本信息。本信息。2、对于对于HTML网页来说,一般还需要滤除诸如广告的链接以及公共的频道链网页来说,一般还需要滤除诸如广告的链接以及公共的频道链 接等与正文无关的内容。接等与正文无关的内容。3、对于图片等多媒体文件,一般是通过链接的锚文本(即链接文本)和相关

38、对于图片等多媒体文件,一般是通过链接的锚文本(即链接文本)和相关 的文件注释来判断这些文件的内容。如有一个链接文字为的文件注释来判断这些文件的内容。如有一个链接文字为“刘德华照片刘德华照片”, 其链接指向一张其链接指向一张bmp格式的图片,则网络蜘蛛就认为这张图片的内容是关格式的图片,则网络蜘蛛就认为这张图片的内容是关 于刘德华的。这样在搜索刘德华时,就能让搜索引擎找到这张图片。于刘德华的。这样在搜索刘德华时,就能让搜索引擎找到这张图片。4、动态网页一直是网络蜘蛛面临的难题。所谓动态网页,是由程序自动生成、动态网页一直是网络蜘蛛面临的难题。所谓动态网页,是由程序自动生成 的页面,这样的好处是可

39、以快速统一更改网页风格,也可以减少网页所占的页面,这样的好处是可以快速统一更改网页风格,也可以减少网页所占 服务器的空间,但同时给网络蜘蛛的抓取带来一些麻烦。尤其是一些脚本服务器的空间,但同时给网络蜘蛛的抓取带来一些麻烦。尤其是一些脚本 语言(如语言(如VBScript和和JavaScript)生成的网页,若要完善的处理好这些网)生成的网页,若要完善的处理好这些网 页,网络蜘蛛需要有自己的脚本解释程序。页,网络蜘蛛需要有自己的脚本解释程序。5、对于许多数据是放在数据库中的网站,需要通过对网站的数据库搜索才能、对于许多数据是放在数据库中的网站,需要通过对网站的数据库搜索才能 获得信息。对于这类网

40、站,如果网站设计者希望这些数据能被搜索引擎搜获得信息。对于这类网站,如果网站设计者希望这些数据能被搜索引擎搜 索,则需要提供一种可以遍历整个数据库内容的方法。索,则需要提供一种可以遍历整个数据库内容的方法。网站服务器与网络爬行器的交互网站服务器与网络爬行器的交互 网络蜘蛛抓取网页,不同于一般的访问,如果控制不好,则会引起网站服网络蜘蛛抓取网页,不同于一般的访问,如果控制不好,则会引起网站服务器负担过重。务器负担过重。 每个网络蜘蛛都有自己的名字,在抓取网页的时候,都会向网站标明自己每个网络蜘蛛都有自己的名字,在抓取网页的时候,都会向网站标明自己的身份。若在网站上有访问日志记录,网站管理员就能知

41、道,哪些搜索引擎的的身份。若在网站上有访问日志记录,网站管理员就能知道,哪些搜索引擎的网络蜘蛛访问过,什么时候,以及读取了多少数据等等。如果网站管理员发现网络蜘蛛访问过,什么时候,以及读取了多少数据等等。如果网站管理员发现某个蜘蛛有问题,就通过其标识来和其所有者联系。某个蜘蛛有问题,就通过其标识来和其所有者联系。网络蜘蛛进入一个网站,一般会先访问网站服务器根目录下的一个特殊文网络蜘蛛进入一个网站,一般会先访问网站服务器根目录下的一个特殊文本文件本文件Robots.txt。网站管理员可以通过该文件来定义哪些目录网络蜘蛛不能。网站管理员可以通过该文件来定义哪些目录网络蜘蛛不能访问,或者哪些目录对于

42、某些特定的网络蜘蛛不能访问。当然该文件只是一个访问,或者哪些目录对于某些特定的网络蜘蛛不能访问。当然该文件只是一个协议,如果网络蜘蛛的设计者不遵循,网站管理员也无法阻止网络蜘蛛对于某协议,如果网络蜘蛛的设计者不遵循,网站管理员也无法阻止网络蜘蛛对于某些页面的访问。些页面的访问。现在一般的网站都希望搜索引擎能更全面的抓取自己的网页。为此,网站现在一般的网站都希望搜索引擎能更全面的抓取自己的网页。为此,网站管理员可以建立一个网站地图,即管理员可以建立一个网站地图,即SiteMap。许多网络蜘蛛会把此文件作为一。许多网络蜘蛛会把此文件作为一个网站网页爬取的入口,网站管理员可以把网站内部所有网页的链接

43、放在这个个网站网页爬取的入口,网站管理员可以把网站内部所有网页的链接放在这个文件里面,那么网络蜘蛛可以很方便的把整个网站抓取下来,避免遗漏某些网文件里面,那么网络蜘蛛可以很方便的把整个网站抓取下来,避免遗漏某些网页,也会减小对网站服务器的负担。页,也会减小对网站服务器的负担。 Robots.txtRobots.txt文件文件 当网络蜘蛛器访问一个站点时,它会首先检查是否存在当网络蜘蛛器访问一个站点时,它会首先检查是否存在robots.txt,如果存,如果存在,就会按照该文件中的内容来确定访问的范围;如果该文件不存在,则沿着在,就会按照该文件中的内容来确定访问的范围;如果该文件不存在,则沿着链接

44、抓取。链接抓取。 robots.txt的一般内容格式为:的一般内容格式为: # All robots will spider the domain User-agent: * Disallow:User-agent: *Disallow: /将禁止所有网络蜘蛛访将禁止所有网络蜘蛛访问网站的任何部分。问网站的任何部分。User-agent: *Disallow: /01/Disallow: /02/将禁止所有网络蜘蛛访将禁止所有网络蜘蛛访问网站的问网站的01和和02目录。目录。User-agent: GoogleBotDisallow: /将禁止谷歌访问网站的将禁止谷歌访问网站的任何部分。任何部

45、分。User-agent: GoogleBotDisallow: User-agent: *Disallow: /将只允许谷歌访问。将只允许谷歌访问。 其中其中#后面的文字为说明信息;后面的文字为说明信息;User-agent: 后后面为网络蜘蛛名称,如果是面为网络蜘蛛名称,如果是* *,则泛指所有的网络,则泛指所有的网络蜘蛛;蜘蛛;Disallow: 后面是不允许访问的文件目录。后面是不允许访问的文件目录。例如:例如:谷歌:谷歌:GoogleBot百度百度:BaiduspiderRobots.txtRobots.txt文件(续)文件(续) 同时同时robots.txt中也可以带中也可以带me

46、ta标签,它可以有如下选项:标签,它可以有如下选项: NOINDEX - - 不索引当前页面。不索引当前页面。 NOFOLLOW - - 不跟踪当前页面中所有的链接。不跟踪当前页面中所有的链接。 NOARCHIVE - - 在搜索结果中不保存当前页面的快照。在搜索结果中不保存当前页面的快照。 相应的有相应的有INDEX、FOLLOW和和ARCHIVE。 缺省值是缺省值是INDEX和和F FOLLOW。 绝大多数的搜索引擎机器人都遵守绝大多数的搜索引擎机器人都遵守robots.txt的规则,而对于的规则,而对于Robots META标签,目前支持的并不多,但是正在逐渐增加,如标签,目前支持的并不多,但是正在逐渐增加,如Google就完全支持。就完全支持。例如:例如: META NAME=googlebot CONTENT=ind

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论