收藏 分销(赏)

山东建筑工程大学计算机网络专业课程设计基于Python的网络爬虫设计.doc

上传人:天**** 文档编号:2797324 上传时间:2024-06-06 格式:DOC 页数:16 大小:192.54KB
下载 相关 举报
山东建筑工程大学计算机网络专业课程设计基于Python的网络爬虫设计.doc_第1页
第1页 / 共16页
山东建筑工程大学计算机网络专业课程设计基于Python的网络爬虫设计.doc_第2页
第2页 / 共16页
山东建筑工程大学计算机网络专业课程设计基于Python的网络爬虫设计.doc_第3页
第3页 / 共16页
山东建筑工程大学计算机网络专业课程设计基于Python的网络爬虫设计.doc_第4页
第4页 / 共16页
山东建筑工程大学计算机网络专业课程设计基于Python的网络爬虫设计.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、山东建筑大学课 程 设 计 成 果 报 告题 目: 基于Python网络爬虫设计课 程: 计算机网络A院 (部): 管理工程学院专 业: 信息管理和信息系统班 级: 学生姓名:学 号: 指导老师: 完成日期: 目 录1 设计目标12 设计任务内容13 网络爬虫程序总体设计14 网络爬虫程序具体设计14.1 设计环境和目标分析14.1.1 设计环境14.1.2 目标分析24.2 爬虫运行步骤分析24.3 控制模块具体设计34.3 爬虫模块具体设计34.3.1 URL管理器设计34.3.2 网页下载器设计34.3.3 网页解析器设计34.4数据输出器具体设计45 调试和测试45.1 调试过程中碰到

2、问题45.2测试数据及结果显示56 课程设计心得和体会57 参考文件68 附录1 网络爬虫程序设计代码69 附录2 网络爬虫爬取数据文档91 设计目标本课程设计是信息管理和信息系统专业关键实践性步骤之一,是在学生学习完计算机网络课程后进行一次全方面综合练习。本课程设计目标和任务:1巩固和加深学生对计算机网络基础知识了解和掌握;2培养学生进行对网络计划、管理及配置能力或加深对网络协议体系结构了解或提升网络编程能力;3提升学生进行技术总结和撰写说明书能力。2 设计任务内容网络爬虫是从web中发觉,下载和存放内容,是搜索引擎关键部分。传统爬虫从一个或若干初始网页URL开始,取得初始网页上URL,在抓

3、取网页过程中,不停从目前页面上抽取新URL放入队列,直到满足系统一定停止条件。参考开放源码分析网络爬虫实现方法,给出设计方案,画出设计步骤图。选择自己熟悉开发环境,实现网络爬虫抓取页面、从而形成结构化数据基础功效,界面合适美化。给出软件测试结果。3 网络爬虫程序总体设计URL管理器数据输出器网页下载器网页解析器爬虫控制器在本爬虫程序中共有三个模块:1、 爬虫调度端:开启爬虫,停止爬虫,监视爬虫运行情况2、 爬虫模块:包含三个小模块,URL管理器、网页下载器、网页解析器。(1) URL管理器:对需要爬取URL和已经爬取过URL进行管理,能够从URL管理器中取出一个待爬取URL,传输给网页下载器。

4、(2) 网页下载器:网页下载器将URL指定网页下载下来,存放成一个字符串,传输给网页解析器。(3) 网页解析器:网页解析器解析传输字符串,解析器不仅能够解析出需要爬取数据,而且还能够解析出每一个网页指向其它网页URL,这些URL被解析出来会补充进URL管理器3、数据输出模块:存放爬取数据4 网络爬虫程序具体设计4.1 设计环境和目标分析4.1.1 设计环境IDE:pycharmPython版本:python2.7.134.1.2 目标分析目标:从baidu词条Python开始,以广度优先方法,爬取相关联若干词条网页标题和介绍(1)初始URL:(2)词条页面URL格式:(3) 数据格式:标题Py

