收藏 分享(赏)

课程报告-基于Python爬虫爬取福州地铁线路.docx

上传人:yoyooong 文档编号:5695241 上传时间:2022-06-13 格式:DOCX 页数:17 大小:1.19MB
下载 相关 举报
课程报告-基于Python爬虫爬取福州地铁线路.docx_第1页
第1页 / 共17页
课程报告-基于Python爬虫爬取福州地铁线路.docx_第2页
第2页 / 共17页
课程报告-基于Python爬虫爬取福州地铁线路.docx_第3页
第3页 / 共17页
课程报告-基于Python爬虫爬取福州地铁线路.docx_第4页
第4页 / 共17页
课程报告-基于Python爬虫爬取福州地铁线路.docx_第5页
第5页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、基于Python爬虫爬取福州地铁线路目 录1 绪论11.1 概述11.2 课题背景12 采用技术与开发工具的简介12.1 Pthon语言的产生和发展历史12.2 Python语言的特色22.3 Python的缺点22.4 HTML定义22.5 URL的定义22.6 URL组成32.7 HTML原理42.8 Python3.742.9 Visual Studio Code43 项目需求分析43.1技术可行性分析43.2经济可行性53.3法律可行性54 程序设计54.1开发环境配置54.2主题页面的结构特征64.3 爬取网页信息74.4正则表达式解析94.5excel保存数据126 总结13参考文

2、献18基于Python爬取福建省地级市天气信息的软件系统的设计与实现1 绪论1.1 概述随着当今交通的迅速发展,越来越多的城市出现地铁,福州也不例外。地铁,即“地下铁路”的简称,原本指在地下运行的城市轨道交通系统,但随着城市轨道交通系统的发展,实际上地铁有时会因建造环境而将部分线路铺设在地上。福州现有三条线路,一条线路通常有二三十个站点。如果不知道地铁的线路信息,那么对于人们的出行很不便利,这时候提前爬取出地铁线路信息就很必要。爬取地铁线路信息可以让我们快速知道出行选择几号线,今天我们的课题就是爬取福州地铁数据。1.2 课题背景地铁已经成为人们密不可分的一部分,对于出勤、上学、游玩等等是一个非

3、常不错的选择。中国是一个人口大国,使用汽车出行极易造成交通拥堵现象,对大自然也有一定的污染性,所以交通的便利就此体现。地铁对于推动城市发展具有重要意义,他给我们的出行带来了很多的便利,但是随着地铁线路的越来越多线路也越来越复杂,这就需要我们通过数据处理和分析来实现线路的合理化。2 采用技术与开发工具的简介2.1 Pthon语言的产生和发展历史Python是一种面向对象、直译式计算机程序设计语言。其语法简捷而清晰、可读性强、便于维护, 并且具有丰富和强大的类库3-4。Python的作者,Guido von Rossum,荷兰人。1989年圣诞节期间,在阿萨姆斯特丹,Guido为了打发圣诞节的无趣

4、,决心开发一个新的脚本解释程序,作为ABC语言的一种继承,选中Python(根据英国广播公司的节目“蟒蛇飞行马戏”)作为程序的名字5。1991年,第一个Python编译器诞生。它是用C语言实现的,并能够调用C语言的库文件。从一出生,Python已经具有了类,函数,异常处理,包含表和词典在内的核心数据类型,以及模块为基础的拓展系统。 Python语法很多来自C,但又受到ABC语言的强烈影响。来自ABC语言的一些规定直到今天还富有争议,比如强制缩进。 但这些语法规定让Python容易读。另一方面,Python聪明的选择服从一些惯例,特别是C语言的惯例,比如回归等号赋值。Guido认为,如果“常识”

