网络爬虫简介
2、深度优先搜索策略。这种策略的主要思想是,从根节点出发找出叶子节点,以此类推。在一个网页中,选择一个超链接,被链接的网页将执行深度优先搜索,形成单独的一条搜索链,当没有其他超链接时,搜索结束。
3、最佳优先搜索策略。该策略通过计算URL描述文本与目标网页的相似度,或者与主题的相关性,根据所设定的阈值选出有效URL进行抓取。
一个典型的网络爬虫主要组成部分如下:
1. URL链接库,主要用于存放爬取网页链接。
2.文档内容模块,主要用于存取从Web中下载的网页内容。
3.文档解析模块,用于解析下载文档中的网页内容,如解析PDF,Word,HTML等。
4.存储文档的元数据以及内容的库。
5.规范化URL模块,用于把URL转成标准的格式。
c)计算页面与主题的相似度(score):score=sim(topic,doc)
d)抽取doc中的所有超链接(outlinks)
e)循环(对于页面doc中的每一个超链接outlink)
If(#frontier>=MAX_BUFFER)(当frontier中链接的数量大于等于最大限制)
Then dequeue_link_with_min_score(frontier)(从frontier删除最小优先级链接)
iii.循环(当frontier队列非空且爬行的网页数<MAX_PAGES>)
a)从frontier中取出优先级最高的链接(link):link=dequeue_link_with_max_score(frontier)
b)访问并下载该link对应的页面(doc):doc=fetch_new_page(link)
Else enqueue(frontier,outlink,score)(把链接和优先级加入frontier队列)
f)循环结束(完成doc中的链接入frontier队列过程)
iv.循环结束(结束爬行)
2、Shark Search算法
Shark Search算法是Hersovici等在Fish-Search算法的基础上进行了一些改进,使用向量空间模型构建查询q与网页、链接锚文本及链接附近文本的空间向量并计算其余弦相似度cosine值,相似度为介于0和1之间的连续值[0,1],从而代替Fish-Search算法的关键字及正则表达式匹配的相关性为0,1的离散值{0,1},Shark search算法同时利用了锚文本、链接附近文本和父页面相关度信息三方面的相关度线索。同Fish-Search算法一样,该算法也设定了爬行的深度界限(Depth Bound)。在爬行队列中的每一个链接都关联一个深度界限和优先级度量值。深度界限由用户设定,链接的优先级值由父页面相关性、锚文本及链接附近文本共同决定。具体算法如下:
i.初始化:设定初始节点,深度界限(D),爬行尺度(S),时限,搜索查询q;
ii.设定初始节点的深度界限depth=D,并把节点插入到爬行队列(初始为空);
iii.循环(当队列非空且下载的节点数<S,并且在规定的下载时限内)
a)计算child_node,inherited_score(child_node):
e)计算anchor的相关度,neihgorhood_score:
其中 为预设的常量等于0.8;
f)计算孩子节点的潜在值
其中 为预设的常量小于1,一般设为0.5。
iv.循环结束。
(1)网络爬虫的构成及分类
网络爬虫又被称为做网络蜘蛛、网络机器人,主要用于网络资源的收集工作。在进行网络舆情分析时,首要获取舆情信息内容,这就需要用到网络爬虫(蜘蛛程序)这个工具,它是一个能自动提取网页内容的程序,通过搜索引擎从互联网上爬取网页地址并抓取相应的网页内容,是搜索引擎(Search Engine)的重要组成部分。
6. URL过滤器,主要用于过滤掉不需要的URL。
上述模块的设计与实现,主要是确定爬取的内容以及爬去的范围。最简单的例子是从一个已知的站点抓取一些网页,这个爬虫用少量代码就可以完成。然而在实际互联网应用中,可能会碰到爬去大量内容需求,就需要设计一个较为复杂的爬虫,这个爬虫就是N个应用的组成,并且难点是基于分布式的。
(4)爬行算法
数据采集的效率及覆盖率受爬行算法的影响,现在比较流行和经典的爬行算法都是在Best-Frist算法的基础上改进和演化而来,各种算法的不同之处是:对待爬的URLs采用不同的启发式规则来进行打分并排序,同时在爬行之前或在爬行过程中对算法的参数进行优化。
1、Best-First算法
Best-First算法通过维持一个排序的URLs优先级队列,通过计算主题与所抓取网页P的cosine similarity(余弦相似度)来确定Urls frontier中的Urls的优先级。
相似度计算公式如下:
(2-1)
式中,q为主题,p为抓取的网页。
Best-Frist爬行算法如下:
i.初始化,设定查询主题(topic),初始种子结点集合(starting_urls),爬取的最大网页数量(MAX_PAGES)以及frontier的容量限制(MAX_BUFFER);
ii.把初始结点集合(starting_urls)中所有link插入到frontier队列(初始为空);
总体来讲,网络爬虫主要有如下两个阶段:
第一阶段,URL库初始化然后开始爬取。
第二阶段,爬虫读取没有访问过的URL,来确定它的工作范围。
其中,对于所要抓取的URL链接,进行以下步骤:
1.获取URL链接。
2.解析内容,获取URL及相关数据。
3.存储有价值的数据。
4.对新抓取的URL进行规范化。
5.过滤掉不相关的URL。
b)提取anchor_text及anchor_text_context(通过预先设定的边界,如:1);
c)计算锚文本的相关度值:
d)计算锚文本的相关度值:
If anchor_score >0,
Then anchor_context_score = 1
Else anchor_context_score = sim(q,anchor_text_context);
If relevance(current_node)>0(当前节点相关)
Then inherited_score(child_node)= *sim(q,current_node)
其中 为预先设定的衰减因子=0.5;
Else inherited_score(child_node)= *inherited_score(current_node);
6.将要抓取的URL更新到URL库中。
7.重复步骤2,直到终止条件为止。
(3)网络爬虫的搜索策略
目前,比较常见的网络爬虫搜索策略有以下三种:
1、广度优先搜索策略。其主要思想是,由根节点开始,首先遍历当前层次的搜索,然后才进行下一层的搜索,依次类推逐层的搜索。这种策略多用在主题爬虫上,因为越是与初始URL距离近的网页,其具有的主题相关性越大。
(2)网络爬首先选择初始URL,并获得初始网页的域名或IP地址,然后在抓取网页时,不断从当前页面上获取新的URL放入候选队列,直到满足停止条件。
聚焦爬虫(主题驱动爬虫)不同于传统爬虫,其工作流程比较复杂,首先需要过滤掉跟主题不相关的链接,只保留有用的链接并将其放入候选URL队列。然后,根据搜索策略从候选队列中选择下一个要抓取的网页链接,并重复上述过程,直到满足终止条件为止。与此同时,将所有爬取的网页内容保存起来,并进行过滤、分析、建立索引等以便进行性检索和查询。