5、thon介绍(4)页面编码:utf-84.2 爬虫运行步骤分析爬虫程序运行步骤图所表示。(1) 爬虫控制器从给定URL开始,将给定初始URL添加到URL管理器中,然后调用URL管理器相关方法,判定是否有待爬取URL(2) URL判定是否有待爬取URL,假如有待爬取URL,则返回给控制器,控制器将这个URL传输给网页下载器,下载该网页(3) 网页下载器将下载好数据返回给控制器,控制器再将返回数据传输给网页解析器解析(4) 网页解析器解析网页以后获取网页数据和网页URL链接,再将这两个数据传输给控制器(5) 控制器得到解析出来数据以后,将新URL链接传输给URL管理器,将价值数据传输给数据输出器输

6、出(6) 数据输出器以文本形式输出传输进来数据。(7) 回到第一步,循环4.3 控制模块具体设计爬虫控制器关键负责调度各个模块,所以在设计时候只需要一次调用其它模块方法,给对应模块传输数据即可。比较简单,可参见附录1查看源码。4.3 爬虫模块具体设计4.3.1 URL管理器设计URL管理器关键管理待抓取URL集合和已抓取URL集合。URL管理器设计难点在于:预防反复抓取,预防循环抓取。判定是否还有待爬取URL添加新URL到待爬取集合中获取待爬取URLURL管理器将URL从待爬取集合移动端已爬取集合判定待添加URL是否在容器中常见URL管理器存放方法有三种,一是使用python内存即set集合来

7、存放URL,二是使用数据库,比如MySQL,三是使用缓存数据库,比如redis。因为这只是个简单python爬虫,所以我们选择利用内存存放URL。建立两个集合,一个为待爬取集合,一个为已爬取集合,功效上图所表示。4.3.2 网页下载器设计网页下载器是将互联网上URL对应网页下载到当地工具。Python常见网页下载器有两种,一个是python自带urllib2,一个是第三方包requests。这里我们选择是urllib2,比较简单网页下载工具,其中最简练下载网页代码以下:import urllib2response = urllib2.urlopen(url)# 假如请求码不是200,则表示请求

8、不成功。# 经典错误包含404(页面无法找到),403(请求严禁),401(待验证请求)# 5XX 回应代码以“5”开头状态码表示服务器端发觉自己出现错误,不能继续实施请求if response.getcode() != 200: print download html failedcont= response.read()4.3.3 网页解析器设计网页解析器是从网页中提取有价值数据工具。价值数据网页解析器新URL列表HTML网页字符串Python常见解析器有四种,一是正则表示式,二是html.parser,三是beautifulSoup,四是lxml。这里我选择是beautifulSoup作

9、为我网页解析器,相对于正则表示式来说,使用beautifulSoup来解析网页更为简单。beautifulSoup将网页转化为DOM树来解析,每一个节点是网页每个标签,经过它提供方法,你能够很轻易经过每个节点获取你想要信息。使用方法以下:#创建BeautifulSoup对象soup = BeautifulSoup(html_cont, html.parser, from_encoding=utf-8)#查找全部标签为a节点,且href匹配正则表示式links = soup.find_all(a, href=pile(r/item/%)#查找所欲标签为div节点summary_node = so

10、up.find(div, class_=lemma-summary)4.4数据输出器具体设计数据输出器是负责数据输出工具。假如要输出文件不存在,程序会自动创建,而且每次重写之前全部会清空网页内容。这里我选择输出方法是TXT文档,直接将数据分析器得到数据存放在output.txt文件中。5 调试和测试5.1 调试过程中碰到问题(1) 爬取第一个页面以后没有新页面处理方案:依据子网页,选择适宜正则表示式(1)测试过程中一些网页中缺乏标题或介绍。处理方案:往集合中添加数据时候,判定一下是否为空,不为空再添加。5.2测试数据及结果显示测试结果以txt文档形式显示,生成文档路径和代码路径一致、6 课程设

11、计心得和体会Python是一门面向对象解释性语言(脚本语言),这一类语言特点就是不用编译,程序在运行过程中,由对应解释器向CPU进行翻译,个人了解就是一边编译一边实施。而Java这一类语言是需要预先编译。没有编译最大痛苦就是无法进行断点调试,唯一措施就是在有疑问地方打印各个变量值来进行调试。这一类语言也没用类型,也就是说一个变量即可能是int型,不过也可能是String型,而且能够随时改变。python对于代码格式要求也相当严格,经过对于缩进距离来判定代码是否处于同一个代码块。Python也不依靠分号来决定一句代码是否结束,一行代码就是一句代码。这么做好处于于代码编写看上去很统一,不过习惯了j