5、上确立的东西,没有必要过度纠结。 Python从一开始就特别在意可拓展性。Python可以在多个层次上拓展。从高层上,你可以直接引入. py文件。在底层,你可以引用C语言的库。Python程序员可以快速的使用Python写. py文件作为拓展模块。但当性能是考虑的重要因素时,Python程序员可以深入底层,写C程序,编译为.so文件引入到Python中使用5。Python就好像是使用钢构建房一样,先规定好大的框架。而程序员可以在此框架下相当自由的拓展或更 改。 最初的Python完全由Guido本人开发。Python得到Guido同事的欢迎。他们迅速的反馈使用意见,并参与到Python的改进。

6、Guido和一些同事构成Python的核心团队。他们将自己大部分的业余时间用于hack Python。随后,Python拓 展到研究所之外。Python将许多机器层面上的细节隐藏,交给编译器处理,并凸显出逻辑层面的编程思考。Python程序员可以花更多的时间用于思考程序的逻辑,而不是具体的实现细节。这一特征吸引了广大的程序员。Python开始流行。Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。Python在TIOBE排行榜中排行第八,它是Google的第三大开发语言,Dropbox的基础语言,豆瓣的服务器语言。Python的发展史可以作为一个代表,带给我许多启示。 在Pytho

7、n的开发过程中,社区起到了重要的作用。Guido自认为自己不是全能型的程序员,所以他只负责制订框架。如果问题太复杂,他会选择绕过去,也就是cut the corner。这些问题最终由社区中的其他人解决。社区中的人才是异常丰富的,就连创建网站,筹集基金这样与开发稍远的事情,也有人乐意于处理。如今的项目开发越来越复杂,越来越庞大,合作以及开放的心态成为项目最终成功的关键。 Python从其他语言中学到了很多,无论是已经进入历史的ABC,还是依然在使用的C和Perl,以及许多有列出的其他语言。可以说,Python的成功代表了它所有借鉴的语言的成功6。 2.2 Python语言的特色简单易学:Pyth

8、on语言相对于其他编程语言来说,属于比较容易学习的一门编程语言,它注重的是如何解决问题而不是编程语言的语法和结构。正是因为Python语言简单易学,所以,已经有越来越多的初学者选择Python语言作为编程的入门语言。例如,在浙江省2017年高中信息技术改革中,算法与程序设计课程将使用Python语言替换原有的VB语言。语法优美:Python语言力求代码简洁、优美。在Python语言中,采用缩进来标识代码块,通过减少无用的大括号,去除语句末尾的分号等视觉杂讯,使得代码的可读性显著提高。阅读一段良好的Python程序就感觉像是在读英语一样,它使你能够专注于解决问题,而不用太纠结编程语言本身的语法。

9、丰富强大的库:Python语言号称自带电池(BatteryIncluded),寓意是Python语言的类库非常的全面,包含了解决各种问题的类库。无论实现什么功能,都有现成的类库可以使用。如果一个功能比较特殊,标准库没有提供相应的支持,那么,很大概率也会有相应的开源项目提供了类似的功能。合理使用Python的类库和开源项目,能够快速的实现功能,满足业务需求。开发效率高:Python的各个优点是相辅相成的。例如,Python语言因为有了丰富强大的类库,所以,Python的开发效率能够显著提高。相对于C、C+和Java等编译语言,Python开发者的效率提高了数倍。实现相同的功能,Python代码的

10、文件往往只有C、C+和Java代码的1/51/3。虽然Python语言拥有很多吸引人的特性,但是,各大互联网公司广泛使用Python语言,很大程度上是因为Python语言开发效率高这个特点。开发效率高的语言,能够更好的满足互联网快速迭代的需求,因此,Python语言在互联网公司使用非常广泛。应用领域广泛:Python语言的另一大优点就是应用领域广泛,工程师可以使用Python做很多的事情。例如,Web开发、网络编程、自动化运维、Linux系统管理、数据分析、科学计算、人工智能、机器学习等等。Python语言介于脚本语言和系统语言之间。有不错的学习视频教程、开发工具与电子书籍。Python企业当

