毕业设计论文-网络爬虫设计.doc

上传人:wj 文档编号:361488 上传时间:2023-04-29 格式:DOC 页数:41 大小:534KB
下载 相关 举报
毕业设计论文-网络爬虫设计.doc_第1页
第1页 / 共41页
毕业设计论文-网络爬虫设计.doc_第2页
第2页 / 共41页
毕业设计论文-网络爬虫设计.doc_第3页
第3页 / 共41页
毕业设计论文-网络爬虫设计.doc_第4页
第4页 / 共41页
毕业设计论文-网络爬虫设计.doc_第5页
第5页 / 共41页
毕业设计论文-网络爬虫设计.doc_第6页
第6页 / 共41页
毕业设计论文-网络爬虫设计.doc_第7页
第7页 / 共41页
毕业设计论文-网络爬虫设计.doc_第8页
第8页 / 共41页
毕业设计论文-网络爬虫设计.doc_第9页
第9页 / 共41页
毕业设计论文-网络爬虫设计.doc_第10页
第10页 / 共41页
毕业设计论文-网络爬虫设计.doc_第11页
第11页 / 共41页
毕业设计论文-网络爬虫设计.doc_第12页
第12页 / 共41页
毕业设计论文-网络爬虫设计.doc_第13页
第13页 / 共41页
毕业设计论文-网络爬虫设计.doc_第14页
第14页 / 共41页
毕业设计论文-网络爬虫设计.doc_第15页
第15页 / 共41页
毕业设计论文-网络爬虫设计.doc_第16页
第16页 / 共41页
毕业设计论文-网络爬虫设计.doc_第17页
第17页 / 共41页
毕业设计论文-网络爬虫设计.doc_第18页
第18页 / 共41页
毕业设计论文-网络爬虫设计.doc_第19页
第19页 / 共41页
毕业设计论文-网络爬虫设计.doc_第20页
第20页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

毕业设计论文-网络爬虫设计.doc

《毕业设计论文-网络爬虫设计.doc》由会员分享,可在线阅读,更多相关《毕业设计论文-网络爬虫设计.doc(41页珍藏版)》请在冰点文库上搜索。

毕业设计论文-网络爬虫设计.doc

摘要

近年来,随着互联网的发展,如何高效地从互联网上获取所需的信息,成为无数个互联网公司竞相研究的新方向。

在这个大数据的时代里,谁能获取更多有用的数据,谁就有机会获取更大的利益,而从互联网上获取数据最常用的手段就是网爬虫。

网络爬虫又被称为做网络蜘蛛、网络机器人,它是一种能够根据给定URL按照一定的规则,自动搜集互联网数据信息的程序。

本课题实现一个基于Python的网络爬虫程序系统。

在本论文中,主要阐述了,实现网络爬虫的过程中的一些主要问题,例如:

如何用Python模拟登录,如何使用正则表达式匹配字符串获取信息,如何使用MySQL存储数据等。

通过这个爬虫程序可以搜集豆瓣网站的一些数据信息,例如:

网站首页的各种类型的动态消息,当前用户所关注的用户的信息等。

关键字:

网络爬虫;Python;MySQL;正则表达式

ABSTRACT

Inrecentyears,withthedevelopmentoftheInternet,howtoefficientlygettheinformationyouneedfromtheInternethasbeenthenewdirectionsinresearchfornumerousInternetcompanies.

Webcrawlerisalsoknownasspiders,webrobots.ItisaprogramwhichcanautomaticallycollectWebdatainformationaccordingtosomegivenrulesandURL.ThispaperimplementsaPython-basedwebcrawlersystem.Inthispaper,themainpartelaboratedsomeissuesduringtheprogressofimplementingthewebcrawler,suchashowtosimulateloginbyPython,howtomatchinformationbyRegularExpressionsandhowtostoragedatatoMySQLdatabase.

Youcancollectsomeusefuldatafromthesiteofdouban,suchasvarioustypesofdynamicinformationofdoubanhomepage,userinformationofconcerntothecurrentuserandsoon.

Keywords:

Webcrawler;Python;MySQL;RegularExpressions

目录

第一章绪论 1

1.1课题背景 1