12、ava再看python,一开始还真有点懵。总得来说,对Python初涉感觉不错,这门语言相比较Java愈加简练,这次课设是初步接触python,以后会自己深入学习。7 参考文件1 钱程,阳小兰,朱福喜等.基于Python网络爬虫技术J.黑龙江科技信息,(36):273.2 戚利娜,刘建东.基于Python简单网络爬虫实现J.电脑编程技巧和维护,(8):72-73.3 Wesley.J.C,Core Python Programming. -9-118 附录1 网络爬虫程序设计代码spiderMain.py# coding:utf-8import loggingfrom webCraler im

13、port url_manager, html_downloader, html_outputer, html_parserclass SpiderMain(object): #初始化URL管理器,网页下载器,网页解析器和数据输出器 def _init_(self): self.urls = url_manager.UrlManager() self.downloader = html_downloader.HtmlDownloader() self.parser = html_parser.HtmlParser() self.outputer = html_outputer.HtmlOutpu

14、ter() #爬取网页 def craw(self, url): count = 1 #向URL管理器添加新URL self.urls.add_new_url(url) while self.urls.has_new_url(): try: #假如有新URL,获取这个新URL new_url = self.urls.get_new_url() #打印这是第多个爬取URL print craw %d : %s % (count, new_url) #使用网页下载器下载这个网页内容 html_cont = self.downloader.download(new_url) #使用网页解析器解析这个

15、网页内容,分别为URL和数据 new_urls, new_data = self.parser.parse(new_url, html_cont) #将解析器解析 RL添加到URL管理器 self.urls.add_new_urls(new_urls) #将解析器解析数据传输给数据输器 self.outputer.collect_data(new_data) # 爬取10个数据后自动结束 if count = 20: break count = count+1 except Exception as e: logging.exception(e) print craw failed #数据输出

16、器将数据使用HTML方法输出 self.outputer.output_html()if _name_ = _main_: print begin root_url = obj_spider = SpiderMain() obj_spider.craw(root_url)url_manager.py# coding:utf-8class UrlManager(object): def _init_(self): self.new_urls = set() self.old_urls = set() # 添加URL def add_new_url(self, url): if url is No

17、ne: return if url not in self.new_urls and url not in self.old_urls: self.new_urls.add(url) def add_new_urls(self, urls): if urls is None or len(urls) = 0: return for url in urls: self.add_new_url(url) def has_new_url(self): return len(self.new_urls) != 0 def get_new_url(self): new_url = self.new_ur

18、ls.pop() self.old_urls.add(new_url) return new_urlhtml_downloader.py# coding:utf-8import urllib2class HtmlDownloader(object): def download(self, url): if url is None: return None response = urllib2.urlopen(url) # 假如请求码不是200,则表示请求不成功。 # 经典错误包含404(页面无法找到),403(请求严禁),401(待验证请求) # 5XX 回应代码以“5”开头状态码表示服务器端

19、发觉自己出现错误,不能继续实施请求 if response.getcode() != 200: print download html failed return None return response.read()url_parse.py# coding:utf-8import urlparsefrom bs4 import BeautifulSoupimport reclass HtmlParser(object): def parse(self, page_url, html_cont): if page_url is None or html_cont is None: return

20、 soup = BeautifulSoup(html_cont, html.parser, from_encoding=utf-8) #解析URL列表,获取URL new_urls = self._get_new_urls(page_url, soup) # 解析数据 new_data = self._get_new_date(page_url, soup) print new_data return new_urls, new_data def _get_new_urls(self, page_url, soup): new_urls = set() # # links = soup.fin