11、下人才需求及怎么从零基础学习好Python,和学习什么内容。2.3 Python的缺点毫无疑问,Python确实有用很多的优点,每一个优点看起来都非常吸引人。但是,Python并不是没有缺点的,最主要的缺点有以下几个:Python的执行速度不够快。当然,这也不是一个很严重的问题,一般情况下,我们不会拿Python语言与C/C+这样的语言进行直接比较。在Python语言的执行速度上,一方面,网络或磁盘的延迟,会抵消掉部分Python本身消耗的时间;另一方面,因为Python特别容易和C结合起来,因此,我们可以通过分离一部分需要优化速度的应用,将其转换为编译好的扩展,并在整个系统中使用Python

12、脚本将这部分应用连接起来,以提高程序的整体效率。Python的GIL锁限制并发:Python的另一个大问题是,对多处理器支持不好。如果读者接触Python时间比较长,那么,一定听说过GIL这个词。GIL是指Python全局解释器锁(GlobalInterpreterLock),当Python的默认解释器要执行字节码时,都需要先申请这个锁。这意味着,如果试图通过多线程扩展应用程序,将总是被这个全局解释器锁限制。当然,我们可以使用多进程的架构来提高程序的并发,也可以选择不同的Python实现来运行我们的程序。Python2与Python3不兼容:如果一个普通的软件或者库,不能够做到后向兼容,那么,

13、它会被用户无情的抛弃了。在Python中,一个槽点是Python2与Python3不兼容。因为Python没有向后兼容,给所有的Python工程师带来了无数的烦恼。2.4 HTML定义HTML(HyperText Mark-up Language)是标准通用标记语言下的一个应用,也是一种规范,一种标准, 它通过标记符号来标记要显示的网页中的各个部分,是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言。设计HTML语言的目的是为了能把存放在一台电脑中的文本或图形与另一台电脑中的文本或图形方便地联系在一起,形成有机的整体,人们不用考虑具体信息是在当前电脑上还是在网络的其它电脑上。我们只需使

14、用鼠标在某一文档中点取一个图标,Internet就会马上转到与此图标相关的内容上去,而这些信息可能存放在网络的另一台电脑中。 HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字、图形、动画、声音、表格、链接等。HTML的结构包括头部(Head)、主体(Body)两大部分,其中头部描述浏览器所需的信息,而主体则包含所要说明的具体内容。2.5 URL的定义统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。2.6 URL组成URL的格式由

15、三部分组成: (1)第一部分是协议(或称为服务方式);(2)第二部分是存有该资源的主机IP地址(有时也包括端口号);(3)第三部分是主机资源的具体地址,如目录和文件名等。第一部分和第二部分用“:/”符号隔开,第二部分和第三部分用“/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。2.7 HTML原理(1)用户输入一个网址(假设是个HTML页面,并且是第一次访问),浏览器向服务器发出请求,服务器返回HTML文件;(2)浏览器开始载入HTML的代码,发现标签内有一个标签引用外部CSS文件;浏览器又发出CSS文件的请求,服务器返回这个CSS文件;(3)浏览器继续载入HTML中部分的

16、代码,并且CSS文件已经拿到手了,可以开始渲染所要的页面了;(4)浏览器在代码中发现一个标签引用了一张图片,向服务器发出请求。此时浏览器不会等到图片下载完,而是继续渲染后面的代码;(5)服务器返回图片文件,由于图片占用了一定面积,影响了后面段落的排布,因此浏览器需要回过头来重新渲染这部分代码;(6)浏览器发现了一个包含一行Javascript代码的标签,赶快运行它;Javascript脚本执行了这条语句,它命令浏览器隐藏掉代码中的某个 (style.display=”none”)。杯具啊,突然就少了这么一个元素,浏览器不得不重新渲染这部分代码;(7)Javascript让浏览器换了一下标签的C