1.2网络爬虫的概述 1

1.2.1网络爬虫的由来 1

1.2.2网络爬虫的原理 2

1.2.3网络爬虫的分类 2

1.2.4网络爬虫的发展趋势 2

第二章相关技术介绍 4

2.1Python 4

2.2模拟登录 4

2.3正则表达式 5

2.4MySQL 5

第三章系统分析 7

3.1需求分析 7

3.2可行性分析 8

第四章详细设计 10

4.1开发环境与组织结构 10

4.2系统流程设计 11

4.3数据库设计 12

4.3.1数据库概念设计 12

4.3.2创建数据库表 13

第五章系统实现 14

5.1系统入口及出口模块 14

5.1.1系统入口 14

5.1.2系统出口 14

5.2公共工具模块 14

5.2.1代码处理工具 14

5.2.2标签处理工具 15

5.2.3正则匹配工具 15

5.2.4文件写入工具 16

5.3模拟登录模块 16

5.3.1登录模拟 16

5.3.2验证码验证 17

5.4页面抓取模块 18

5.4.1首页及翻页抓取 18

5.4.2用户信息页面抓取 19

5.5数据爬取模块 20

5.5.1动态(Dynamic)爬取 20

5.5.2关注信息爬取 20

5.6数据存储模块 21

5.6.1写入文件 21

5.6.2下载图片 21

5.6.3存入数据库 21

第六章系统测试 23

6.1模拟登录测试 23

6.2页面抓取测试 24

6.3数据爬取存储测试 25

6.4图片下载相关测试 29

6.4.1图片下载测试 29

6.4.2描述存储测试 31

6.5返回Change-page测试 32

6.6退出系统测试 32

第七章问题与总结 34

7.1问题 34

7.2总结 34

结束语 35

致谢 36

参考文献 37

南京邮电大学通达学院2016届本科生毕业设计(论文)

33

第一章绪论

1.1课题背景

在这个网络信息数据爆炸增长的时代里,虽然互联网信息技术飞速发展,但想要从如此庞大的信息数据中找到那些真正对我们有用的信息仍然是很困难的。

因此搜索引擎诞生了,例如:

谷歌,百度,雅虎等。

搜索引擎能够根据用户输入的关键字来检索互联网上的网页,为用户找出与关键字有关或者包含关键字的信息。

作为搜索引擎的重要组成部分,网络爬虫在检索信息的过程中扮演着重要的角色,因此对于搜索引擎的发展,网络爬虫的研究是非常重要的。

而对于编写网络爬虫,Python有着自己独特的优势,例如,Python中有很多爬虫框架,这些框架使得网络爬虫在爬取数据时更加高效。

同时Python是一种面向对象的解释型高级程序设计语言,它的语法比其它高级编程语言更加简洁,更加易于阅读和理解,所以,运用Python来实现网络爬虫是一种非常好的选择。

为了进一步理解Python,研究网络爬虫,在本课题中针对豆瓣网,设计并实现一个基于Python的网络爬虫。

1.2网络爬虫的概述

1.2.1网络爬虫的由来

随着互联网上网站数量的增加,查找网络上的信息越来越困难,人们想要从网上获取自己所需要的信息就更加力不从心了。

为了满足大众对于获取网络数据的需求,搜索引擎应运而生,同时作为搜索引擎核心部分的网络爬虫也随之诞生了。

在互联网历史中,真正意义上的搜索引擎的始祖是Archie,它是由加拿大麦吉尔大学的三名学生开发的,诞生于1990年。

Archie是一个自动索引网络上匿名FTP网站文件的程序。

虽然它并不是一个真正的搜索引擎,但它是第一个可以搜索FTP文件,并且可以帮助用户下载的程序。

因为用于搜索数据的程序就像蜘蛛(Spider)或者说爬虫(Crawler)一样在互联网上爬来爬取,抓取数据,所以搜索引擎内部用于抓取数据的程序,就被称为Spider/Crawler程序。

1.2.2网络爬虫的原理

网络爬虫又被称作网络蜘蛛,网络机器人,主要用于收集互联网上的各种资源。

它是搜索引擎的重要组成部分,是一个能够自动提取互联网上特定页面内容的程序。

