海量网页爬虫系统设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华 中 师 范 大 学 研 究 生 课 程 论 文
论文题目 海量网页爬虫系统设计报告
完成时间
课程名称 自然语言处理
专 业
年 级
注:研究生须在规定期限内完成课程论文,并用A4页面打印,加此封面装订成册后,送交评审教师。教师应及时评定成绩,并至迟在下学期开学后两周内将此课程论文及成绩报告单一并交本单位研究生秘书存档。
成 绩 评卷人
姓 名
学 号
自然语言处理课程爬虫系统技术报告
引文:本学期上完自然语言处理课程受益良多,总体上了解了自然语言处理
各个方向和领域。要做自然语言处理方面的研究。首先海量的文本数据是必须的。因此网页爬虫系统显得十分重要,另外网络爬虫也是搜索引擎抓取系统的重要组成部分。
爬虫总体系统介绍:爬虫系统主要分两大类,一种是自定义爬虫系统,还
有一种是利用开源爬虫软件。其中开源爬虫软件有很多例如:Grub Next Generation PhpDig Snoopy Nutch JSpider NWebCrawler。因为是初学爬虫,所以先暂时不想套用别人的开源代码,虽然自己一步步编的系统可能系能上不如,但是这样是自己对其中一些原理有更深的领会。因此,笔者通过网上博客和一点点查资料写了这个系统。虽然还有待完善,但也是倾心之作。最后还和其他爬虫系统做出了一些对比。
关于本技术报告描述的爬虫系统的详细介绍:本系统采用java代码编
写,myeclipse8.5的IDE工具win7操作系统。
原理:不管是自定义系统还是开源软件。爬虫的基本原理都是一样的,且并不复杂。爬虫就是从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。网络爬虫的基本工作流程如下: 1.首先选取一部分精心挑选的种子URL2.将这些URL放入待抓取URL队列;3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。4.分析已抓取URL 队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。
在爬虫系统中,待抓取URL队列是很重要的一部分。待抓取URL队列中的URL 以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取哪个页面。而决定这些URL排列顺序的方法,叫做抓取策略。主要是有两种抓取策略:1.深度优先遍历策略:深度优先遍历策略是指网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接。 2.宽度优先遍历策略宽度优先遍历策略的基本思路是,将新下载网页中发现的链接直接插入待抓取URL队列的末尾。也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。
系统总体工程说明:系统project说明:系统源代码总共分五个部分。分别是:1、数据处理类,javabean部分,封装了要提取的数据集结构;2、核心类:也就是对获取的URL利用jsoup对其进行类容获取。并将数据集以LinktypeData arraylist数组形式存储,这也是爬虫系统中最核心的部分;3、规则类,本类是为了代码的复用而编写的,其实这个部分可以直接放在核心类中,为了该系统的复用性编写本类,就是对URL的规则,参数,调用方法(get post)jsoup查询定位
方式作出了定义;4、Util处理类是最简单的一个部分,就是对URL的一个预处理,判空;5、最后一个部分是测试类,定义了一个将核心类爬取的数据输出的函数。最后要补充的就是junit环境和jsoup的jar包的导入。
具体工程的分布如下面截图:
爬虫实现细节详细分析:接下来简要说一下系统核心的一些代码。
首先是利用浏览器自带的开发者工具对所要爬取的网站进行一定的分析。现在以武汉市政府官网为例来进行说明。在浏览器中打开网站。网址为:/。
如下图:
By the way:随便吐槽一下做得真丑,特别是首页的图片,大小像素完全都没弄好。
右上角有个搜索框,红色标记。这是网站的站内搜索工具。输入关键字可以了解武汉市关于这方面的新闻。先输入“互联网”,然后搜索出结果如图:
首先当然是对网站进行分析:
如上图所示,在对服务器发出查询请求后,主要返回的documents就是一个search开头的文件包,并采用get方式来进行传递。这个查询返回文件里面包含我们所需要的数据,点开
该文件可以看出:
返回的URL网址和需要的参数信息为chanelid和searchword,现在searchword 取值为互联网。
jsoup处理HTML网页
以下列出几段核心代码:
String url = rule.getUrl();
String[] params = rule.getParams();
String[] values = rule.getValues();
String resultTagName = rule.getResultTagName();
int type = rule.getType();
int requestType = rule.getRequestMoethod();
Connection conn = Jsoup.connect(url);
// 设置查询参数
这里的URL就是我们所定义的rule类。该类包含我们要处理的地址URL,以及一系列参数。该类实例作为参数传到这个网页数据处理函数public static List
需要赋值的参数及其参数值和请求类型可以通过浏览器的开发者工具来进行查看(如上图)。
首先利用jsoup的函数connect来获得URL的链接。接下来利用这段函数来给请求参数进行赋值。
if (params != null)
{