《基于python的网络爬虫设计.docx》由会员分享,可在线阅读,更多相关《基于python的网络爬虫设计.docx(6页珍藏版)》请在课桌文档上搜索。
1、基于PythOn的网络爬虫设计【摘要】近年来,随着网络应用的逐渐扩展和深入,如何高效的获取网上数据成为了无数公司和个人的追求,在大数据时代,谁掌握了更多的数据,谁就可以获得更高的利益,而网络爬虫是其中最为常用的一种从网上爬取数据的手段.网络爬虫,即WebSPider,是一个很形象的名字。如果把互联网比喻成个蜘蛛网,那么SPider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的。从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站
2、,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取卜来。那么,既然网络爬虫有着如此先进快捷的特点,我们该如何实现它呢?在众多面向对象的语言中,首选PythOn,因为Python是一种解释型的、面向对象的、带有动态语义的高级程序,可以使人在编程时保持自Ci的风格,并且编写的程序清晰易懂,有着很广阔的应用前景。关键词python爬虫数据1 前言1.1 本编程设计的目的和意义随着网络的迅速开展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为-个巨大的挑战。搜索引擎(例如传统的通用搜索引擎AItaVista,YahOO!和GoOgle等)作为一个辅助人们检索信息的工具成为用户访问万维
3、网的入口和指南。但是,这些通用性搜索引擎也存在着-定的局限性,如:(1)不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页。(2)通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎效劳器资源与无限的网络数据资源之间的矛盾将进一步加深。(3)万维网数据形式的丰富和网络技术的不断开展,图片、数据库、音频/视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。(4)通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。为了解决上述问题,定向抓取相关网页资源的聚焦爬虫
4、应运而生。聚焦爬虫是个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫(generalpurposewebcrawler)不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某特定主题内容相关的网页,为面向主题的用户查询准备数据资源。1.2 编程设计目及思路12.1编程设计目的学习了解并熟练掌握Python的语法规那么和根本使用,对网络爬虫的根底知识进行了一定程度的理解,提高对网页源代码的认知水平,学习用正那么表达式来完成匹配查找的工作,了解数据库的用途,学习mongodb数据库的安装和使用,及配合Python的工作。1. 2.2设计
5、思路(1)以世纪佳缘网为例,思考自己所需要的数据资源,并以此为根底设计自己的爬虫程序。(2)应用PythOn伪装成浏览器自动登陆世纪佳缘网,参加变量翻开多个网页。(3)通过PythOn的UrlIib2函数进行世纪佳缘网源代码的获取。(4)用正那么表达式分析源代码,找到所需信息导入excel。(5)连接数据库,将爬下的数据存储在数据库中。1.3本编程设计应到达的要求1,对特定的网站爬取特定的数据;2,实现代码和得到结果;3,能够和数据库进行连接,将爬下的数据存储在数据库中。4、将爬下的数据储存在excel中方便编辑。2编程设计方案2. 1爬取方案3. 1.1所需爬取的数据以世纪佳缘网为例,所需要
6、爬取的数据为注册世纪佳缘网的人的用户名、真实姓名、性别、年龄、学历、月收入这些直观信息。2.1.2用Python获取世纪佳缘网的源代码爬虫最主要的处理对象就是URL,它根据URL地址取得所需要的文件内容,然后对它进行进一步的处理。因此,准确地理解URL对理解网络爬虫至关重要。URL是URl的一个子集。它是UnifOrnIResourceLOCatOr的缩写,译为统一资源定位符。通俗地说,URL是Internet上描述信息资源的字符串,主要用在各种WwW客户程序和效劳器程序上采用URL可以用一种统一的格式来描述各种信息资源,包括文件、效劳器的地址和目录等。URL的格式由三局部组成:第一局部是协议
7、(或称为效劳方式)。第二局部是存有该资源的主机IP地址(有时也包括端11号)。第三局部是主机资源的具体地址,如目录和文件名等。第一局部和第二局部用:/符号隔开,第二局部和第三局部用/符号隔开。第-局部和第二局部是不可缺少的,第三局部有时可以省略。其计算机域名为;超级文本文件(文件类型为.html)是在目录/talk下的talkl.htm。这是瑞得聊天室的地址,可由此进入瑞得聊天室的第1室。Python获取网页源代码可用UrlIib或UrIIib2函数进行,极其方便快捷,代码如下:importurllib2response=urllib2.urlopen(:/baidu/)html=respon
8、se.read()printhtml应用PythOn伪装成浏览器自动登陆世纪佳缘网,参加变量翻开多个网页。有了源代码就可以进行数据的爬取了,但是因为世纪佳缘网近日进行了改版,简单的爬虫程序已经无法在对其进行全网页的爬取工作了,所以,在获取数据之前,需要对爬虫进行一下伪装,使其成为一个浏览器,以实现全网页的爬取工作。应用OPener和header的根底知识即可实现伪装成浏览器这一步骤。在伪装的同时一,需要参加变量来翻开多个网页,是的爬取工作可以顺利进行。代码如下:r=0w=3013while3012w(.*?)/.+?>>(.*?).+?(.*?)s.+?(.*?)s.+?C*?)s
9、p.+?(.?)flp.+?re.DOTALL)2 .2存储方案2. 2.1储存在excel表格中EXCel表格具有方便筛选、查找和编辑的特点,所以将网络爬虫爬取的数据储存在excel表格中是首选。使用PythOn建立excel表格是十分容易,代码如下:fiIename=xlwt.Workbook()sheet=fiIename.addsheet(,name,)建立完成后可将数据写入excel表格:forainx:sheet,write(r,0,a0.decode(utf-8)sheet,write(r,1,al.decode(utf-8)sheet,write(r,2,a2.decode(u
10、tf-8)sheet,write(r,3,a3.decode(utf-8)sheet,write(r,4,a4.decode(utf-8)sheet,write(r,5,a5.decode(utf-8)r=rlprintr+3012fiIename.save(test3.xls)3. 2.2储存在数据库中数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。将数据储存在数据库中也具有直观简洁的特点。PythOn调用数据库是用PymOngo模块,创立与导入代码如下:db=pymongo.ConnectionO.testforainx:values
11、=dict(img=a0.decode(utf-8),infor=al.CleCode(utf-8),age=a2.decode(utf-8),adrcss=a3.decode(utf-8),marry=a4.decode(utf-8)db.user,insert(,values,rvalues)content=db.user,find()forainx:printimg:+a0.decode(utf-8)printinfor:+al.decode(utf-8)printage:+a2.decode(utf-8)printadressr,+a3.CIeCode(utf-8)printmarry
12、:,+a4.decode(utf-8)3、总结本程序利用了Python语言编写网络爬虫程序,实现了从世纪佳缘网上爬取用户数据资料,使用UrlIib函数以及re模块、PynlOngo模块进行源代码的获取、编辑和数据的导出,并针对网页代码中无性别显示的问题,采取爬取注册用户信息同时爬取注册用户照片地址的方式解决,浏览所爬取信息时,只需将照片地址输入浏览器地址栏,即可得到所查看用户上传的自拍照,得到形象信息。总的来说程序设计简便、实用性强、便于读取和再利用。4、附录4. 1将爬取数据储存在excel表格5. 1.1源代码#coding=gbkimportreimportxlwtimportcooki
13、elibimporturllib,urllib2ttfiIename=xlwt.Workbook()sheet=fiIename.addsheet(,name,)find_re=repile(rabsolute.+?span(.*?)/.+?>>(.*?).+?(.*?)s.+?(.*?)s.+?/(*?)sp.+?(.*?),re.DOTALL)r=0w=3013while3012w(.*?)/.+?>>(*?).+?(.*?)s.+?(*?)s.+?(.*?)sp.+?,re.DOTALL)w=llwhile10w20:w=w+lk三str(w)jiayuanpag
14、e=urllib.urlopen(zr:/1079608+k+?fxly二SearCh_v2_indcx)html=page.read()x=find_re.findall(html)forainx:values=dict(img-a0.decode(utf-8),infor=al.decode(utf-8),age=a2.decode(utf-8),adress=a3.decode(utf-8),marry=a4.decode(utf-8)db.user,insert(,values,rvalues)content=db.user,find()forainx:printimg:+a0.decode(utf-8)printinfor:,+a1.decode(utf-8)print,age:+a2.decode(utf-8)print,adress:+a3.decode(utf-8)print,marry:+a4.decode(utf-8)6. 2.2爬取数据汇总截图参考文献(1) GuidovanrossumPython手册(2) MagnusLieHctlarpython根底教程(3)罗刚,王振东自己动手写网络展虫