一般搜索引擎网络爬虫的工作流程[1]:

(1)将种子URL放到待抓取URL队列;

(2)从待抓取URL队列中取出待抓取URL,做读取URL、DNS解析、网页下载等操作;(3)将下载到的网页页面放入已下载页面库;(4)将下载过页面的URL放到已抓取URL队列;(5)分析已抓取URL队列里的URL抽取出新的URL放到待抓取队列,并进入下一次抓取循环。

本课题研究网络爬虫的基本实现,本课题爬虫的工作流程:

(1)通过URL抓取页面代码;

(2)通过正则匹配获取页面有用数据或者页面上有用的URL;(3)处理获取到的数据或者通过获取到的新的URL进入下一轮抓取循环。

1.2.3网络爬虫的分类

网络爬虫大体上可以分为通用网络爬虫,聚焦网络爬虫[2]。

通用网络爬虫,也叫全网爬虫,它从一个或者多个初始URL开始,获取初始页面的代码,同时从该页面提取相关的URL放入队列中,直到满足程序的停止条件为止。

相比于通用网络爬虫,聚焦网络爬虫的工作流程比较复杂,它需要事先通过一定的网页分析算法过滤掉一些与主题无关的URL,确保留下来的URL在一定程度上都与主题相关,并把它们放入等待抓取的URL队列。

然后在根据搜索策略,从队列中选择下一步要抓取的URL,重复上述操作,直到满足程序的停止条件为止。

聚焦网络爬虫能够爬取到与主题相关度更高的信息,例如:

为了快速地获取微博中的数据,可以利用聚焦爬虫技术开发出一个用来抓取微博数据的工具[3][4][5]。

在这个大数据时代,聚焦爬虫能够大海捞针,从网络数据海洋中找出人们需要的信息,并且过滤掉那些“垃圾数据”(广告信息等一些与检索主题无关的数据)。

1.2.4网络爬虫的发展趋势

无论互联网如何发展,搜索引擎一直保持着很重要的地位。

统计表明:

搜索引擎一直是互联网上使用次数最多的网络服务。

由于互联网上的信息数据也呈爆炸式增长,使得当前的搜索引擎获取数据的能力越来越不能满足人们的需求。

基于关键字的搜索引擎只能根据关键字搜索,也就是说只能搜索包含关键字的信息,而不能根据语义来区分关键字的意思,也不能搜索到包含关键字同义词的信息数据,这导致搜索引擎的发展越来越跟不上互联网的发展了。

最直接的表现就是,在越来越多的互联网数据中难以为用户查找出更加全面更加精准的结果了。

因此,传统的搜索引擎已经不能适应互联网信息技术的快速发展了,但是,随着计算机及互联网通讯设备的发展,搜索引擎一直拥有大量的用户,也有很好的发展前景和经济价值,所以世界上各个信息产业人员和技术都对搜索引擎的研究和发展有极大的兴趣和高度的关注[6]。

近年来,随着互联网Web2.0的出现和AJAX的发展[7],如何抓取Web2.0页面和AJAX动态页面成了搜索引擎的发展新需求。

传统的爬虫只能理解静态页面(DOM结构不变的页面),而AJAX采用的是JS事件驱动求/响应机制,同时,JS会对大量变动DOM的结构来响应动态页面,这些都是传统的爬虫(传统的爬虫是基于协议驱动的)难以理解的。

所以说,传统的搜索引擎已经不能达到抓取AJAX等动态页面的要求了,而如果想要爬取AJAX页面,所需要的搜索引擎的爬虫引擎必须是基于事件驱动的。

因此,基于主题和语义分析的网络爬虫和基于事件驱动的网络爬虫是未来一段时间内网络爬虫发展的两大方面。

第二章相关技术介绍

2.1Python

Python的作者是一个荷兰人GuidovonRossum,1982年,Guido从阿姆斯特丹大学获得了数学和计算机硕士学位[8]。

相比于现在,在他的那个年代里,个人电脑的主频和RAM都很低,这导致电脑的配置很低。

为了让程序能够在个人电脑上运行,所有的编译器的核心都是做优化,因为如果不优化,一个大一点的数组就能占满内存。

