没有合适的资源?快使用搜索试试~ 我知道了~
首页JAVA实现的广度优先多线程网络爬虫:抓取与存储详解
JAVA实现的广度优先多线程网络爬虫:抓取与存储详解
0 下载量 46 浏览量
更新于2024-06-28
收藏 2.3MB DOC 举报
网络爬虫的设计与实现-毕业(完整版)资料是一份详细的文档,主要探讨了如何使用Java编程语言构建一个基于广度优先搜索(Breadth-First Search, BFS)算法的多线程网络爬虫。这份文档首先从网络爬虫的基本概念入手,强调其在搜索引擎和定向信息收集中的重要作用,例如获取招聘信息、租房信息等。 在技术介绍部分,文档深入剖析了选择BFS策略的原因。BFS的优势在于它能按照最短路径优先的原则遍历网页,确保高效地发现目标页面。作者详细解释了如何在Java中实现这种爬行策略,包括设置队列数据结构来存储待访问的URL,并控制爬虫的进程。 其次,文档讨论了多线程技术的应用。多线程设计允许爬虫同时处理多个请求,提高爬取速度,避免因单线程导致的效率瓶颈。作者详细介绍了Java线程的原理,包括线程概述、线程模型(如守护线程、可重入性等)、创建线程的方法,以及如何有效地利用线程池来管理线程资源。 在系统实现过程中,数据存储也是一个关键环节。文档涉及到了数据库操作,如如何将搜集到的URLs存储到数据库中,这既保证了数据的持久化,又方便后续的数据分析和处理。此外,网页信息的解析也是不可或缺的部分,包括HTML代码的解析,提取出有用的信息如文本、图片链接等。 这份文档不仅涵盖了网络爬虫的基础理论,还提供了实际的编程示例,使读者能够理解和掌握如何在Java环境中设计和实现一个功能强大的网络爬虫。通过阅读和实践这份资料,学习者可以深入了解网络爬虫的工作原理,并将其应用到实际项目中去。文档的关键字包括网络爬虫、JAVA、广度优先搜索和多线程,突出了其核心技术和实现方法。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/87221327/bg10.jpg)
的 :// googlechinablog
/2007/07/bloom-filter.html。
2.2.3 LRU 算法实现 URL 消重
用双向链表来实现大容量 cache 的 LRU 算法。原理是:
cache 的所有位置都用双向链表连接起来,当一个位置被命
中后,就将通过调整链表的指向将该位置调整到链表的头位
置,新加入的内容直接放在链表的头上。这样,在进行过多
次查找操作后,最近被命中过的内容就像链表的头移动,而
没有命中过的内容就向链表的后面移动。当需要替换时,链
表最后的位置就是最近最少被命中位置,我们只需要将新的
内容放在链表前面,淘汰链表最后的位置就实现了 LRU 算法。
2.3 URL 类访问网络
JAVA 提供了许多支 Internet 连接的类,URL 类就是其
中之一。在使用 URL 类之前,必须创建一个 URL 对象,创
建的方法是使用其构造函数,通过向其指定一个 URL 地址,
就 能 实 例 化 该 类 。 如 : URL url=new URL ( ://
sina );
如 果 传递 无 效 的 URL 给 URL 对象 , 该 对 象 会 抛 出
MalformedURLException 异常。当成功创建一个 URL 对
象后,我们调用 openConnection 函数建立与 URL 的通信,
此时,我们就获得了一个 URLConnection 对象的引用,
URLConnection 类包含了许多与网络上的 URL 通信的函
数。在下载网页前,我们需要判断目标网页是否存在,这时
调用 URLConnection 类的 getHeaderField()方法,获得服
务器返回给 SPIDER 程序的响应码,如果响应码包含”20*”
字样,表示目标网页存在,下一步就下载网页,否则就不下
载。getHeaderField()方法仅仅获得服务器返回的头标志,
其通信开销是最小的,因此在下载网页前进行此测试,不仅
能减小网络流量,而且能提高程序效率。当目标网页存在时
2 调用 URLConnection 类 getInputStream()函数明确打
开 到 URL 的 连 接 , 获 取 输 入 流 , 再 用 java.io 包 中 的
InputStreamReader 类读取该输入流,将网页下载下来。
![](https://csdnimg.cn/release/download_crawler_static/87221327/bg11.jpg)
2.4 爬行策略浅析
2.4.1 宽度或深度优先搜索策略
搜索引擎所用的第一代网络爬虫主要是基于传统的图算
法, 如宽度优先或深度优先算法来索引整个 Web, 一个核心
的 U RL 集被用来作为一个种子集合, 这种算法递归的跟踪
超链接到其它页面, 而通常不管页面的内容, 因为最终的目
标是这种跟踪能覆盖整个 Web. 这种策略通常用在通用搜索
引擎中,因为通用搜索引擎获得的网页越多越好, 没有特定的
要求.
2.4.1.1 宽度优先搜索算法
宽度优先搜索算法(又称广度优先搜索) 是最简便的图的
搜索算法之一, 这一算法也是很多重要的图的算法的原型.
Dijkstra 单源最短路径算法和 Prim 最小生成树算法都采用
了和宽度优先搜索类似的思想.宽度优先搜索算法是沿着树
的宽度遍历树的节点, 如果发现目标, 则算法中止. 该算法的
设计和实现相对简单, 属于盲目搜索. 在目前为覆盖尽可能
多的网页, 一般使用宽度优先搜索方法. 也有很多研究将宽
度优先搜索策略应用于聚焦爬虫中. 其基本思想是认为与初
始 U RL 在一定链接距离内的网页具有主题相关性的概率很
大. 另外一种方法是将宽度优先搜索与网页过滤技术结合使
用, 先用广度优先策略抓取网页, 再将其中无关的网页过滤
掉. 这些方法的缺点在于, 随着抓取网页的增多, 大量的无关
网页将被下载并过滤, 算法的效率将变低.
2.4.1.2 深度优先搜索
深度优先搜索所遵循的搜索策略是尽可能“深”地搜索图.
在深度优先搜索中, 对于最新发现的顶点, 如果它还有以此
为起点而未探测到的边, 就沿此边继续汉下去. 当结点 v 的
所有边都己被探寻过, 搜索将回溯到发现结点 v 有那条边的
始结点. 这一过程一直进行到已发现从源结点可达的所有结
点为止. 如果还存在未被发现的结点, 则选择其中一个作为
![](https://csdnimg.cn/release/download_crawler_static/87221327/bg12.jpg)
源结点并重复以上过程, 整个进程反复进行直到所有结点都
被发现为止. 深度优先在很多情况下会导致爬虫的陷入
( trapped) 问题, 所以它既不是完备的, 也不是最优的.
2.4.2 聚焦搜索策略
基于第一代网络爬虫的搜索引擎抓取的网页一般少于 1
000 000 个网页, 极少重新搜集网页并去刷新索引. 而且其
检索速度非常慢, 一般都要等待 10 s 甚至更长的时间. 随着
网页页信息的指数级增长及动态变化, 这些通用搜索引擎的
局限性越来越大, 随着科学技术的发展, 定向抓取相关网页
资源的聚焦爬虫便应运而生.聚焦爬虫的爬行策略只挑出某
一个特定主题的页面, 根据“最好优先原则”进行访问, 快
速、有效地获得更多的与主题相关的页面, 主要通过内容和
Web 的链接结构来指导进一步的页面抓取[ 2 ].
聚焦爬虫会给它所下载下来的页面分配一个评价分, 然后
根据得分排序, 最后插入到一个队列中. 最好的下一个搜索
将通过对弹出队列中的第一个页面进行分析而执行, 这种策
略保证爬虫能优先跟踪那些最有可能链接到目标页面的页
面. 决定网络爬虫搜索策略的关键是如何评价链接价值, 即
链接价值的计算方法, 不同的价值评价方法计算出的链接的
价值不同, 表现出的链接的“重要程度”也不同, 从而决定
了不同的搜索策略. 由于链接包含于页面之中,而通常具有较
高价值的页面包含的链接也具有较高的价值, 因而对链接价
值的评价有时也转换为对页面价值的评价. 这种策略通常运
用在专业搜索引擎中, 因为这种搜索引擎只关心某一特定主
题的页面.
2.4.3 基于内容评价的搜索策略
基于内容评价的搜索策略[ 3, 4 ] , 主要是根据主题(如关
键词、主题相关文档) 与链接文本的相似度来评价链接价值
的高低, 并以此决定其搜索策略: 链接文本是指链接周围的
说明文字和链接 U RL 上的文字信息, 相似度的评价通常采
用以下公式:
sim (d i, d j ) =Σmk= 1w ik ×w jk(Σmk= 1w 2ik ) (Σ
![](https://csdnimg.cn/release/download_crawler_static/87221327/bg13.jpg)
mk= 1w 2jk )
其中, di 为新文本的特征向量, d j
为第 j 类的中心向量,m
为特征向量的维数,wk
为向量的第 K
维.由于 Web 页面不
同于传统的文本, 它是一种半结构化的文档, 包含许多结构
信息 Web 页面不是单独存在的, 页面中的链接指示了页面
之间的相互关系, 因而有些学者提出了基于链接结构评价链
接价值的方法.
2.4.4 基于链接结构评价的搜索策略
基于链接结构评价的搜索策略, 是通过对 Web 页面之间
相互引用关系的分析来确定链接的重要性, 进而决定链接访
问顺序的方法. 通常认为有较多入链或出链的页面具有较高
的价值. PageRank 和 Hits 是其中具有代表性的算法.
2.4.4.1 PageRank 算法
基于链接评价的搜索引擎的优秀代表是 Google ( ://
Google ) , 它独创的“链接评价体系”(PageRank 算法)
是基于这样一种认识, 一个网页的重要性取决于它被其它网
页链接的数量, 特别是一些已经被认定是“重要”的网页的
链接数量. PageRank 算法最初用于 Google 搜索引擎信息
检索中对查询结果的排序过程[ 5 ] , 近年来被应用于网络爬
虫对链接重要性的评价, PageRank 算法中, 页面的价值通
常用页面的 PageRank 值表示, 若设页面
p
的 PageRank
值为 PR (
p
) , 则 PR (
p
) 采用如下迭代公式计算:
PR (
p
) = C 1
T
+ (1 - C) Σ C∈in (
p
)PR (
p
)ûou t (C) û
其中
T
为计算中的页面总量, C< 1 是阻尼常数因子, in (
p
)
为所有指向
p
的页面的集合, out (C) 为页面 C 出链的集合.
基于 PageRank 算法的网络爬虫在搜索过程中, 通过计算每
个已访问页面的 PageRank 值来确定页面的价值, 并优先选
择 PageRank 值大的页面中的链接进行访问.
2.4.4.2 H ITS 算法
HITS 方 法定义了两个重要 概念: Authority 和 Hub.
Authority 表示一个权威页面被其它页面引用的数量, 即该
![](https://csdnimg.cn/release/download_crawler_static/87221327/bg14.jpg)
权威页面的入度值. 网页被引用的数量越大, 则该网页的
Authority 值越大; Hub 表示一个 Web 页面指向其它页面
的数量, 即该页面的出度值. 网页的出度值越大, 其 Hub 值
越高. 由于 Hub 值高的页面通常都提供了指向权威页面的
链接, 因而起到了隐含说明某主题页面权威性的作用.HITS
(Hyperlink- Induced Top ic Search) 算 法 是 利 用
HuböAuthority 方法的搜索方法,Authority 表示一个页面
被其它页面引用的数量, 即该页面的入度值. Hub 表示一个
Web 页面指向其它页面的数量, 即该页面的出度值. 算法如
下: 将查询 q 提交给传统的基于关键字匹配的搜索引擎. 搜
索引擎返回很多网页, 从中取前 n 个网页作为根集, 用 S 表
示.通过向 S 中加入被 S 引用的网页和引用 S 的网页将 S
扩展成一个更大的集合 T.以 T 中的 Hub 网页为顶点集 V l,
以权威网页为顶点集
V
2,
V
1 中的网页到
V
2 中的网页的超
链接为边集
E
, 形成一个二分有向图
S G
= (
V
1,
V
2,
E
).对
V
1 中的任一个顶点
v
, 用
H
(
v
) 表示网页
v
的 Hub 值,
对
V
2 中的顶点
u
, 用
A
(
u
) 表示网页的 Authority 值. 开
始时
H
(
v
) =
A
(
u
) = 1, 对
u
执行公式(1) 来修改它的
A
(
u
) ,
对
v
执行公式(2) 来修改它的
H
(
v
) , 然后规范化
A
(
u
) ,
H
(
v
) , 如此不断的重复计算上述运算, 直到
A
(
u
) ,
H
(
v
) 收
敛.
A (
u
) = Σ
v
: (
v
,
u
) ∈
EH
(
v
) (1)
H (
v
) = Σ
v
: (
v
,
u
) ∈
EA
(
v
) (2)
式(1) 反映了若一个网页由很多好的 Hub 指向, 则其权威值
会相应增加(即权威值增加为所有指向它的网页的现有 Hub
值之和). 式(2) 反映了若一个网页指向许多好的权威页, 则
Hub 值也会相应增加(即 Hub 值增加为该网页链接的所有
网页的权威值之和).虽然基于链接结构价的搜索考虑了链接
的结构和页面之间的引用关系, 但忽略了页面与主题的相关
性, 在某些情况下, 会出现搜索偏离主题的问题. 另外, 搜索
过程中需要重复计算 PageRank 值或 Authority 以及 Hub
权重, 计算复杂度随页面和链接数量的增长呈指数级增长
[ 6 ].
剩余179页未读,继续阅读
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)