关于Python网络爬虫实现实践报告研究_第1页
关于Python网络爬虫实现实践报告研究_第2页
关于Python网络爬虫实现实践报告研究_第3页
关于Python网络爬虫实现实践报告研究_第4页
关于Python网络爬虫实现实践报告研究_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

成果形式:实践报告成果名称:关于Python网络爬虫实现实践报告关于python网络爬虫实现一、实践目的1、爬虫原理与数据抓取,了解通用爬虫和聚焦爬虫,GET请求和POST请求,URLError与HTTPError和Requests模块2、熟悉非结构化数据与结构化数据提取,正则表达式re模块3、熟练掌握Scrapy实战项目例如手机APP抓包爬虫,阳光热线问政平台爬虫,新浪网分类咨讯爬虫,西安财经大学教务系统爬虫二、实践内容1、网络爬虫概述网络爬虫,英文名(Webcrawler),我们又称之为网络蜘蛛人(Webrobot)或者网络机器人(Webrobot),当然还有一些不常用的名字例如蚂蚁、自动索引、模拟程序、蠕虫等等一些。在一些社区中,还会把他们成为网页追逐者,它是咱们平常说的“物联网”核心之一。网络爬虫是一个自动提取网页的程序,就是在别人做好的网页上爬取自己想要有用的东西,传统的爬虫是从一个或者很多个初始网页开始,获得初始网页的URL,在抓取网页的时候,不断地从被抓取的网页上抽取新的URL放入自己的队列中,直到满足系统的一定停止条件。更简洁一点的描述就是分为三个步骤,第一步在网页请求数据,第二步下载数据,第三步解析数据,从而提取到目标内容。2、网络爬虫的基本流程

用户获取网络数据的方式:方式1:浏览器提交请求>下载网页代码>解析成页面方式2:模拟浏览器发送请求(获取网页代码)->提取有用的数据->存放于数据库或文件中爬虫要做的就是方式2;(1)、发起请求使用http库向目标站点发起请求,即发送一个RequestRequest包含:请求头、请求体等

Request模块缺陷:不能执行JS和CSS代码(2)、获取响应内容如果服务器能正常响应,则会得到一个ResponseResponse包含:html,json,图片,视频等(3)、解析内容解析html数据:正则表达式(RE模块),第三方解析库如Beautifulsoup,pyquery等解析json数据:json模块解析二进制数据:以wb的方式写入文件(4)、保存数据数据库(MySQL,Mongdb、Redis)request请求方式:常见的请求方式:GET/POST请求的URLrl编码/s?wd=图片图片会被编码(看示例代码)网页的加载过程是:在解析document文档的时候,遇到链接,则针对超链接发起下载图片的请求请求头cookies:cookie用来保存登录信息请求体

如果是get方式,请求体没有内容(get请求的请求体放在url后面参数中,直接能看到)

如果是post方式,请求体是formatdata

ps:

1、登录窗口,文件上传等,信息都会被附加到请求体内

2、登录时输入错误的用户名密码然后提交内容,就可以看到post,正确登录后页面一般会跳转,没有办法捕捉到post响应Response响应状态码200:代表成功301:代表跳转404:文件不存在403:无权限访问502:服务器错误

preview就是网页源代码JSO数据如网页html,图片二进制数据等

