毕业论文-基于Python的网络爬虫设计.docx
《毕业论文-基于Python的网络爬虫设计.docx》由会员分享,可在线阅读,更多相关《毕业论文-基于Python的网络爬虫设计.docx(19页珍藏版)》请在冰点文库上搜索。
基于Python的网络爬虫
摘要
随着计算机技术的不断发展,新的编程语言层出不穷,Python,Html正是其中的佼佼者。
相比较早期普及的高级语言(Java,C语言)等,Python有着更加实用的模块和库,虽然牺牲了底层性,但却更加方便用于开发小型项目。
此外,Html也已经被普遍用于网站前端,标记语言的特性结合CSS丰富了网页内容和形式,某种意义上也促进了更加人性化的电子商务系统的发展。
本文的网络爬虫正式基于Python语言编写的,通过对Html抓取加工将数据可视化,以监测逐渐从线下转移到线上,并随着电子商务发展越发简单普遍难以追踪的非法野生动物贸易。
本文首先对计算器语言的发展,尤其是Python和Html的优势、基础概念以及性能进行介绍。
最后着重介绍可以实现检测网络上非法野生动物贸易的爬虫的设计和实现。
程序主要包括三个模块:
URL解析,Html抓取,本地输出。
Python的开发环境和工具分别是OSX和PyChramCE,主要调用了Python中的Urllib2,beautifulsoup模块。
最终的程序可以实现对指定网站,指定关键词抓取指定内容,保存内容到本地,以便于追踪和检测。
关键字:
Python,HTML,爬虫,非法野生动物贸易
II
Python-Based"Illegalwildlifetrade"Spider
Electronics&InformationTechnologyProgram11-1
HaozhiZhuSupervisor RuiZhaoAbstract
Withthecontinuousdevelopmentofcomputertechnology,thenewprogramminglanguageafteranother,Python,Htmlistheoneofthebest.Comparedtotheearlypopularityofhigh-levellanguage(Java,Clanguage),etc.,Pythonhasamorepracticalmodulesandlibraries,althoughattheexpenseoftheunderlyingproperty,butitismoreconvenientforthedevelopmentofsmall-scaleprojects.Inaddition,Htmlhasalsobeenwidelyusedwebfrontend,featurerichCSSmarkuplanguagebindingofwebcontentandform,inasensealsopromotedthedevelopmentofamoreuser-friendlye-commercesystem.Inthispaper,basedontheofficialwebcrawlerwritteninPython,Htmlcrawlingthroughthedatavisualizationprocesstomonitorthegradualshiftfromofflinetoonline,andwiththedevelopmentofelectroniccommercemoresimpleuniversaluntraceableillegalwildlifetrade.
Firstly,thedevelopmentofthecalculatorlanguage,especiallyPythonandHtmladvantages,basicconceptsandperformanceareintroduced.Thelastfocusesonthedesignandimplementationcanbeachievedillegalwildlifetradeonthereptiledetectionnetwork.Programincludesthreemodules:
URLparsing,Htmlcapture,datavisualizationoutput.PythondevelopmentenvironmentandtoolsareOSXandPyChramCE,mainlycallinPythonUrllib2,reandosmodule.
Thefinalprogramcanbespecifiedsitedesignatedkeywordtocrawlthespecifiedcontent,andoutputinPC,inordertotrackanddetect.
Keywords:
Python,Html,spider,Illegalwildlifetrade
目录
IV
基于Python的网络爬虫 I
Python-Based"Illegalwildlifetrade"Spider II
—绪论 1
1.1毕业设计背景与目的 1
1.2国内外研究状况 1
1.3论文结构和内容 1
二相关技术介绍 2
2.1Python语言 2
2.1.1Python语言的产生和发展历史 2
2.1.2Python语言的原理 3
2.1.3Python语言的特色 3
2.1.4python语言的缺点 4
2.2URL 4
2.2.1URL的定义 4
2.2.2URI和URL的对比和举例 4
2.2.3URL组成 4
2.3Html 5
2.3.1定义 5
2.3.2Html原理 5
2.3.3Html特点 5
2.4开发工具 5
2.4.1Chrome 5
2.4.2PycharmCE 6
2.4.3终端 6
三项目需求及设计 7
3.1输入板块分析 7
3.2需要抓取的内容 8
3.3本地输出 8
四项目分析及实现 9
4.1输入模块 9
4.1.1目标网站URL 9
4.1.2Urillib2模块 9
4.1.3伪装 9
4.2抓取模块 9
4.2.1URL与html 9
4.2.2BeautifulSoup库 9
4.2.3抓取方法 9
4.3输出模块 10
4.5最终效果 11
五项目测试 12
5.1抓取结果错误测试 12
5.2显示结果错误测试 12
5.3网络连接测试 12
六结论 13
6.1收获与成长 13
6.2不足与展望 13
致谢 14
参考文献 15
—绪论
1.1毕业设计背景与目的
近些年,随着以“淘宝”为首的电子商务技术快速发展,越来越多的线下交易逐渐走向线上,其中就包括非法野生动物制品贸易。
技术的进步,让大量的非法野生动物贸易成为可能,其灵活的展示方式和便捷的交易方式不仅让网络上相关的交易越发繁荣,相关信息的繁多与复杂也让仅通过人力查看监控变得越发艰难。
与之对应的是搜索引擎技术的发展。
比如google,百度。
虽然网络中的信息越来越多,越来越复杂,搜索引擎却可以针对某一个关键词对全网进行有效的搜索。
不过它们程序的技术内幕一般都不公开,此外庞大的搜索引擎最终显示的结果是全网络遍历结果的最优解,而很难做到有效搜索针对性网站针对关键词的搜索。
并且,搜索引擎为了节约搜索速度,多使用比较底层的高级语言编写,庞大且复杂,并不是很好的参考对象。
一方面是网络上越发猖獗的野生动物贸易,越来越多的交易使用黑话、特别的缩写在一些小众网站中形成稳定的供应链和交易圈。
另一方面搜索引擎技术虽然发展迅速却难以针对性的监测,不断变化的黑话和网站小众性的干扰更让批量抓取信息方便监测变得越发困难。
对于这种困境,使用针对性设计网络爬虫来监测相关的交易是一个相当不错的选择。
不同于搜索引擎,爬虫程序是一个自动获取网页的程序,可以对针对性的网页内容中的特定内容,做出有效的抓取,并按照设计保存在本地,方便使用。
并且,区别于传统的爬虫和引擎,我选择使用Python来编写爬虫。
不同于传统高级语言(C,Java等),Python相对简单易于完成小型项目,其丰富的模块和良好的兼容性也让用其成为编写爬虫程序的优秀选择之一。
1.2国内外研究状况
正如上文所提到的,爬虫在搜索引擎中比较普遍。
目前几种比较常用的爬虫实现策略:
广度优先的爬虫程序,Repetitive爬虫程序,定义爬行爬虫程序,深层次爬行爬虫程序。
此外,还有根据概率论进行可用Web页的数量估算,用于评估互联网Web规模的抽样爬虫程序;采用爬行深度、页面导入链接量分析等方法,限制从程序下载不相关的Web页的选择性爬行程序等等。
事实上
Google的部分爬虫程序就是基于Python的,但由于Python自身的限制,更多是作为一种粘合剂配合其他语言编写的内核运行。
此外,由于网络非法野生动物贸易的监控并不具有商业性质以及其较为复杂和独特的小众需求,并无相关的企业从事相关工作。
并且由于WWF组织本身的成员多以生物学家为主,并没有相关的专业人员从事相关开发。
1.3论文结构和内容
全文介绍了基于Python的网络爬虫从确定论题到最终实现效果的过程,具体内容入下:
(1)第—章绪论主要说明本次毕业设计项目的背景和目的,包括国内外研究现状以及本次论文的结构。
(2)第二章相关技术介绍主要说明本次毕业设计项目涉及到的相关语言和对应的工具,包括
Python,Html,URL等,以及相关的开发工具Chrome,PycharmCE。
(3)第三章项目需求与设计主要说明本次毕业设计项目想法成型的过程和解决问题的思路
(4)第四章项目分析和实现,主要是将第三章设想变成现实的过程,结合实例说明操作。
(5)第五章项目测试主要说明了在实际编程过程中测试出错误时的解决方案。
(6)第六章分总结整个项目的收获与不足。
(7)最后是感谢和参考资料。
15
二相关技术介绍
2.1Python语言
2.1.1Python语言的产生和发展历史
Python的创始人为GuidovanRossum。
1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC语言的一种继承。
之所以选中
Python(根据英国广播公司的节目“蟒蛇飞行马戏”)作为程序的名字。
ABC是由Guido参加设计的一种教学语言。
就Guido本人看来,ABC这种语言非常优美和强大,是专门为非专业程序员设计的。
但是ABC语言并没有成功,究其原因,Guido认为是非开放性造成的。
Guido决心在Python中避免这一错误。
同时,他还想实现在ABC中闪现过但未曾实现的东西。
就这样,Python在Guido手中诞生了。
可以说,Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。
并且结合了Unixshell和C的习惯。
Python语言的创造者GuidovanRossum是根据英国广播公司的节目“蟒蛇飞行马戏”命名这个语言的,并非他本人特别喜欢蛇缠起它们的长身躯碾死动物觅食。
Python已经成为最受欢迎的程序设计语言之一。
2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。
自从2004年以后,python的使用率是呈线性增长。
图2.1计算机语言热门程度排行2011
Fig.2.1HotComputerLanguagein2011
由于Python语言的简洁、易读以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python教授程序设计课程。
例如卡耐基梅隆大学的编程基础、麻省理工学院的计算机科学及编程导论就使用Python语言讲授。
此外,Python语言及其众多的扩展库所
构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。
2.1.2Python语言的原理
Python语言的基本原理可以概述为Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执行。
详细步骤如下:
(1)字节码在Python虚拟机程序里对应的是PyCodeObject对象。
.pyc文件是字节码在磁盘上的表现形式。
(2)pyc文件PyCodeObject对象的创建时机是模块加载的时候,即import。
Pythontest.py会对
test.py进行编译成字节码并解释执行,但是不会生成test.pyc。
如果test.py加载了其他模块,如importutil,Python会对util.py进行编译成字节码,生成util.pyc,然后对字节码解释执行。
如果想生成test.pyc,我们可以使用Python内置模块py_compile来编译。
加载模块时,如果同时存在.py和.pyc,Python会尝试使用.pyc,如果.pyc的编译时间早于.py的修改时间,则重新编译.py并更新.
pyc。
(3)PyCodeObject,Python代码的编译结果就是PyCodeObject对象。
(4)pyc文件格式,加载模块时,模块对应的PyCodeObject对象被写入.pyc文件
(5)分析字节码,Python提供了内置函数compile可以编译Python代码和查看
(7)解析指令序列
(8)执行字节码
2.1.3Python语言的特色
简单性:
Python是一种代表简单主义思想的语言,以优雅而著称。
良好的阅读性让不少人戏称
Python为伪代码。
它使你能够专注于解决问题而不是去搞明白语言本身。
易学性:
就如同你即将看到的一样,Python极其容易上手。
一方面前面已经提到了,Python有极其简单的语法,另一方面,Python虽然也有严格的格式要求,但相比较其他高级语言几乎可以忽略不计。
开源性:
Python是FLOSS(自由/开放源码软件)之一。
简单地说,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。
FLOSS是基于一个团体分享知识的概念。
这是为什么Python如此优秀的原因之一——它是由一群希望看到一个更加
优秀的Python的人创造并经常改进着的。
高层语言:
当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。
可移植性:
由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。
如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就可以在下述任何平台上面运行。
这些平台包括
Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga等等。
编译性:
一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。
这个过程通过编译器和不同的标记、选项完成。
当你运行你的程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。
而
Python语言写的程序不需要编译成二进制代码。
你可以直接从源代码运行程序。
在计算机内部,
Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。
事实上,由于你不再需要担心如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。
由于你只需要把你的Python程序拷贝到另外一台计算机上,它就可以工作了,这也使得你的Python程序更加易于移植。
面向对象性:
Python即支持面向过程的编程也支持面向对象的编程。
在面向过程的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。
在面向对象的语言中,程序是由数据和功能组合而成的对象构建起来的。
与其他主要的语言如C++和Java相比,Python以一种非常强大又简
单的方式实现面向对象编程。
可扩展性:
如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
可嵌入性:
你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
丰富的库:
Python标准库确实很庞大。
它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。
记住,只要安装了
Python,所有这些功能都是可用的。
这被称作Python的“功能齐全”理念。
2.1.4python语言的缺点
速度慢:
和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。
而C程序是运行前直接编译成
CPU能执行的机器码,所以非常快。
无法加密:
如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows上常见的xxx.exe文件)发布出去。
要从机器码反推出C代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解
释型的语言,则必须把源码发布出去。
2.2URL
2.2.1URL的定义
统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
2.2.2URI和URL的对比和举例
简单的来讲,URL就是在浏览器端输入的这个字符串。
在理解URL之前,首先要理解URI的概念URI指的是Web上每种可用的资源,如HTML文档、图像、视频片段、程序等都由一个通用资源标志符(UniversalResourceIdentifier,URI)进行定位。
URI通常由三部分组成:
(1)访问资源的命名机制;
(2)存放资源的主机名;(3)资源自身的名称,由路径表示。
如下面的URI:
我们可以这样解释它:
(1)这是—个可以通过HTTP协议访问的资源,
(2)位于主机上,
(3)通过路径“/html/html40”访问。
2.2.3URL组成
URL的格式由三部分组成:
(1)第—部分是协议(或称为服务方式)。
(2)第二部分是存有该资源的主机IP地址(有时也包括端口号)。
(3)第三部分是主机资源的具体地址,如目录和文件名等。
第一部分和第二部分用“:
//”符号隔开,
第二部分和第三部分用“/”符号隔开。
第一部分和第二部分是不可缺少的,第三部分有时可以省略。
2.3Html
2.3.1定义
超级文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分。
网页文件本身是一种文本文件,通过在文本文件中添加标记符,可以告诉浏览器如何显示其中的内容(如:
文字如何处理,画面如何安排,图片如何显示等)。
浏览器按顺序阅读网页文件,然后根据标记符解释和显示其标记的内容,对书写出错的标记
将不指出其错误,且不停止其解释执行过程,编制者只能通过显示效果来分析出错原因和出错部位。
但需要注意的是,对于不同的浏览器,对同一标记符可能会有不完全相同的解释,因而可能会有不同的显示效果
2.3.2Html原理
(1)用户输入网址(假设是个html页面,并且是第一次访问),浏览器向服务器发出请求,服务
器返回html文件;
(2)浏览器开始载入html代码,发现
标签内有一个
标签引用外部CSS文件;浏览器又发出CSS文件的请求,服务器返回这个CSS文件;
(3)浏览器继续载入html中
部分的代码,并且CSS文件已经拿到手了,可以开始渲染页面了;
(4)浏览器在代码中发现—个标签引用了一张图片,向服务器发出请求。
此时浏览器不会等到图片下载完,而是继续渲染后面的代码;
(5)服务器返回图片文件,由于图片占用了—定面积,影响了后面段落的排布,因此浏览器需要回过头来重新渲染这部分代码;
(6)浏览器发现了—个包含—行Javascript代码的