Guido希望编写出一种新的语言,这种语言应该具有功能全面,简单易学,简单易用,并且能够扩展等特点。

1989年,Guido开始编写Python语言的编译器。

Python诞生于1991年,Python的编译器是用C语言实现的,它能够调用C库[9]。

Python的基础语法中,有很多是从C中吸收过来的。

同时有一些规定来源于ABC语言,比如强制缩进等,这些规定直到今天还很有争议,然而正是这些规定却让Python易读易懂。

本课题使用的是Python2.7.5版本,因为不同的版本会有不同的特性,特此声明。

2.2模拟登录

网页上或者移动端应用程序中输入用户名及密码,进入网页或者应用程序获得某种权限的过程称之为登录,如果不进行登录的话,网页上或应用程序中某些页面会因为游客权限不足而无法跳转。

而模拟登录就是用代码或小程序模拟上述登录过程,模拟人为输入用户名和密码登录的过程[10]。

如果获得登录成功后的cookie,利用该cookie就可以访问需要登录的会员权限才能访问的页面。

当需要模拟登录某个站点时,首先需要搞清楚该网站的登录处理细节即在登录的过程中向网站发送了哪些数据。

可以通过Firefox的Firebug来抓取在登录过程中传输的Http数据包,分析网站的登录流程和登录细节,分析Http数据包中post表单的数据结构和内容,同时还要注意分析headers。

根据分析得到的数据,构造自己的post表单数据和headers数据,一般的网站登录时的post表单中至少包含username键值对、password键值对、source键值对、redir键值对,需要输入验证码时还包括captcha-id键值对和captcha-solution键值对等;而headers中一般至少要包含以下两项,User-Agent键值对和Referer键值对,User-Agent的值是用户本地环境等信息,包含操作系统版本,浏览器名称和版本等,Referer的值表示当浏览器向web服务器发送请求时,告诉服务器是从那个页面链接过来的,服务器可以利用这些信息作一些特定的处理。

例如:

某网页游戏的广告链接贴在百度某页面上,当用户看到百度页面的广告后,点击该链接进入网页游戏,网页游戏的服务器就能通过Referer的值来统计每天通过百度链接过来的玩家有多少。

Python模拟登录网站时,首先需要给出该网站的登录页面的URL,然后构造出自己的post和headers,并且用cookielib.CookieJar()创建出用来保存cookie数据(用来保持登录的状态)的cookie;然后模拟登录网站,登录成功后把登录成功的cookie数据保存起来,然后每次跳转其它页面时都利用该cookie来操作,就可以一直保持登录状态了。

2.3正则表达式

正则表达式,又称常规表达式、正规表达式(RegularExpression)。

正则表达式是指能够用来匹配一系列符合特定语法规则的字符串的字符串。

可以通过匹配字符串来检查一个串是否含有某种子串或者将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

正则表达式是由普通字符(例如字母a到z等)以及特殊字符(称为“元字符”,例如:

.*?

等)组成的字符串,该字符串可以表示某一类字符串(例如:

所有字母组成的字符串,所有数字组成的字符串等等)。

正则表达式就像一个模板,将所搜索的字符串和该模板进行匹配,符合该模板的部分匹配成功,不符合该模板的部分匹配失败。

目前,很多计算机程序设计语言都支持使用正则表达式来匹配字符串操作,Python也是其中之一。

在Python中有一个专门的模块用于各种正则表达式操作(即re模块),首先需要我们自己通过字符串的方式给出一个正则表达式,然后用pile()方法来编译正则表达式成为pattern对象,然后再通过re.match()或者re.findall()等方法利用pattern来和需要搜索的字符串进行匹配,返回匹配到的字符串。

2.4MySQL

MySQL是一个小型的关系型数据库管理系统,开发者为瑞典的AB公司[11]。

2008年1月16日,Sun公司收购了AB公司,然而2009年,Sun公司又被Oracle公司收购,所以现在MySQL属于Oracle。

由于MySQL体积小、速度快、成本低、开放源代码等特点,许多中小型网站为了降低网站总体成本,选择MySQL作为网站的数据库,目前MySQL被广泛地应用在互联网上的中小型网站中。