3、爬虫的实战操作实例1:手机App抓包爬虫(1)、items.pyname=scrapy.Field()#存储照片的名字imagesUrls=scrapy.Field()#照片的url路径imagesPath=scrapy.Field()#照片保存在本地的路径(2)、spiders/douyu.pyimportscrapyimportjsonfromdouyuSpider.itemsimportDouyuspiderItemname="douyu"allowd_domains=[""]offset=0url="/api/v1/getVerticalRoom?limit=20&offset="start_urls=[url+str(offset)]#返回从json里获取data段数据集合data=json.loads(response.text)["data"]foreachindata:item=DouyuspiderItem()item["name"]=each["nickname"]item["imagesUrls"]=each["vertical_src"]yielditemself.offset+=20yieldscrapy.Request(self.url+str(self.offset),callback=self.parse)(3)、设置setting.pyITEM_PIPELINES={'douyuSpider.pipelines.ImagesPipeline':1}#Images的存放位置,之后会在pipelines.py里调用#user-agentUSER_AGENT='DYZB/2.290(iPhone;iOS9.3.4;Scale/2.00)'(4)、pipelines.pyimportscrapyimportosfromscrapy.pipelines.imagesimportImagesPipelinefromjectimportget_project_settingsIMAGES_STORE=get_project_settings().get("IMAGES_STORE")image_url=item["imagesUrls"]yieldscrapy.Request(image_url)image_path=[x["path"]forok,xinresultsifok]os.rename(self.IMAGES_STORE+"/"+image_path[0],self.IMAGES_STORE+"/"+item["name"]+".jpg")item["imagesPath"]=self.IMAGES_STORE+"/"+item["name"]returnitem在项目根目录下新建main.py文件,用于调试fromscrapyimportcmdlinecmdline.execute('scrapycrawldouyu'.split())执行程序py2main.pyCopyright©BigCatallrightreserved,poweredbyGitbook「RevisionTime:2017-01-0317:44:55」图SEQ图\*ARABIC1实例2:用户登陆(三次机会重试)图2username=input("请输入用户名:")

password=input("请输入密码:")

ifusername=="西安财经"andpassword=="1100":

print("登录成功")

else:

print("登录失败")实例3:在下列数组值li=[1,2,3,22,4]最后追加元素5,“caijing”,[1100,0011]三个元素,打印输出当前数组。图3li=[1,2,3,22,4]

li.append(5)

li.append("caijing")

li.append("[1100,0011]")

