计算机科学与工程学院
课程设计报告
题目全称: 搜索引擎之网络蜘蛛
题目难度等级: 4
指导老师: 职称:
学生姓名: 学号: 班号:
设计过程(30分) | 正则匹配超链接 课程设计报告(30分) | 课程设计程序(40分) | 总分 |
备注:如参加答辩,请指导教师只给出设计过程30分,课程设计报告、课程设计程序由答辩老师给出。
如参加答辩,请答辩老师签字:
指导老师评语:
指导教师签字:
搜索引擎之网络蜘蛛
1、设计背景与目的:
随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南。
但是,这些通用性搜索引擎也存在着一定的局限性,如:
(1) 不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页。
(2)通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。
(3)万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。
(4)通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。
为了解决上述问题,网络爬虫应运而生。
网络蜘蛛(Web spider)也叫网络爬虫(Web crawler)[1],蚂蚁(ant),自动检索工具(automatic indexer),或者(在FOAF软件概念中)网络疾走(WEB scutter),是一种“自动化浏览网络”的程序,或者说是一种网络机器人。它们被广泛用于互联网搜索引擎或其他类似网站,以获取或更新这些网站的内容和检索方式。它们可以自动采集所有其能够访问到的页面内容,以供搜索引擎做进一步处理(分检整理下载的页面),而使得用户能更快的检索到他们需要的信息。
2、设计原理:
网络爬虫始于一张被称作种子的统一资源地址(URLs)列表。当网络爬虫访问这些统一资源定位器时,它们会甄别出页面上所有的超链接,并将它们写入一张"待访列表",即所谓"爬行疆域"(crawl frontier)。此疆域上的统一资源地址将被按照一套策略循环访问。如果爬虫在他执行的过程中复制归档和
保存网站上的信息,这些档案通常储存,使他们可以被查看。阅读和浏览他们的网站上实时更新的信息,并保存为网站的“快照”。大容量的体积意味着网络爬虫只能在给定时间内下载有限数量的网页,所以要优先考虑其下载。高变化率意味着网页可能已经被更新或者删除。一些被服务器端软件生成的URLs(统一资源定位符)也使得网络爬虫很难避免检索到重复内容。
基于目标数据模式的爬虫针对的是网页上的数据,所抓取的数据一般要符合一定的模式,或者可以转化或映射为目标数据模式。
3、设计内容:
通过winsocket编程,读取指定网页信息。然后采用广度优先算法搜索该网页上面的链接地址(搜索深度不超过3),将网页数据的标题和正文内容及网址存储到文件中。
详细功能描述:
使用python3语言编写网络爬虫,建立图形界面,输入目标链接地址以及存储地址以及搜索深度(不超过3),执行搜索访问,并扩展至该链接上的其他链接,经过简单筛选将正文内容和标题存储在文件中。
支持以及几个操作:
链接框:输入初始链接
路径框:输入存储路径
路径选择:在计算机中选择存储文件(爬下来资料)的放置位置
深度选择:选择深度在1~3范围内的搜索
执行搜索:点击后执行爬的操作
停止搜索:点击后停止爬的操作并返回截止当前的结果
清空按钮:点击后清空路径、链接、以及状态栏
状态栏:即时反馈当前搜索的状态
弹框:当正常结束搜索或点击停止结束搜索时弹出,返回已爬网页数目以及所用总时间
4、设计环境:
操作系统:windows
程序设计语言:
Tkinter(图形界面)
5、设计步骤:
首先,安装Python3并学习基础的使用方法。
使用Python3的原因:Python是一种面向对象、直译式的计算机程序语言,具有近二十年的发展历史。它包含了一组功能完备的标准库,能够轻松完成很多常见的任务。
Python为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。用Python开发,许多功能不必从零编写,直接使用现成的即可。
但有两个缺点:
第一个缺点就是运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。
第二个缺点就是代码不能加密。
但是对于课程设计来说本着学习的目的,可以忽略这两个缺点所带来的影响。
接下来,学会基于网络爬虫和python3的宽度优先搜索以及队列简单使用:
伪代码如下:
queue Q队列
set S集合
StartPoint = " 设置起点
(StartPoint) 将起点加入队列
(StartPoint) 将起点加入集合
while () == false) 当队列非空时
T = () 获取队首元素并且弹出
for point in T: 对于元素内的所用url链接point
if (point not in S)如果该链接不在集合内(则表示没有访问过)
(point) 将point加入队列
(point) 将point加入集合
当然,在上述伪代码中没有考虑深度的控制,这个非常简单,只需要加几句话就够了。
为了实现上述的伪代码,首先是要实现链接的抓取,这个py3中已经有很好的实现模版了:
#encoding:UTF-8
#编码方式
import
#类似于C++语言中的声明头文件
url = " "
data = 获取链接
data = ('UTF-8')
#解码,输出
print(data)
输出如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论