MySQL有许多特性,其中包括以下几个重要特性:

MySQL是用C和C++编写的,同时使用了多种编译器来测试,保证了源代码的可移植性;MySQL为C、C++、Python、Java、PHP、、Ruby和Perl等编程语言都提供了API;MySQL支持很多主流操作系统,包括AIX,HP-UX,FreeBSD,MacOS,Linux,NovellNetware,OpenBSD,OS/2Wrap,Solaris,Windows等;为了充分利用CPU的资源,MySQL还支持多线程;MySQL的SQL语句较之SQL标准语句更加的有效率,提高了查询速率;支持多种编码方式,例如GB2312,utf8,gbk等;提供了多种获取数据库连接的方式。

这些都是MySQL的特性,也是一些优点,但与其它大型数据库系统如DB2、SQLSerber、Oracle等相比,MySQL也有许多缺点,例如功能太少、规模太小等。

然而,存在就是合理的,每个数据库都有自己擅长的一方面,而MySQL所擅长的就是对于中小企业和个人使用者的轻量级和低成本。

一个程序如何和数据库进行交互呢?

首先,该程序要和数据库建立连接,然后,使用数据库连接来获取数据库操作游标,用数据库操作游标执行SQL语句,与数据库进行交互,接收返回值(即交互的结果),最后关闭数据库操作游标,关闭数据库连接。

然而,在数据库操作过程中很有可能发生异常,所以数据库使用过程中的一些相关异常的处理操作是必需的。

如果数据库操作发生异常,需要特定的输出来提示异常发生的原因,然后就可以通过这些提示信息来解决这些异常,所以在可能发生异常的地方要加上异常处理语句来处理异常。

处理异常的语句执行完毕后,理应有一个finally代码块,来执行一些固定要执行的操作,例如关闭数据库操作游标,关闭数据库连接等。

通过MySQL为Python提供的API可以对数据库中的信息进行各种操作,如创建数据库,修改数据库信息,删除数据库,创建表,修改表信息,删除表,向表中插入数据,从表中删除数据等等。

其中插入数据时,如果存入的数据是图片的话,可以把图片用二进制的方式存储到MySQL数据库,同时,存储进数据库的二进制码,也可以读取出来写入文件,生成图片。

要想使Python可以操作MySQL数据库就需要安装MySQL-python驱动,它是Python操作MySQL必不可少的模块。

该驱动中包含MySQLdb模块,此模块是Python连接MySQL数据库的模块。

Python使用MySQLdb模块操作数据库的基本步骤包括:

(1)引入MySQLdb库,importMySQLdb;

(2)连接数据库,MySQLdb模块提供connect方法来创建数据库连接,创建数据库连接时需要向connect方法中传入几个参数,比较常用的参数包括:

host:

数据库主机名.默认是用本地主机,user:

数据库登陆名.默认是当前用户,passwd:

数据库登陆的秘密.默认为空,db:

要使用的数据库名.没有默认值,port:

MySQL服务使用的TCP端口,默认是3306,charset:

