1、北京联合大学 毕业设计毕 业 设 计题目:网络爬虫的设计与实现姓 名: 学 号: 学 院: 专 业: 同 组 人: 指 导 教 师: 协助指导教师: 2010 年 5 月 13 日北京联合大学 毕业设计I摘 要网 络 爬 虫 是 一 个 自 动 提 取 网 页 的 程 序 , 它 为 搜 索 引 擎 从 万 维 网 上 下 载 网 页 ,是 搜 索 引 擎 的 重 要 组 成 。 通 过 网 络 爬 虫 不 仅 能 够 为 搜 索 引 擎 采 集 网 络 信 息 , 而 且可 以 定 向 采 集 某 些 网 站 的 特 定 信 息 , 如 新 闻 内 容 等 。本 文 通 过 PHP 语 言
2、实 现 了 一 个 爬 虫 程 序 。 本 论 文 阐 述 了 网 络 爬 虫 实 现 中 一些 主 要 问 题 : 为 何 要 使 用 多 线 程 , 以 及 如 何 实 现 多 线 程 ; 网 页 的 下 载 和 分 析 等 。通 过 实 现 这 一 爬 虫 程 序 , 可 以 搜 集 某 一 站 点 的 URLs 及 一 些 我 们 想 要 的 信息 , 并 将 搜 集 到 的 网 址 和 信 息 存 入 数 据 库 。关键词:网络爬虫 PHP 信息抓取北京联合大学 毕业设计IIAbstractWeb crawler is an process which can automated d
3、ownload web page, it download Web page for search engines, it is an important component of search engines. SPIDER can collect data for search engines, and can capture some of the websites the targeted specific information, such as the post content.In this paper, we use PHP implements a SPDIER proces
4、s. This paper expatiates some major problems of SPIDER: why to use multi-threading, and how to implement multi-thread; download and analysis Web page. etc.Key Words: SPIDER PHP INFORMATION CAPTURE北京联合大学 毕业设计III摘 要 .IAbstract.II引 言 .11 本文相关技术介绍 .31.1 所开发语言 PHP 简介 .31.1.1 PHP 语言 .31.1.2 PHP 的发展 .31.1.
5、3 PHP 功能 .51.2 XML 简介 .71.2.1 XML 语言 .71.2.2 XML 与 HTML 的主要差异 .71.2.3 XML 的文档结构 .71.2.4 XML 语法规则 .81. 所有 XML 元素都须有关闭标签 .82. XML 标签对大小写敏感 .83. XML 必须正确地嵌套 .94. XML 文档必须有根元素 .95. XML 的属性值须加引号 .96. XML 中的注释 .91.3 XPath 简介 .101.3.1 XPath 语言 .101.4 开发工具 LAMP 简析 .101.4.1 linux 操作系统 .11北京联合大学 毕业设计IV1.4.2 A
6、pache.121.4.3 MySql.121.5 爬行策略浅析 .131.5.1 宽度或深度优先搜索策略 .131宽度优先搜索算法 .132深度优先搜索 .131.5.2 聚焦搜索策略 .141.5.3 基于内容评价的搜索策略 .141.5.4 基于链接结构评价的搜索策略 .151PageRank 算法 .152HITS 算法 .151.5.5 基于巩固学习的聚焦搜索 .161.5.6 基于语境图的聚焦搜索 .162 系统总体分析与设计 .172.1 系统需求分析 .172.2 爬行策略分析 .172.3 系统设计 .182.3.1 数据库的设计 .181phpMyAdmin 简介 .182
7、数据库设计过程 .182.3.2 爬虫工作原理 .213 系统实现 .233.1 实现工具 .233.2 各模块实现 .23北京联合大学 毕业设计V3.2.1 执行多线程 .233.2.2 获取页面 .233.2.3 页面解析 .243.2.4 数据库连接 .244 系统测试结果 .25结 论 .26致 谢 .27参考文献 .28北京联合大学 毕业设计1引 言随 着 互 联 网 的 飞 速 发 展 , 网 络 上 的 信 息 呈 爆 炸 式 增 长 ,同 时 互 联 网 用 户 对 信息 的 需 求 也 在 不 断 增 长 , 这 使 得 人 们 在 网 上 找 到 所 需 的 信 息 越 来
8、 越 困 难 , 在 巨大 的 用 户 需 求 中 , 搜 索 引 擎 应 运 而 生 。 搜 索 引 擎 搜 集 互 联 网 上 数 以 亿 计 的 网 页 ,并 为 每 个 词 建 立 索 引 。 在 建 立 搜 索 引 擎 的 过 程 中 , 搜 集 网 页 是 非 常 重 要 的 一 个 环节 。 爬 虫 程 序 就 是 用 来 搜 集 网 页 的 程 序 。 以 何 种 策 略 偏 历 互 联 网 上 的 网 页 , 也 成了 爬 虫 程 序 主 要 的 研 究 方 向 。现 在 比 较 流 行 的 搜 索 引 擎 , 比 如 google, 百 度 , 它 们 都 拥 有 着 庞
9、大 的 用 户数 量 ,但 它 们 爬 虫 程 序 的 技 术 内 幕 一 般 都 不 公 开 。 目 前 几 种 比 较 常 用 的 爬 虫 实 现 策略 : 广 度 优 先 的 爬 虫 程 序 , Repetitive 爬 虫 程 序 , 定 义 爬 行 爬 虫 程 序 , 深 层 次 爬行 爬 虫 程 序 。 此 外 , 还 有 根 据 概 率 论 进 行 可 用 Web 页 的 数 量 估 算 , 用 于 评 估 互联 网 Web 规 模 的 抽 样 爬 虫 程 序 ; 采 用 爬 行 深 度 、 页 面 导 入 链 接 量 分 析 等 方 法 , 限 制 从 程 序 下 载 不 相
10、关 的 Web 页 的 选 择 性 爬 行 程 序 等 等 。但 是 随 着 用 户 对 信 息 需 求 的 不 断 具 体 化 与 精 细 化 , 通 用 搜 索 引 擎 中 抓 取 的 广度 、 搜 索 的 精 确 度 与 跟 新 的 速 度 这 三 大 难 题 阻 碍 着 其 满 足 互 联 网 用 户 对 信 息 具 体化 和 精 确 化 需 求 , 因 此 主 题 搜 索 引 擎 开 始 出 现 。 主 题 搜 索 引 擎 是 针 对 某 一 个 专 门领 域 的 信 息 进 行 搜 索 , 满 足 互 联 网 用 户 对 信 息 具 体 化 和 精 确 化 的 需 求 。 无 论
11、是 通用 搜 索 引 擎 , 还 是 主 题 搜 索 引 擎 , 网 络 爬 虫 ( web crawler) 在 其 中 都 扮 演 着 重要 的 角 色 。爬 虫 程 序 是 一 个 自 动 获 取 网 页 的 程 序 。 它 为 搜 索 引 擎 从 互 联 网 上 下 载 网 页 ,是 搜 索 引 擎 的 重 要 组 成 部 分 。 爬 虫 程 序 的 实 现 策 略 , 运 行 效 率 直 接 影 响 搜 索 引 擎的 搜 索 结 果 。 不 同 的 搜 索 引 擎 , 会 根 据 对 搜 索 结 果 的 不 同 需 求 , 选 择 最 合 适 的 爬行 策 略 来 搜 集 互 联 网
12、 上 的 信 息 。 高 效 , 优 秀 的 爬 虫 程 序 可 以 使 人 们 在 互 联 网 上 寻找 到 更 及 时 , 更 准 确 的 信 息 。实 现 网 络 爬 虫 的 重 点 和 难 点 有 : 多 线 程 的 实 现 ; 对 临 界 资 源 的 分 配 ; 遍 历web 图 的 遍 历 策 略 选 择 和 实 现 ; 存 储 数 据 结 构 的 选 择 和 实 现 。本 文 对 当 前 搜 索 引 擎 中 的 集 中 搜 索 策 略 进 行 介 绍 与 比 较 , 研 究 其 中 主 题 搜 索较 适 合 的 搜 索 策 略 , 并 在 此 基 础 上 , 使 用 PHP 语
13、言 在 linux 环 境 下 实 现 一 个 基于 广 度 优 先 偏 历 算 法 的 多 线 程 爬 虫 程 序 。 通 过 实 现 此 爬 虫 程 序 可 以 定 点 搜 集 某 一站 点 的 URLs 和 一 些 其 它 想 要 的 信 息 。网 络 爬 虫 系 统 的 最 大 特 色 是 采 用 多 网 络 爬 虫 线 程 并 行 工 作 的 方 式 , 每 一 个 网络 爬 虫 爬 取 某 一 个 具 体 的 web 站 点 。 这 样 做 的 优 点 有 :因 为 网 页 的 数 量 如 此 庞 大 , 考 虑 到 爬 虫 的 爬 行 效 率 , 所 以 网 络 爬 虫 必 须
14、要 被北京联合大学 毕业设计2设 计 成 多 线 程 的 , 本 论 文 便 实 现 了 一 个 多 线 程 的 网 络 爬 虫 , 每 个 线 程 爬 取 一 个 特定 的 网 页 , 这 样 做 大 大 提 高 了 爬 虫 的 效 率 。在 论 文 中 , 我 会 详 细 阐 述 为 什 么 使 用 LAMP 开 发 平 台 , 比 较 爬 虫 的 搜 索 策略 , 并 根 据 设 计 需 要 , 选 择 一 种 最 优 的 爬 行 策 略 , 以 及 设 计 的 每 一 部 分 。北京联合大学 毕业设计31 本文相关技术介绍1.1 所开发语言 PHP 简介1.1.1 PHP 语言PHP,
15、 是 英 文 超 级 文 本 预 处 理 语 言 Hypertext Preprocessor 的 缩 写 。 PHP 是一 种 HTML 内 嵌 式 的 语 言 , 是 一 种 在 服 务 器 端 执 行 的 嵌 入 HTML 文 档 的 脚 本语 言 , 语 言 的 风 格 有 类 似 于 C 语 言 , 被 广 泛 的 运 用 。PHP 独 特 的 语 法 混 合 了 C、 Java、 Perl 以 及 PHP 自 创 新 的 语 法 。 它 可 以比 CGI 或 者 Perl 更 快 速 的 执 行 动 态 网 页 。 用 PHP 做 出 的 动 态 页 面 与 其 他 的编 程 语
16、言 相 比 , PHP 是 将 程 序 嵌 入 到 HTML 文 档 中 去 执 行 , 执 行 效 率 比 完 全 生成 HTML 标 记 的 CGI 要 高 许 多 ; PHP 还 可 以 执 行 编 译 后 代 码 , 编 译 可 以 达 到 加密 和 优 化 代 码 运 行 , 使 代 码 运 行 更 快 。 PHP 具 有 非 常 强 大 的 功 能 , 所 有 的 CGI的 功 能 PHP 都 能 实 现 , 而 且 支 持 几 乎 所 有 流 行 的 数 据 库 以 及 操 作 系 统 。1.1.2 PHP 的发展PHP 最 初 是 1994 年 Rasmus Lerdorf 创
17、 建 的 , 刚 刚 开 始 只 是 一 个 简 单 的 用Perl 语 言 编 写 的 程 序 , 用 来 统 计 他 自 己 网 站 的 访 问 者 。 后 来 又 用 C 语 言 重 新 编写 , 包 括 可 以 访 问 数 据 库 。 在 1995 年 以 Personal Home Page Tools (PHP Tools) 开 始 对 外 发 表 第 一 个 版 本 , Lerdorf 写 了 一 些 介 绍 此 程 序 的 文 档 , 并 且 发 布 了PHP1.0。 在 这 早 期 的 版 本 中 , 提 供 了 访 客 留 言 本 、 访 客 计 数 器 等 简 单 的 功
18、 能 。 以后 越 来 越 多 的 网 站 使 用 了 PHP, 并 且 强 烈 要 求 增 加 一 些 特 性 , 比 如 循 环 语 句 和数 组 变 量 等 等 , 在 新 的 成 员 加 入 开 发 行 列 之 后 , 在 1995 年 中 , PHP2.0 发 布 了 。第 二 版 定 名 为 PHP/FI(Form Interpreter)。 PHP/FI 加 入 了 对 mySQL 的 支 持 , 从此 建 立 了 PHP 在 动 态 网 页 开 发 上 的 地 位 。 到 了 1996 年 底 , 有 15000 个 网 站 使用 PHP/FI; 时 间 到 了 1997 年
19、中 , 使 用 PHP/FI 的 网 站 数 字 超 过 五 万 个 。 而 在1997 年 中 , 开 始 了 第 三 版 的 开 发 计 划 , 开 发 小 组 加 入 了 Zeev Suraski 及 Andi Gutmans, 而 第 三 版 就 定 名 为 PHP3。 2000 年 , PHP4.0 又 问 世 了 , 其 中 增 加 了许 多 新 的 特 性 。PHP 原 本 的 简 称 为 Personal Home Page, 是 Rasmus Lerdorf 为 了 要 维 护 个人 网 页 , 而 用 c 语 言 开 发 的 一 些 CGI 工 具 程 序 集 , 来 取
20、代 原 先 使 用 的 Perl 程序 。 最 初 这 些 工 具 程 序 用 来 显 示 Rasmus Lerdorf 的 个 人 履 历 , 以 及 统 计 网 页 流量 。 他 将 这 些 程 序 和 一 些 表 单 直 译 器 整 合 起 来 , 称 为 PHP/FI。 PHP/FI 可 以 和北京联合大学 毕业设计4数 据 库 连 接 , 产 生 简 单 的 动 态 网 页 程 序 。 Rasmus Lerdorf 在 1995 年 6 月 8 日将 PHP/FI 公 开 释 出 , 希 望 可 以 透 过 社 群 来 加 速 程 序 开 发 与 寻 找 错 误 。 这 个 释 出的
21、 版 本 命 名 为 PHP 2, 已 经 有 今 日 PHP 的 一 些 雏 型 , 像 是 类 似 Perl 的 变 量命 名 方 式 、 表 单 处 理 功 能 、 以 及 嵌 入 到 HTML 中 执 行 的 能 力 。 程 序 语 法 上 也类 似 Perl, 有 较 多 的 限 制 , 不 过 更 简 单 、 更 有 弹 性 。在 1997 年 , 任 职 于 Technion IIT 公 司 的 两 个 以 色 列 程 序 设 计 师 : Zeev Suraski 和 Andi Gutmans, 重 写 了 PHP 的 剖 析 器 , 成 为 PHP 3 的 基 础 , 而 PH
22、P 也 在 这 个 时 候 改 称 为 PHP: Hypertext Preprocessor.5。 经 过 几 个 月 测 试 ,开 发 团 队 在 1997 年 11 月 释 出 了 PHP/FI 2, 随 后 就 开 始 PHP 3 的 开 放 测 试 ,最 后 在 1998 年 6 月 正 式 释 出 PHP 3。 Zeev Suraski 和 Andi Gutmans 在 PHP 3 释 出 后 开 始 改 写 PHP 的 核 心 , 这 个 在 1999 年 释 出 的 剖 析 器 称 为 Zend Engine7, 他 们 也 在 以 色 列 的 Ramat Gan 成 立 了
23、Zend Technologies 来 管 理 PHP 的 开 发 。在 2000 年 5 月 22 日 , 以 Zend Engine 1.0 为 基 础 的 PHP 4 正 式 释 出 , 2004年 7 月 13 日 则 释 出 了 PHP 5, PHP 5 则 使 用 了 第 二 代 的 Zend Engine5。 PHP包 含 了 许 多 新 特 色 , 像 是 强 化 的 面 向 对 象 功 能 、 引 入 PDO( PHP Data Objects, 一 个 存 取 数 据 库 的 延 伸 函 数 库 ) 、 以 及 许 多 效 能 上 的 增 强 。 目 前 PHP 4 已 经
24、 不 会 继 续 更 新 , 以 鼓 励 用 户 转 移 到 PHP 5。2008 年 PHP 5 成 为 了 PHP 唯 一 的 有 在 开 发 的 PHP 版 本 。 将 来 的 PHP 5.3将 会 加 入 Late static binding 和 一 些 其 他 的 功 能 强 化 。 PHP 6 的 开 发 也 正 在 进 行中 , 主 要 的 改 进 有 移 除 register_globals、 magic quotes 和 Safe mode 的 功 能 。PHP 的 特 性 包 括 : 开放的源代码:所有的 PHP 源代码事实上都可以得到。 PHP 是免费的。 php 的便捷性 : php 十分便捷,学习简单 基于服务器端:由于 PHP 是运行在服务器端的脚本,可以运行在UNIX、LINUX、WINDOWS 下。 嵌入 HTML:因为 PHP 可以嵌入 HTML 语言,所以学习起来并不困难。 简单的语言:PHP 坚持脚本语言为主,与 Java 和 C+不同。 效率高:PHP 消耗相当少的系统资源。 图像处理:用 PHP 动态创建图像 面向对像:在 php4,php5 中,面向对象方面都有了很大的改进,现在php 完全可以用来开发大型商业程序。