网络信息获取之主动获取
Created: November 26, 2023 4:16 PM
Reviewed: No
网络信息搜索系统的一般结构
搜索器、索引器、检索器、用户接口
搜索器(爬虫)
功能是在互联网中漫游,发现和收集信息。要尽可能多、尽可能快地搜集各种类型地新信息,还需要定期更新旧信息,避免死链接和无效链接。
爬虫的分类
-
批量型爬虫:批量型爬虫有明确的抓取范围和目标,当爬虫达到这个设定的目标后,即停止抓取过程。
-
增量型爬虫:增量型爬虫会持续不断地抓取,对于抓取的网页可以实现定期更新,通用的商业搜索引擎爬虫基本属于此类。
-
垂直型爬虫(聚焦爬虫):垂直型爬虫关注特定主题或属于特定行业的网页,其他主题或其他行业的内容不在考虑范围之内。
主要技术
爬虫缓冲池:抓取种子url放入队列中,取出URL,抓取页面并将URL放入已抓取队列,分析已抓取URL队列中的URL得到新URL,进入下一个循环。
在爬虫角度上的互联网划分
-
已下载未过期页面
-
已下载已过期页面
-
待下载页面
-
可知页面
-
不可知网页
网络搜索策略
深度优先
深度优先遍历策略指网络爬虫会从起始页开始,一个链接一个链接地追踪下去,完整地处理完一条路之后再转入下一个起始页。多数情况下会导致爬虫的trapped问题。
广度优先
也就是通用爬虫的思路(
缺点是大量的无关页面将被下载并过滤,算法的效率会降低。
最佳优先
在抓取地过程中,按照一定的页面分析算法,预测候选的URL和目标网页地相似度,或者与主题地相关性,选取评价最好的一个或者几个URL进行抓取。
缺点是在爬虫抓取路径上的很多相关网页可能被忽略,因为最佳优先策略是一种局部最有搜索算法。
这样的闭环调整可以将无关页面数量降低30%~90%
多机抓取算法和单机抓取算法
多级抓取算法可以理解为多了一个调度器,用来统一分配URL,下面的都是它的线程/肉鸡,思路都一样,分配的时候n = hash(url) mod N,分配给N节点。
索引器
索引器的功能是理解搜索器所搜索的信息,从中抽取出索引项,用于表示文档以及生成文档库的索引表。
评价网站好坏→PageRank算法
PageRank根据网站的外部链接和内部链接的数量和质量衡量网站的价值。
示例:
中心思想
数量假设:
当在网页模型图中,一个网页接受到的其他网页指向的入链(in-links)越多,说明该网页越重要。
质量假设:
当一个质量高的网页指向(out-links)一个网页,说明这个被指的网页重要。
公式:
$$
PR(v_i) = \sum_{v_j\in M(v_i)}\frac {PR(j)}{L(v_j)}, i=1,2,…,n
$$
其中M(vi)表示指向节点vi的节点集合。
L(vj)表示节点vj连出的有向边个数。
例题:
上述只是迭代了第一次。需要一直迭代直到极限。
Dead Ends问题
当一个节点没有任何出链,这就是Dead Links,它会导致网站权重变为0
一直迭代下去会导致所有节点的PR值为0
例如:
这个时候需要一个修正:
Spider Traps问题
这个问题出现在于有节点指向自己,PageRank算法迭代下去会发现,该节点的PR值为1,别的节点为0。
修正方式:
随机游走,也就是打开网页B的时候,有概率打开网页C/D。
检索器
检索器的功能是根据用户的查询在索引库中快速检出文档,进行文档与查询的相关度评价,对将要输出的结果进行排序,并实现某种用户相关性反馈机制。
检索器常用的四种模型有集合理论模型,代数模型,概率模型和混合模型四种。
用户接口
用户接口的作用是输入用户查询,显示查询结果,提供用户相关性反馈机制,主要的目的是方便用户使用搜索引擎,高效率、多方式地从搜索引擎得到有效、及时地信息。
主被动获取技术比较
P2P网络
P2P系统的分类
基于目录服务器地P2P网络(集中式)
三张图理解
不足:
(具有分布式雏形
完全分布式的P2P
特点就是泛洪
但是全网泛红又有缺点
所以出现了层次P2P
层次P2P
分布式哈希表系统(结构化P2P)
这个系统可以提高文件搜索效率的同时,又不依赖中心节点或局部中心节点。使用结构化对等网,基于分布式哈希表(Distributed Hash Table,简称DHT)而建。
结构化P2P:直接根据查询内的关键字定位其索引的存放节点,索引为<key, value>对。
需要尽可能地保证表小一点,而且能够查询所有节点。需要在O(n)复杂度找到目标。
参考二分查找,路由表应该这样建
节点n的路由表:
1 | n+1 |
---|---|
2 | n+2 |
3 | n+4 |
4 | n+8 |
5 | n+16 |
另外一种操作 Chord-Hash表分布
简单来说就是对两个值进行hash
N = hash(IP),这个用来弄出你是第几个节点
K = hash(X),这个表示你要上传/下载的东西应该放在哪
例如上传K = 54,则应该放在N51~N56之间,而且存放在N56,
查询的时候同理搜索至N56
优化:
将每个节点的表变为二分的表,增大了一点,但是查询/上传效率高了不少
Kademlia(Kad)也是一种经典的结构化P2P
Kad网络中每一个节点都有一个160bits的ID值作为标志符,Key也是一个160bits的标志符,每加入一个Kad,网络都会被分配一个Kad(可以认为ID是随机产生的),<key, value>对的数据就存放在ID值最接近key值得节点上
如何查询:
K桶
总的来说就是每个节点都会有个K桶,这个K桶通过计算距离,可以来搜索目标节点。
当新节点加入得时候需要泛红来传播新Kad节点信息。
当然K桶不需要这么大,我觉得二分大小也可以。
总结
P2P结构分类
非结构化的→完全分布式的P2P网络
基于目录服务器的P2P网络
层次P2P网络
结构化P2P
P2P技术的特点
非中心化
扩展性
健壮性
高性价比