print(li)三、实践过程对于数学专业的同学来说,其实像这种python,java这类具有方向性专业性的课程还是很有必要学的,这可能就是学校为我们专门开设这项课程的原因吧,数学和计算机的联系比我们想象中的联系还要大,我们大三分流就能看出来,一个是数学与应用数学,另一个是信息与计算科学。我选的是数学与应用数学,所以关系好像并不是很大,但是面对这样新奇的事物,难免还是有点好奇心的,所以我就开始了第一次的爬虫课程学习。我们班是由图论软件公司的老师为我们授课的,他们公司是专门为大学生就业进行专项培训的公司。但是因为班级里人数太多,因为我们是好几个班合起来上课的,还有一部分同学选了甲骨文,数学建模的方向不同,所以每个项目人数都很多,老师也就不好管理大家了,毕竟是暑假好多院都回家了,我们的心也就有点不在这了,但是老师还是很认真负责,每天按时签到签退,我们辛苦,他们比我们还辛苦。第一天,我们赶10点到了一教,发现整栋楼只有我们教室在上课,那种凄凉,但是面对大家对知识热情似火的心,我似乎也被点燃了,一上课老师就提醒我们上课时的各种规矩,无规矩不成方圆嘛。然后让我们必须人手一台电脑,但是好多人都没有带电脑,所以就从下节课开始再教,这节课就让我们先简单了解一下网络爬虫,老师用ppt向我们展示了python语言的原理和应用,这和我们之前上计算机课学的内容还有一些相似之处,但是原理还是不一样的,要是真正学起来感觉难度也挺大的,不过老师给了我们很大的自信,他说只要用心学就没有学不会的,我也坚信这句话。然后他给我们讲了好多学习python的学长学姐的事例,基本上都是年薪20万的样子,听起来还是挺诱人的呢,不过我还是没有兴趣,因为得到越多付出的就要越多嘛,还有老师也给我们展示了python在人工智能方面的应用,例如阿尔法狗三比零战胜中国围棋第一人柯洁,还有好多好多,看到这些让我不禁感叹科技的进步,我们以后要做的还有很多,为科技进步作出贡献!第二天,我们群里通知要八点到教室,比昨天提早了两个小时,这让我心情很不爽,一教也是很远,但是生活所迫,还是得去,提着重重的电脑,背着大大的书包,今天我们上课要先下载一个软件anaconda3,老师给我们发了压缩包和下载需要用的文件,不过教室网速很慢而且那个安装还有好多很复杂的流程,我就不断的问旁边会的同学还有老师,最后耗费两个小时后终于下载完成了,老师在我们都下载完成后开始讲课,它讲述了怎样进入这个软件,还有这个软件的各种功能,我们跟着老师一步一步的学习,算是成功的入门了吧。后来老师给我们教了数组,这是最基础的,首先我们要在软件上创建数组,然后学习数组的查询类型,长度,虽然这些很简单,但是我还是有些不懂,看老师做的很容易,其实到自己做的时候就有很多的问题,我在旁边同学的帮助下学会了这些简单的操作,接下来就是更有难度的操作了,要给数组进行倒序输出,这个就是输入老师发下来的程序,再复制粘贴就好了,就能看到很神奇的数组倒序,我记得之前我们上计算机课也学过这样的操作,这节课的内容就这么多了,老师给我们还布置了作业,让我们敢下午五点发给学习委员,但是我在还没有下课的时候就完成了,超级有成就感。在第三天的时候,我已经习惯了这种上课模式,我们学习的内容也变得越来越难越来越深,这节课老师给我们教了一些算法,有for循环,while循环,if等等这种算法可以算好多好多数学题,这就解开了我多年对计算机解题的迷惑,老师在讲台上给我们演示了好多遍,并且给我们解释这些原理都是什么,我听的很认真,这节课让我真真切切的感受到网络python爬虫的魅力,后来老师让我们自己练习,我又遇到了好多难题,有一个是算1到100多的加法,可是我怎么也算不出来,然后我问了老师,他说我空格没敲对,我之前一直以为只要把代码敲对就行了,看来我太年轻了,然后做后面那些题的时候我都注意这个问题,从那以后我每次做程序都特别细心生怕有什么小细节有问题,这也让我在以后的学习生活中学会了细心。也说明了计算机的严谨性。这节课老师也像往常一样布置了作业,我在和舍友的互相扶持下,我们俩还是赶在下课前完成了老师布置的作业,之后在空闲时间我们也帮助了好多同学为他们解决了一些小问题。之后几天才是真正的爬虫,老师先给我们介绍了python的库,这个是为了让我们打好基础,其实老师说的我基本上都没有怎么听懂,专业术语很多所以很多东西在短时间内不好理解,我们也就需要做到略知一二就好了,老师讲完这些知识后,就给我们演示了一遍数据的爬取,老师爬的是我们学校的教务系统,当然这对我们学校的系统没有什么影响。老师先一个代码一个代码的敲,我都很好奇老师是怎么记住这些的,然后再把他们都复制到一个记事本上,再从网页打开就好了,看起来简单的操作,我想设计这个程序的人应该付出了很大的努力吧,看完老师的演示后,我们就开始自己做了,还是像往常一样老师给我们发代码,我们复制粘贴,出来的内容和老师一样,虽然很没有这样的操作很没有技术含量,但是当自己做出来的那一刻,还是无比兴奋。我们的课也差不多上完了,虽然时间很短,但是能感受到python的魅力很大,它为我们的科技进步作出了巨大贡献,而我们学习的仅仅是python的九牛一毛,我相信还有很多人在为研究这些付出努力,作为大学生的我们以后也会学习更多有关网络爬虫的知识。四、实践体会经过这几天python爬虫课程的学习,我见识到了很多之前没有接触过的东西,感叹计算机发展的迅速和科技进步的迅速。许多工作用计算机完成也省去了大量的人力物力,提高了经济水平。而且在现在如此严峻的就业形势下,我们向爬虫这方面发展也是一个很好的选择,尤其对于男生来说,这会是很好的就业方向,而且也会很有前途。总体来说,网络爬虫对我们生活的影响还是挺大的,因为现在很多的软件,网页制作都离不开爬虫,所以计算机人才不妄是高端人才,虽然可能在我们现实生活中可能接触不到这些,但是这些带给我们的影响都是潜移默化的,是我们科技发展的必然结果。我们已经步入大三了,接下来面对的就是就业或者考研的选择,我们python老师也给我们分析了python的专业优势,例如就业竞争度低,可以说是python人才是供不应求的,压力相对于其他专业来说就小了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论