17、SS路径;2.8 Python3.7Python是Linux上最常用的软件之一,并且Python有Python2和Python3之分,最初在Linux中主要以使用Python2为主流的,然而自Python3出现后,社会中的企业公司已迅速以使用Python2转型为使用Python3,所以使用Python3开发更加符合当前的社会需求。2.9 Visual Studio Code可用于云开发的功能的轻型代码编辑器,具有强大的编辑和调试功能,利用IntelliSence提高生产力,是基于变量类型、函数定义和导入模块的只能代码实现,凭借“转到定义”和“查找所有引用”等功能轻松导航大型代码库。本地开发运行

18、并测试事件驱动型应用,然后在准备就绪时直接从代码编辑器部署应用,从而节省时间和资源,几乎支持所有主要的编程语言,内置JavaScript、TypeScript、CSS和HTML等基于Web的常用语言,对于开发Web技术人员来说,可以友好的开发程序设计。3 项目需求分析3.1技术可行性分析网络爬虫已经发展了很多年,并且搜索引擎也是爬虫的一种应用,通过搜索引擎能够更快速的获得有用的数据和信息。但是,一些通用性的搜索引擎也存在着定的局限性,通用搜索引擎返回的结果可能包含了大量用户不关心的网页内容,而且通用搜索引擎有限的服务器资源与无限的网络资源之间存在的矛盾进一步加深,还有,就是通用搜索引擎不能支持

19、给据语义的信息提出的查询和搜索。所以学习网络爬虫有很大的意义。因此,本课题基于Python编写基本的爬虫系统,用于网路爬虫的入门,为以后的爬虫学习奠定基础7-8。3.2经济可行性这一程序主要使用到的工具为VScode工具,还有使用到的Python标准库和第三方库,这些库都是免费提供给开发者的,属于人人皆可拥有的平民产品,而爬虫程序可以爬取指定的数据,这些数据和需要数据的人形成一种利益关系,从而我们能从其中得到收益。且Python爬虫程序的开发是不需要花费巨大资金的。所以从消耗的成本和得到的利益之间的比例来看因此具有经济可行性。3.3法律可行性本次爬取数据不会侵犯他人、集体或国家利益,不存在侵权

20、等问题,不违反国家法律,爬取地铁信息不会有侵犯他人行为,也不作为商用,而在2017年6月1日的网络安全法中,针对Python网络爬虫已经规定了网络爬虫的范围即仅为网页可视范围9,所以这一程序具有法律可行性。4 程序设计4.1开发环境配置配置requests模块,在终端输入pip install requests命令;图1 request模块图查看版本号,在终端输入python -version命令;图2 版本查看图安装beautifulsoup模块,在终端输入pip install beautifulsoup4命令;图3 beautiful模块安装图安装Lxml库:Lxml是Python的一个

21、解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高,我们可以利用他来解析HTML代码,并且在解析HTML代码的时候,如果HTML代码不规范,它会自动的进行补全。图4 Lxml库安装图图5 加载Requirements.txt图安装配置环境,导入所需模块。图6 requirement内容图4.2主题页面的结构特征: 我们爬取的页面是福州地铁网站:“首先我们要做的工作是获取福州地铁网页,如图:4.3爬取网页信息代码如下:defmain():url=#1.爬取网页datalist=getData(url)savepath=福州地铁线路.xls#3.保存数据savaData

22、(datalist,savepath)#爬取网页defgetData(url):datalist=html=askURL(url)#保存获取到的网页源码#解析数据soup=BeautifulSoup(html,html.parser)foriteminsoup.find_all(li,class_=sLink):#查找符合要求的字符串,形成列表#print(item)#测试:查看地铁线路的全部信息data=#保存一条地铁路线所有信息item=str(item)#得到指定一个url的网页内容defaskURL(url):head=User-Agent:Mozilla/5.0(WindowsNT1

23、0.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/101.0.4951.64Safari/537.36Edg/101.0.1210.53request=urllib.request.Request(url,headers=head)html=try:response=urllib.request.urlopen(request)html=response.read().decode(utf-8)#print(html)excepturllib.error.URLErrorase:ifhasattr(e,code):print(e.c