数据库编码,(例如:

conn=MySQLdb.connect(host='localhost',user='root',passwd='',db='craw

lers',charset='utf8');)(3)执行sql语句并接收返回值,首先,我们用使用连接对象获得一个cursor对象,接下来,我们会使用cursor提供的方法来进行工作。

(4)关闭cursor对象,关闭数据库连接。

同时也提供了类似于java的try-catch语句,用来捕捉数据库操作过程中可能发生的异常。

第三章系统分析

3.1需求分析

本系统是基于Python的网络爬虫系统,用于登录并爬取豆瓣网的一些相册、日记、主题、评论等动态的数据信息。

并且能够把通过关键字查询的动态信息数据存储到数据库一些数据保存到数据库,存储到本地txt文件,同时能够把相册动态中的图片下载到本地,且把相册信息也记录下来,在每一页的操作完成后可以进行翻页和选页,继续操作。

因此该系统应该满足以下要求:

(1)能够通过验证码的验证模拟登录豆瓣网。

即不需要通过浏览器登录,通过在控制台输入用户名、密码和验证码实现登录豆瓣网。

(2)登录成功后能够爬取豆瓣网首页页面代码。

即通过登录成功后的cookie能够访问游客权限不能访问的页面并把页面代码抓取下来。

(3)能够在页面代码中提取出需要的信息。

即需要通过正则表达式匹配等方法,从抓取到的页面上获取到有用的数据信息。

(4)能够实现翻页和选页的功能。

即在访问网站动态页面时,能够通过在控制台中输入特定的内容进行翻页或输入页码进行选页,然后抓取其它的页面。

(5)实现关键字查询的功能,对查到的数据爬取下来并存储到数据库表中。

即在抓取到的页面上获取数据时,能够通过在控制台输入关键字来爬取所需的信息。

(6)对爬取到的图片URL能够下载到本地并把图片的详细信息存储到本地txt[12]。

即不仅要把图片下载到本地,还要把图片的主题信息,图片的所属用户,图片的具体URL等信息存储到txt文件。

(7)对日记和其他的动态信息存储到本地不同的文件中。

即对抓取到的不同的数据信息进行不同的存储方式和存储路径。

(8)在登录成功的情况下能够进入个人中心中把当前用户关注的用户的信息存储到数据库表中。

这些信息可能包括用户的id,昵称,主页url,个性签名等等。

以上就是本课程爬虫系统的一些基本的需求,根据这些需求就可以明确系统的功能。

由于本系统注重网络信息资源的爬取,所以在用户交互方面可能不太美观,在该系统中并没有编写界面,所有的操作都在Eclipse的控制台中进行。

例如:

在控制台中输入用户名、密码和验证码进行登录,登录成功后的页面选择,页面选择后的数据爬取等。

但是,系统运行后爬取的数据可以在存储数据的本地txt文件中或者在数据库中查看。

所以,本系统是否真的能够爬取到数据的测试就可以通过观察本地txt文件的内容变化或数据库表中记录的变化来验证。

本爬虫系统包括模拟登录、页面抓取、信息爬取、数据存储等主要功能。

其中,页面抓取又包括翻页抓取,选页抓取,个人页面抓取;信息爬取又包括动态抓取,关注用户抓取;数据存储又包括写入文件,下载到本地,存入数据库,如图3.1所示。

选页抓取

基于Python的网络爬虫系统

模拟登录

页面抓取

信息爬取

数据存储

关注用户抓取

动态抓取

个人页面抓取

翻页抓取

写入文件

存入数据库

下载到本地

图3.1基于Python网络爬虫系统功能结构图

3.2可行性分析

在本课题系统开发之前需要对Python网络爬虫需要用到的技术、经济、市场进行可行性分析[13]。

(1)技术可行性分析

本系统采用Python语言编写,需要用到是一些Python自带的一些模块,例如:

urllib,urllib2,re,cookielib等模块。

匹配数据采用正则表达式在Python中的应用re模块完成,存储数据采用MySQL数据库,MySQL高效,并且小巧,完全可以满足本系统的性能需求,并且本系统使用的是当前比较流行的开源的开发工具Eclipse进行开发。

本课题系统采用的技术在现实中的应用都是相当广泛的,这些都充分地说明了本系统在技术方面是可行的。

(2)经济可行性分析

本课题系统即基于Python的网络爬虫系统采用的技术Python、正则表达式,以及使用的集成开发环境即开发工具Eclipse,存储数据的MySQL等都是免费的。

同时,该系统是由本人在业余时间独立完成的,所以在人力资源的投入方面也是经济可行的。

综合以上两点,就经济可行性而言,本系统的设计与实现充分体现了成本最低化原则。

(3)市场可行性分析

随着互联网的飞速发展,大数据时代的到来,数据挖掘技术越来越得到行业内大企业知名人士的重视,而作为数据挖掘最常用的方法的网络爬虫技术越来越流行,并且在当今互联网市场上有着很广阔的发展前景和举足轻重的地位。

在国内,豆瓣网在社交领域,有着不可替代的地位。

2013年豆瓣网的独立用户的数量就达到2亿了。

豆瓣网以书影音的信息为主,为广大网友提供关于书籍、电影、音乐等作品的相关信息,包括作品的描述和评论,这些信息,无论是描述还是描述,都是由用户提供的。

一般都是那些真

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2