21、d_all(a, href=pile(r/item/%) for link in links: new_url = linkhref # new_full_url = urlparse.urljoin(,new_url) new_urls.add(new_full_url) return new_urls def _get_new_date(self, page_url, soup): res_data = # url res_dataurl = page_url # Python title_node = soup.find(dd,class_=lemmaWgt-lemmaTitle-tit

22、le).find(h1) res_datatitle = title_node.get_text() # summary_node = soup.find(div, class_=lemma-summary) #这句话有可能出现空! res_datasummary = summary_node.get_text() print res_datasummary return res_datahtml_outputer.py# coding:utf-8class HtmlOutputer(object): def _init_(self): # 建立列表存放数据 self.datas = # 搜集

23、数据 def collect_data(self, data): if data is None: return self.datas.append(data) # 输出数据 def output_html(self): fout = open(output.txt, w) for data in self.datas: fout.write(dataurl+n) fout.write(datatitle.encode(utf-8) fout.write(datasummary.encode(utf-8)+nn) fout.close()9 附录2 网络爬虫爬取数据文档PythonPython

24、1(英国发音:/pan/ 美国发音:/pan/), 是一个面向对象解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。Python是纯粹自由软件, 源代码和解释器CPython遵照 GPL(GNU General Public License)协议2。Python语法简练清楚,特色之一是强制用空白符(white space)作为语句缩进。Python含有丰富和强大库。它常被昵称为胶水语言,能够把用其它语言制作多种模块(尤其是C/C+)很轻松地联结在一起。常见一个应用情形是,使用Python快速生成程序原型(有时甚至是程序最终界面

25、),然后对其中3有尤其要求部分,用更适宜语言改写,比如3D游戏中图形渲染模块,性能要求尤其高,就能够用C/C+重写,以后封装为Python能够调用扩展类库。需要注意是在您使用扩展类库时可能需要考虑平台问题,一些可能不提供跨平台实现。编译器简单讲,编译器就是将“一个语言(通常为高级语言)”翻译为“另一个语言(通常为低级语言)”程序。一个现代编译器关键工作步骤:源代码 (source code) 预处理器 (preprocessor) 编译器 (compiler) 目标代码 (object code) 链接器 (Linker) 可实施程序 (executables)高级计算机语言便于人编写,阅读交

26、流,维护。机器语言是计算机能直接解读、运行。编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目口号言(Target language)机器代码等价程序。源代码通常为高级语言 (High-level language), 如Pascal、C、C+、Java、汉语编程等或汇编语言,而目标则是机器语言目标代码(Object code),有时也称作机器代码(Machine code)。对于C#、VB等高级语言而言,此时编译器完成功效是把源码(SourceCode)编译成通用中间语言(MSIL/CIL)字节码(ByteCode)。最终运行时候经过通用语言运行库转换,编程

27、最终能够被CPU直接计算机器码(NativeCode)。计算机程序设计语言计算机程序设计语言是9月清华大学出版社出版图书,作者是Donald E. Knuth 。1预处理器预处理器是在真正编译开始之前由编译器调用独立程序。预处理器能够删除注释、包含其它文件和实施宏(宏macro是一段反复文字简短描写)替换。目标代码目标代码(object code)指计算机科学中编译器或汇编器处理源代码后所生成代码,它通常由机器代码或靠近于机器语言代码组成。高级语言高级语言(High-level programming language)相对于机器语言(machine language,是一个指令集体系。这种指

28、令集,称机器码(machine code),是电脑CPU可直接解读数据)而言。是高度封装了编程语言,和低级语言相对。它是以人类日常语言为基础一个编程语言,使用通常人易于接收文字来表示(比如汉字、不规则英文或其它外语),从而使程序编写员编写更轻易,亦有较高可读性,以方便对电脑认知较浅人亦能够大约明白其内容。因为早期电脑业发展关键在美国,所以通常高级语言全部是以英语为蓝本。在1980年代,当东亚地域开始使用电脑时,在日本、台湾及中国大陆全部曾尝试开发用各自地方语言编写高级语言,当中关键全部是改编BASIC或专用于数据库数据访问语言,不过伴随编程者外语能力提升,现时相关开发极少。因为汇编语言依靠于硬件体系,且助记符量大难记,于是大家又发明了愈加易用所谓高级语言。在这种语言下,其语法和结构更类似汉字或一般英文,且因为远离对硬件直接操作,使得通常人经过学习以后全部能够编程。高级语言通常按其基础类型、代系、实现方法、应用范围等分类。

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服