24、ode)ifhasattr(e,reason):print(e.reason)returnhtml4.4正则表达式解析数据,部分代码如下:#地铁路线名称findName=pile(raclass=cm-tthref=(.*?)(.*?)#地铁路线站点findStations=pile(r(.*?)/a)Name=re.findall(findName,item)0data.append(Name)Stations=re.findall(findStations,item)if(len(Stations)=27):Station1=Stations0data.append(Station1)St

25、ation2=Stations1data.append(Station2)Station3=Stations2data.append(Station3)Station4=Stations3data.append(Station4)Station5=Stations4data.append(Station5)Station6=Stations5data.append(Station6)Station7=Stations6data.append(Station7)Station8=Stations7data.append(Station8)Station9=Stations8data.append

26、(Station9)Station10=Stations9data.append(Station10)Station11=Stations10data.append(Station11)Station12=Stations11data.append(Station12)Station13=Stations12data.append(Station13)Station14=Stations13data.append(Station14)Station15=Stations14data.append(Station15)Station16=Stations15data.append(Station

27、16)Station17=Stations16data.append(Station17)Station18=Stations17data.append(Station18)Station19=Stations18data.append(Station19)Station20=Stations19data.append(Station20)Station21=Stations20data.append(Station21)Station22=Stations21data.append(Station22)Station23=Stations22data.append(Station23)Sta

28、tion24=Stations23data.append(Station24)Station25=Stations24data.append(Station25)Station26=Stations25data.append(Station26)Station27=Stations26data.append(Station27)elif(len(Stations)=25):Station1=Stations0data.append(Station1)Station2=Stations1data.append(Station2)Station3=Stations2data.append(Stat

29、ion3)Station4=Stations3data.append(Station4)returndatalist4.5 excel保存数据代码如下:#保存数据defsavaData(datalist,savepath):print(save.)book=xlwt.Workbook(encoding=utf-8,style_compression=0)#创建Workbook对象sheet=book.add_sheet(福州地铁线路,cell_overwrite_ok=True)#创建工作表col=(地铁线路名称,第1站,第2站,第3站,第4站,第5站,第6站,第7站,第8站,第9站,第10站

30、,第11站,第12站,第13站,第14站,第15站,第16站,第17站,第18站,第19站,第20站,第21站,第22站,第23站,第24站,第25站,第26站,第27站)foriinrange(0,28):sheet.write(0,i,coli)#列名foriinrange(0,7):print(第%d条%(i+1)data=datalistiforjinrange(0,28)sheet.write(i+1,j,dataj)#数据book.save(savepath)#保存总结在此次爬取福州地铁的实践中,我们遇到了很多问题,其中最大的问题是不知道该用什么方法来处理标签相似的地铁站,意识到了

31、我们代码能力非常薄弱,尽管如此,我们仍在此次作业编写代码的过程中更加深刻地体会到了先整体后局部的重要性,在清晰了整个代码的大题框架以后,就能更加有针对性地编写每一部分代码。小组地分工如下:林素娥:负责数据采集查找资料林可:负责总结实验报告侯新婕:负责爬取福州地铁网页信息江韵玲:负责采用正则表达式清洗数据获得所需要的地铁数据李朵:负责Excel保存数据5评分(100分制):林素娥林可侯新婕江韵玲李朵参考文献1 董付国.Python程序设计基础(第2版)M北京:清华大学出版社,2018.2 董付国. Python数据分析、挖掘与可视化M北京:人民邮电出版社,2020.3 安俊秀,唐聃,靳宇倡等. Python大数据处理与分析 M北京:人民邮电出版社,2021.4 梁勇Python语言程序设计M北京:机械工业出版社,2015.5 赵俊杰,李思霖,孙博瑞,李梦浩. 浅谈大数据环境下基于Python的网络爬虫技术J中国新通信,2020,22(04):1-5.14

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 教育专区 > 高等教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:文库网官方知乎号:文库网

经营许可证编号: 粤ICP备2021046453号世界地图

文库网官网©版权所有2025营业执照举报