基于python网络爬虫技术的数据获取和可视化分析
摘 要
随着交通运输技术的快速发展,铁路、高铁、公路等交通网也在不断完善,并成为重要的货客运输方式组成部分。贵州省最重要的货客运输方式就是铁路和公路还有高铁,而受新冠疫情影响最严重的货客运输方式就包括铁路和公路以及高铁。在大数据时代,网络中存在着大容量、更新快、数据繁杂、来源多样的有价值的信息,这就要求我们学习并使用基于python语言的网络爬虫技术对我们研究所需的数据进行精确获取,并且对数据进行处理。自2019年12月新冠疫情爆发以来,贵州省的公路、铁路、高铁货客运输受到疫情的严重影响,在疫情初期公路、铁路、高铁的货客运输量呈断崖式下跌。本课题的目的是利用python网络爬虫技术获取贵州省公路、铁路、高铁货客运输量的数据,并对数据进行分析和可视化展示,从中得到在疫情大背景下贵州省公路、铁路、高铁货客运输量的变化情况以及应对策略。
关键词:大数据;网络爬虫;数据获取;可视化;客货运输
Data acquisition and visual analysis based on python web crawler technology
Abstract
With the rapid development of transportation technology, railway, high-speed rail, highway and other transportation networks are constantly improving, and become an important part of freight and passenger transportation. The most important means of freight and passenger transportation in Guizhou province are railway, road and high-speed rail, which are the most severely affected by COVID-19. In the era of big data, there is valuable information with large capacity, fast update, complex data and diverse sources in the network, which requires us to learn and use the Web crawler technology based on Python language to accurately acquire the data needed for our research and process the data. Since the outbreak of COVID-19 in December 2019, freight and passenger transportation on roads, railways and high-speed trains in Guizhou province has been seriously affected by the epidemic. In the early stage of the epidemic, freight and passenger transportation on roads, railways and high-speed trains decreased by a cliff. The purpose of this project is to use Python network crawler technology to obtain the data of freight transport volume of highway, railway and high-speed railway in Guizhou Province, analyze and visually display the data, and get the change of freight transport volume of highway, railway and high-speed railway in Guizhou Province under the background of epidemic situation and countermeasures.
Keywords:Big data;Web crawler;Data acquisition;visualization;Passenger and cargo transportation
目 录
1.1研究目的.................................................................................. 1
1.2研究意义.................................................................................. 1
1.3研究现状.................................................................................. 1
1.4研究内容.................................................................................. 2
1.5论文结构.................................................................................. 3
2环境搭建............................................................................................. 4
2.1安装python............................................................................ 4
2.2安装pycharm......................................................................... 4
2.3安装MySQL和第三方库....................................................... 5
3 python网络爬虫............................................................................... 7
3.1网络爬虫技术.......................................................................... 7
3.2常见开发网络爬虫的语言....................................................... 7
3.3编写python网络爬虫........................................................... 9
4爬取数据及数据处理....................................................................... 12
4.1数据采集技术........................................................................ 12
4.1.1 Urllib.......................................................................... 12
4.1.2浏览器伪装................................................................. 13
4.1.3用户代理池................................................................. 14
4.2爬取数据................................................................................ 14
4.3数据提取技术........................................................................ 15
4.3.1数据提取..................................................................... 15
4.3.2 Xpath提取................................................................. 15
4.4数据处理................................................................................ 16
5数据可视化分析............................................................................... 17
5.1数据可视化技术.................................................................... 17
5.2可视化结果分析.................................................................... 18
5.2.1公路货客运输............................................................. 18
5.2.2铁路货客运输与高铁旅客运输.................................. 22
5.2.3货客运输总量............................................................. 27
5.2.4 可视化大屏................................................................ 28
6总结与展望....................................................................................... 30
6.1总结........................................................................................ 30
6.2展望........................................................................................ 31
1引 言
1.1研究目的
随着交通运输技术的快速发展,铁路、高铁、公路等交通网也在不断完善,并成为重要的货客运输方式组成部分。贵州省最重要的货客运输方式就是铁路和公路还有高铁,而受新冠疫情影响最严重的货客运输方式就包括铁路和公路以及高铁。本课题的目的是利用python网络爬虫技术获取贵州省公路、铁路、高铁货客运输量的数据,并对数据进行分析和可视化展示,从中得到在疫情大背景下贵州省公路、铁路、高铁货客运输量的变化情况以及应对策略。
1.2研究意义
自2019年12月新冠疫情爆发以来,贵州省的公路、铁路、高铁货客运输受到疫情的严重影响,在疫情初期公路、铁路、高铁的货客运输量呈断崖式下跌,在疫情得到控制后公路、铁路、高铁的货客运输量才得到缓慢回升。本课题的研究意义在于探索新冠疫情的爆发与贵州省公路、铁路、高铁货客运输量涨跌的关系,从中找到疫情影响公路、铁路、高铁货客运输量的关键因素。
1.3研究现状
在国民经济发展中,交通运输占据着关键性的地位,在推动地区交流和区域集聚过程中奠定着坚实的基础,能够为人们的日常出行带来较大的便利,因此,必须意识到交通运输业在社会进程中的重要作用。[1]
新冠肺炎疫情是新中国成立以来,传播速度最快、感染范围最广、防控难度最大的重大突发公共卫生事件,对经济社会发展影响巨大[2]。交通运输在应对新冠肺炎疫情防控工作中发挥了强有力先导性、基础性的服务保障作用,同时疫情对交通运输行业也产生了较大的影响[3]。分析新冠肺炎疫情对综合交通运输的长期性影响,研究提出针对性策略,具有实际意义[2]。
新冠肺炎疫情下,交通运输行业是少数没有完全停止运作的行业,但这不代表该行业未受影响,相反在疫情环境下运作,该行业受到的影响更大,要做好各种应对措施,同时还要考虑不同时期的影响,确保自身运作不会对社会安全造成威胁,要小心翼翼的复苏。[4]
自新型冠状病毒肺炎疫情爆发以来,对经济及交通运输行业发展产生了较大影响[5]。客流量断崖式骤降,运输企业积极调整运力结构和班次安排,然而由于交通运输业的特点,行业将面临严峻的阶段性生存压力[6]。江西省研究显示,2020由于新冠肺炎疫情的爆发,全省交通运输业受到明显冲击,1月、2月全省货运量出现较大幅度的下滑,从二季度开始,随着疫情的逐步控制,交通运输业也逐步复苏,货运量随之提升[7]。
节假日或重大突发公共卫生事件期间的交通管控政策对城际交通运输产生了影响,但是当面临节假日和重大突发公共卫生事件同时发生的情况时,对单一对象的研究无法准确判断城际交通运输需求特征。[8]
国内研究机构的研究表明,公路、铁路、高铁等公共货客运输系统加大了新冠病毒的传播扩散速度,这是因为公路、铁路、高铁旅客运输在运输过程中是处于一个密闭、人群密集、空气无法有效流通、人群流量大且流通速度快的环境中,公路的货物运输具有流量大、来源复杂、公路交通网复杂难以管控的特点。在新冠疫情爆发期间,全国各城市为有效阻止新冠病毒的传播扩散,纷纷采取各种措施,造成新冠疫情爆发初期公路、铁路、高铁的货客运输量大幅度下降。
国外研究机构的研究表明,在新冠疫情期间,纽约市居家人口数量得到提高,疫情形势缓和后居家人口数量比较稳定。研究结果还显示,居家人口数量的提高降低了4公里内的出行频率和公共交通客流量,每日新增病例和确诊病例与超过4公里低于400公里距离出行形成负相关,超过400公里的距离出行与疫情指标相关性较低。新冠疫情提高了自行车与小汽车的出行份额,人群出行习惯逐渐被改变,对交通系统产生深远影响。
1.4研究内容
随着网络技术的发展,网络历史踏进了新的里程碑——大数据时代。在大数据时代,网络中存在着大容量、更新快、数据繁杂、来源多样的有价值的信息,这就要求我们学习并使用基于python语言的网络爬虫技术对我们研究所需的数据进行精确获取,并且对数据进行处理。而python 作为数据分析领域的最佳选择语言,其跨平台、灵活简单的特性,加上 python 在数据分析方面拥有极为丰富的外部库,为大数据分析运用提供了重要保障[9]。利用基于python语言的网络爬虫技术和数据可视化技术,获取到的数据更精确,处理数据更准确,数据变化趋势更明了,免去了手动获取数据和处理数据的海量的工作量,大大提高了工作效率。自疫情爆发以来,公众出行呈现“非必须出行基本不再走动急需货采购基本生活物资尽量少出行、必须出行的大多采用私家车而非公共交通方式”的特点,总体旅客运输需求大幅下降[5]。本课题的研究内容是使用python爬虫获取贵州省铁路、公路、高铁货客运输数据,并对数据进行分析,从中不同的运输方式受新冠疫情影响的程度、不同的运输方式中货物运输与旅客运输受疫情的影响是消极的还是积极的、旅客运输和货物运输哪方面受影响更严重。
1.5论文结构
第一章是引言部分,主要叙述了本文的研究目的、研究意义、研究现状和研究内容以及论文结构组成。
第二章主题是环境搭建,本章主要对设计所需的环境进行叙述,介绍了环境搭建的过程。
第三章主题是python网络爬虫,本章主要叙述了网络爬虫的概念和常见的开发网络爬虫的语言以及编写网络爬虫的代码。
第四章主题是爬取数据及数据处理,介绍了数据采集技术的相关概念和爬虫的相关理论Urllib、浏览器伪装、用户代理池等。对数据提取技术和数据处理进行简要阐述。
第五章主题是数据可视化分析,首先是对数据可视化技术相关理论进行阐述,然后是对数据可视化结果进行分析。
第六章是总结,主要是对本次毕业论文编写设计过程中学到的知识进行叙述以及对可视化分析结果进行总结。
2环境搭建
2.1安装python
打开python官网(https://python.org),根据Windows系统下载64位的python3.9.7,下载完成打开安装包,勾选Install launcher for all users(recommended)选项和自定义安装Customize installation,默认打钩内容,点击Next,勾选 Install for all users选项,Browse为选择安装路径,可以自定安装路径,选择好后点击Istalla即可安装。
打开python安装路径,右键点击此电脑,选择属性,点击高级系统设置,选择高级选项,点击环境变量,然后在系统变量下选中path,点击编辑,在编辑栏末添加“;+python路径”。安装后要检查python是否安装成功,运行是否正常,打开命令提示符(Windows+R键输入cmd),在终端输入python,出现如图2.1内容即安装成功。

图2.1 检查python安装成功
2.2安装pycharm
打开pycharm官网(https://www.jetbrains.com/pycharm/),根据64位的电脑系统选择pycharm的免费版本下载,下载完成后双击安装包打开后选择“是”,点击Next,点击Browse选择安装路径后点击Next继续下一步,选中除“Add “Open Folder as Project”:将打开的文件夹添加为项目”之外的所有选项,点击Next,点击Install,选中“I want to manually reboot later:我想稍后手动重启”,点击Finish安装完成。
首先打开pycharm点击“Configure python Interpreter”,之后pycharm就会自动定位到“Project Interpreter”这个位置,“Project Interpreter”是pycharm的设置窗口之一,专门用于配置python解释器的。此时只需要点击“Project Interpreter”右侧的小三角菜单,点击下拉菜单之后,pycharm会自动弹出python的解释器路径,只需要选择其中一个python解释器,就可以配置成功,此时可以看到“Project Interpreter”已经有python解释器了,并且相关的库正在加载中(Loading),稍等片刻之后就可以加载成功,相关库加载好之后,python解释器配置就完成了。
2.3安装MySQL和第三方库
在请求和提取数据之后,还需要保存数据。MySQL是一个关系数据库管理系统,目前隶属于oracle。它是由瑞典公司MySQL AB开发的,MySQL是目前流行的关系数据库管理系统。它最适合作为RDBMS(关系数据库管理系统)应用程序的WEB应用程序。MySQL是一个关系数据库管理系统。关系数据库将所有数据记录在不同的表中,这提高了速度和灵活性。SQL语言是一种用于访问数据库的标准化语言。
第三方库的安装方法,点击pycharm右下角,选择Interpreter Settings,点击“+”号,在搜索框输入要安装的Beautiful Soup,点击Install Pakage,显示“Package‘beautifulsoup’installed succesfully ”即表示安装成功,requests库安装方法同上。
安装PyMySQL,PyMySQL是封装了MySQL驱动的python驱动,一个能使python连接到MySQL的库。打开pycharm,在terminal中输入pip install PyMySQL,按回车执行,安装成功查看PyMySQL版本,输入pip show PyMySQL,再回车。利用PyMySQL连接数据库,前提已经安装好MySQL数据库,且已建立好数据库,其中有表。代码可分为五个步骤:连接数据库、生成游标对象、执行SQL语句、关闭游标、关闭连接。代码如下:
import pymysql
#连接数据库
conn = pymysql.connect(host = '192.168.63.1', #连接的主机名或ip地址
user = 'root', #用户名
passwd = 'password', #密码
port = 3306, #端口号
db = 'gzs_gllkyssj') #数据库名称
cur = conn.cursor() #生成游标对象
#SQL语句
cursor.execute('select * from gzs_gllkyssj;')
result = cursor.fetchall()
print('查询到的结果:\t', result)
cursor.colose()
conn.colose()
3 python网络爬虫
3.1网络爬虫技术
网络爬虫是一个程序或脚本,自动从网络中获取信息,是搜索引擎从万维网中下载网页的重要组成部分。从一个或多个初始网页url开始,获取初始网页url,并继续从访问页面中提取新的url,直到到达系统指定的停止条件。网络爬虫的工作过程,根据特定的算法,过滤与它们想要的对象无关的链接,并列在等待网络爬虫被捕获的url列表中。其次,根据确定的搜索规则,网络爬虫会选择下一个被选中的url,并重复这个过程,在达到指定的系统条件时停止。此外,网络爬虫可以分析和过滤按系统规则保存的页面,并创建索引供后续查询和搜索。
3.2常见开发网络爬虫的语言
PHP (Personal Home Page或者Hypertext Preprocessor,超文本预处理器),国内互联网始于20世纪90年代。今天,互联网已经融入了我们的生活,成为我们工作和学习的一部分。统计数据显示,自2003年以来,我国网页规模在成倍扩大,而且还在继续增长。PHP是当今最流行的web编程语言之一。PHP语言是当今最热门的网站程序开发语言之一,它的优点是低成本、快速、可移植性好、 丰富的函数库,因而越来越多的企业将PHP应用于网站开发。但是互联网不是一成不变的,PHP语言随着互联网技术的发展,也出现了很多问题。
Java是由Sun Microsystems于1995年5月发布的,Java包括面向对象编程语言和Java平台。Java是一种面向对象的编程语言,它不仅继承了c++的优点,而且拒绝了复杂的概念,如多重继承和指针。它是一种比c++更强大、更容易使用的语言。Java也是一种静态的面向对象编程语言,它更好地体现了面向对象理论,允许程序员以优雅的思维设计复杂的程序。
Java SE:Java SE(Java Platform,Standard Edition,Java平台标准版)原称为J2SE,是Java技术的重要核心和基础,提供Java EE开发基础,用于开发和部署集成Java应用程序到桌面、服务器、设备和实时环境。
Java EE:Java EE(Java Platform,Enterprise Edition,Java平台企业版)原称为J2EE,它能够利用Java2平台帮助企业简化开发、部署和管理相关的复杂问题的体系结构。Java EE加强了标准版中的很多优点,同时还提供了对 EJB以及XML技术的全面支持。Java EE的目的就是成为一个能够为大幅度降低时间成本的体系结构。
Java ME:Java ME(Java Platform,Micro Edition,Java平台微型版)原称为J2ME或K-JAVA,主要用于移动设备和嵌入式设备(比如手机、电视机顶盒和打印机)的开发。现在使用的比较少了,Android会逐渐的取代J2ME的市场份额。
C语言是1972年由贝尔电话实验室的丹尼斯˙里奇开发的,它主要用作系统编程语言。Ritchie的主要目标是生成一种易于编译的简约语言,允许有效访问内存,生成高效代码,并且是独立的(不依赖于其他程序)。对于高级语言,它旨在为程序员提供大量控制,同时仍然鼓励平台(硬件和操作系统)独立性(即不必为每个平台重写代码)。
C最终变得如此高效和灵活,以至于1973年,Ritchie和Ken Thompson使用C重写了大部分UNIX操作系统。许多以前的操作系统都是用汇编语言编写的。与仅生成只能在特定CPU上运行的程序的程序集不同,C具有出色的可移植性,允许在许多不同类型的计算机上轻松地重新编译UNIX并加速其采用。C和Unix的命运联系在一起,C的受欢迎程度部分与UNIX作为操作系统的成功有关。
1978年,Brian Kernighan和Dennis Ritchie出版了一本名为“The C Programming Language”的书。这本书提供了C语言的非正式规范,并且成为事实上的标准(程序员在需要最大可移植性时会坚持《The C Programming Language》中的建议就是这个原因)。
1983年,美国标准协会(ANSI)成立了一个委员会来制定正式的C标准。该委员会在1989年完成并发布了C89规范,通常称为ANSI C。ANSI C于1990年被国际标准化组织(ISO)采用为C90。ANSI委员会在1999年发布了C语言的新版本C99,C99采用的功能作为扩展进入编译器。
C ++(发音为plus plus plus)作为C的扩展,是Bjarne Stroustrup在贝尔实验室开发的。从1979年开始,C ++为C语言添加了许多新功能,但是让C ++为人称赞的主要原因是它是一种面向对象的语言。C ++于1998年由ISO委员会批准,并于2003年再次批准(称为C ++ 03)。自那时起,C ++语言(C ++ 11,C ++ 14和C ++ 17,在2011年,2014年和2017年得到批准)的三个主要更新已经完成,为该语言添加了额外的功能。特别是C ++ 11为该语言添加了大量新功能。
python是一种高级脚本语言,它结合了解释、编译、交互和面向对象编程;python是一种解释性语言,可以在开发过程中简化或消除编译。python类似于PHP、Perl、JavaScript和Matlab。使用口译语言的程序有一些共同的特点。这些对不同系统平台之间的速度和兼容性的要求很低;python是一种交互式语言,它直接在python提示符“>>>”之后执行代码。它可以在命令行中使用,也可以写入python shell。作为一种面向对象的语言,python支持面向对象的样式或编程技术来在对象中实现代码。
python的优点是拥有多种爬虫框架,下载网页将更加方便高效;多线程、进程模型更加成熟和稳定。爬虫的工作环境是一个多任务场景。在请求网页时有较长的延迟和较长的等待时间。多线程或进程能够优化程序运行效率,增强整个系统的下载和分析能力;由GAE创建的python爬虫程序几乎是免费的,有GAE的独家支持;缺点是python不能很好地处理不规范的HTML,适应能力比较差,举个例子,当一个页面里面同时有 GB18030 字符集的中文和 UTF-8字符集的中文是,python 处理起来效率就没有 PHP的效率高,这就需要进行人工处理,增加了工作量。
3.3编写python网络爬虫
代码如下:
import requests
from bs4 import BeautifulSoup
def get_urls():
urls = [ 'http://stjj.guizhou.gov.cn/tjsj_35719/sjcx_35720/index.html' ]
for i in range(1, 3):
url = 'http://stjj.guizhou.gov.cn/tjsj_35719/sjcx_35720/index_{}.html'.format(i)
# print(url)
urls.append(url)
# print(urls)
return urls
def get_month_url():
urls = get_urls()
hrefs = [ ]
for i in urls:
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
div = soup.find_all('div', class_="ul_ny_title1")
a = div[ 0 ].find_all('a')
for ll in a:
href = ll.attrs[ 'href' ]
# print(href)
hrefs.append(href)
# print(hrefs)
return hrefs
def get_data():
global title
hrefs = get_month_url()
for h in range(len(hrefs)):
url = hrefs[ h ]
re = requests.get(url)
# print(re.text)
soup = BeautifulSoup(re.text, 'html.parser')
div = soup.find_all('div', class_="view TRS_UEDITOR trs_paper_default")
# print(div)
a = div[ 0 ].find_all('a')
# print(a)
href = 'http://stjj.guizhou.gov.cn' + a[ 0 ].attrs[ 'href' ]
title = a[ 0 ].text.split(':')[ -1 ]
# print(href)
# print(title)
# 下载文件并保存
res = requests.get(href)
path = './guizhou/' + title
with open(path, 'wb') as fp:
fp.write(res.content)
fp.close()
print('爬取完成%s' % title)
get_data()
4爬取数据及数据处理
4.1数据采集技术
数据采集是大数据产业的基石。数据采集的重点不在于数据本身,而在于如何才能解决数据运营中的实际商业问题。通过对数据采集技术获取的高质量数据的分析和挖掘,得到的结果对决策行为具有较高的指导性作用。
数据采集又称数据获取,是通过程序或设备从系统外部收集数据,数据经过处理,最终输入到数据存储系统中。特点是自动化(以高自动化的方式采集并存入)、全面性(完全采集或增量采集,不进行数据采样)、多样性(不是单一的收集,而是多种收集方法)、丰富性(收集到的数据是丰富的,不仅仅是基础数据)。
数据的类型有结构化数据和半结构化数据以及非结构化数据。结构化数据:数据具有固定的格式或有限的长度。它们也称为行数据,比如元数据和数据库;半结构化数据:数据是非关系型的,具有基本的固定结构模式,如日志、XML、JSON;非结构化数据:未建模的不规则结构化或不完整的数据,如办公室文档、图像、图像、音频和视频。
数据采集的范围包括数据库数据、业务系统的日志、互联网应用数据、容器的日志、操作系统的日志、网络设备的日志。
数据采集的要求是全面:要求要有足够的数据量,并且具有分析价值,广泛的数据才能够支持分析需求;多维:多维度:收集的数据需要灵活和快速,同时自定义许多属性和不同类型的数据,从而才能满足不同的分析需求;高效:采集数据要有针对性的采集,避免采集无用数据,浪费资源;及时:对于实时监控性质的系统,要能够实时采集数据并上报。
网页爬取流程是采集、清洗、存储。采集:通过python编写代码,爬取网页;清洗:通过python编写代码,对原网页数据进行拆分,抽取想要的信息存储:通过python编写代码,将数据存入数据库或文件。
log数据采集流程,采集:通过采集工具filebeat等配置,完成采集;清洗:通过logstash等来接收原始的日志数据并拆分验证;存储:通过logstash将采集结果存入数据库或文件。
4.1.1 Urllib
urllib是一个用来处理网络请求的python内置标准库,它包含4个模块。第一个是urllib.request,HTTP请求模块,用于模拟浏览器发起网络请求;第二个是urllib.parse,解析模块,用于解析url;第三个是urllib.error,异常处理模块,用于处理request引起的异常;第四个是urllib.robotparser,用于解析robots.txt文件,应用较少。
4.1.2浏览器伪装
浏览器伪装技术的必要性:为了避免各种恶意爬虫,大多数网站通常都会设置一些防爬虫机制,使服务器能够自动识别爬虫并屏蔽它们。常用的防爬虫机制主要有以下几种:分析用户请求头信息,测试用户的行为,对同一IP在短时间内是否频繁访问网站等进行分析,通过动态页面随时间增加、环境变化和数据库操作增加爬虫抓取的难度,从而达到反爬虫的目的。
当前网站中应用比较多的反爬虫机制是前一种,大多数具有反爬虫机制的网站通过检测用户请求的Headers中的“user-agent”字段来识别用户。这种类型的反爬虫网站有时也会检测到“Referer”字段。此时,为了避免被反爬虫机制检测到,可以在爬虫中构建用户请求的Headers信息,使用Headers信息将爬虫伪装成浏览器。对于一些简单的爬虫伪装,只需在爬虫中设置“user-agent”字段信息。然而,当需要高度相似的蓝色标志伪装时,仅定义user-agent字段是不够的。在这种情况下,必须在爬虫中设置Headers常见字段。
对于使用第二种反爬虫机制的网站,我们可以通过使用代理服务器和频繁更换代理服务器来掩盖它们。
对于使用第三个反爬虫机制的网站,我们可以使用像selenium++ phan-tomjs这样的工具来伪装。
Header:在使用浏览器伪装技术之前,我们需要了解Header的基础知识和结构:当我们使用浏览器访问网站时,浏览器会发送一些Header头信息,服务器通过接收到的信息来了解当前浏览器的状态,并根据状态分析当前web浏览器请求是真正的用户或爬虫,从而决定是否应对以及做出什么样的应对。Header常见字段:
Accept:表示浏览器能够支持的内容类型有哪些,如下图,表示支持 HTML文档 、XHTML文档 、XML文档 、Image图片。
Accept-Encoding:表示浏览器支持的压缩编码有哪些,如下图,表示支持 gzip和 deflate两种压缩编码。
Accept-Language:表示浏览器支持的语言类型,zh-CN 表示简体中文(其中zh表示中文,CN表示简体),en-US表示美国英语,en则表示通用英语。
User-Agent:表示用户代理,服务器之所以能够识别客户端的浏览器类型、浏览器版本号、操作系统及版本号,网页排版引擎等,就是通过User-Agent识别出来的。
Connection:它表示客户端与服务端的连接是什么类型的,一般存在keep-alive 和 close这两种连接类型,其中keep-alive表示持久性连接,close表示单方面关闭连接,让连接断开。
Host:用户请求的服务器的url是什么。
Referer:指示链接从其中跳转的页面,比如我们通过百度首页访问其他的百度子页面,那么我们就是从百度首页跳转到其他百度子页面的。
4.1.3用户代理池
使用用户代理池的必要性:如果我们用浏览器伪装,仅用一个浏览器标识,如果对方服务器的反爬手段高,我们这一个一直访问很容易被抓到,这时候我们可以建一个用户代理池,随机进行访问,增加我们的成功率。
用户代理的概念:中文名用户代理,英文名User Agent简称UA。服务器通过UA(特殊字符串头)识别操作系统和操作系统版本、计算机处理器类型、浏览器和浏览器版本、浏览器渲染引擎、浏览器语言、浏览器插件。
4.2爬取数据
爬取过程:爬虫根据人工给出的贵州省统计局-统计数据-数据查询首页链接自动生成第二页与第三页的链接并自动以列表形式保存。保存后爬虫自动解析html网页,从中提取出属性为“class=ul_ny_title1”的div标签,在div标签下找到a标签及其属性href,从href找到每个月统计数据的链接并保存在名为href的列表下。爬虫遍历每条月份统计数据链接,访问单条月份统计数据链接后对该网页进行解析,提取出所有属性为“class=’view TRS_UEDITOR trs_paper_default’”的div标签,找到div标签下的a标签,在a标签下找到属性href,从中提取出月份统计数据excel文件下载链接并保存,最后访问所有下载链接下载文件并将文件以二进制形式保存在python文件下名为guizhou的文件夹下,关闭文件并结束爬取。
4.3数据提取技术
4.3.1数据提取
数据提取的概念:简单的来说,数据提取就是从响应中获取我们想要的数据的过程。
数据分为结构化数据和非结构化数据,结构化数据(json,xml等)的处理方式是jsonpath,xpath,转换python类型处理,bs4直接转化为python类型;非结构化数据(HTML)的处理方式是正则表达式,xpath,bs4。
快速辨别数据类型:数据类型判别,看第一条发出的请求的响应,这条由我们向浏览器发出的请求是最干净的,其他的数据请求都是由浏览器帮我们发出的。
结构化数据类型的提取:JSON文件需要JSON路径或转换到python (JSON类)。XML文件需要转换为python (XMLTodict)或XPath、CSS选择器或正则表达式。
非结构化数据提取:文本、电话号码、邮箱地址等需要使用正则表达式处理,HTML文件则可使用正则表达式和XPath以及CSS选择器处理。
4.3.2 Xpath提取
xpath:XPath (XML Path Language) 是一门在 HTML\XML 文档中查找信息的语言,可用来在 HTML\XML 文档中对元素和属性进行遍历。
xpath中的节点关系(以树为例),父节点:每个元素以及属性都有一个父,即树的主干;子节点:元素节点可有零个、一个或多个子,即主干上的所有枝干;同胞节点:拥有相同的父的节点,即同一主干上的两个或多个枝干;先辈节点:某节点的父、父的父,等等,即最小枝干往上的主干;后辈节点:某个节点的子,子的子,等等,即主干上往下延申的枝干。
xpath的用法,选择节点:在XML文档中选择节点或节点集时,XPath使用路径表达式。路径表达式与传统计算机文件系统中的路径表达式非常相似。语法:在python中用xpath时,需要用到lxml模块,这是python的第三方模块,可以通过命令 pip insall lxml下载该模块或者也可以在pycharm中的setting的project Interpreter里面进行下载。
4.4数据处理
数据处理方法是对收集的数据进行处理和分类,使数据成为适合进行数据分析的样式。数据处理是分析数据之前的一个必要阶段。数据处理的基本目的是从大量复杂数据中提取和收集有价值和有意义的数据。
数据清洗是整个数据分析过程的第一步,也是整个数据分析项目中最耗费时间的一步。数据清洗的过程决定了数据分析的准确性。随着大数据的越来越普及,数据清洗是必备的技能之一。
数据规范化是数据挖掘的基本操作。在现实中,数据可能在维数上有不同的特征,导致维数不一致,有差异的数据可能有很多数值,错误的数据归一化处理很可能影响数据分析的结果,因此,为了使数据在特定的区域上,需要将数据按一定比例进行放大,便于综合分析。基于距离的挖掘方法是建模前对数据进行规范化的重要方法,如SVM、KNN、K-means、聚类等方法。
5数据可视化分析
5.1数据可视化技术
关于数据可视化表示的科学技术研究统称为数据可视化技术,该数据的可视化表示定义为,一种以摘要形式提取的信息,包括相应信息单元的各种属性和变量,主要是指在技术上比较先进的技术方法,这些技术方法可以使用图形和图像处理以及计算机视觉与用户界面,通过表达、建模以及对立体、表面、属性和动画的显示,进行数据可视化解读。与立体建模等技术相比,数据可视化涵盖了更广泛的技术方法。
数据可视化,就是用图形化的手段,在对数据进行处理的时候找到数据中潜在的模式。以数据的流向为主干线,其主要模块包括数据收集、数据处理和转换、视觉映射和用户感知。数据可视化的过程包括数据采集和数据处理,然后进行任务分析,进而进行数据可视化,最后是可视化分析。常用的可视化方法如下:
(1)面积或尺寸可视化:使用图形的长度、高度或面积来区分同一类型的图形,从而达到清晰显示不同指标对应的指标值之间的比较。这种方法允许访问者在浏览时快速理解数据——数据之间的比较。这种数据可视化的生产使用数学公式计算来表达精确的尺度和比例。
(2)颜色可视化:数据可视化设计中常用的方法之一是用不同的颜色和颜色深浅来表示指标值的强弱和大小,查看者可以清楚地看到数据值作为一个整体的更突出的部分。
(3)图形可视化:在设计指标和数据时,应该用更符合实际含义的图形来组合呈现,使图形更生动,使浏览者更容易理解图形的主题。
(4)区域空间可视化:当所需要可视化的指标数据地域有关联的时侯,可以选择用地图作为背景,便于浏览者直观了解地域整体情况,还可以根据地图了解某一地区的详细数据。
(5)概念可视化:为了便于浏览者理解图形所表达的意义,通常情况下需要把抽象的指标数据转换成容易干知道数据。
5.2可视化结果分析
5.2.1公路货客运输
如图5-1所示,贵州省2019年12月公路旅客运输量同比增长0.1%,2020年1月,贵州省公路旅客运输量同比增长率转为负值,相比2019年下降了19.54%,新冠疫情是在2019年12月份在武汉爆发的,在各种紧急措施控制下经过很长一段时间才扩散到贵州省,贵州省内一月份对公共交通采取管控措施的时间并不长,然而公路旅客运输量还是减少了1312万人。2020年2月,贵州省公路旅客运输总量同比骤然下降了97.61%,2019年2月的贵州省公路旅客运输总量是7545万人,而2020年2月的贵州省公路旅客运输总量则是180.74万人,整整下降了7364.26万人,这个数字触目惊心,由此可以看出新冠疫情对贵州省公路客运交通流量的影响之大。
表5-1 贵州省公路旅客运输数据
| 月份/月 | 2019年旅客运输量/万人 | 2020年旅客运输量/万人 | 2021年旅客运输量/万人 | 2022年旅客运输量/万人 |
| 1 | 6712.00 | 5400.00 | 1574.00 | 1447.40 |
| 2 | 7545.00 | 180.74 | 1631.00 | 1495.76 |
| 3 | 7164.00 | 720.03 | 1695.00 | |
| 4 | 6534.00 | 1216.19 | 1758.33 | |
| 5 | 6626.00 | 2064.00 | 1749.53 | |
| 6 | 6500.00 | 2605.00 | 1677.00 | |
| 7 | 7451.00 | 3156.00 | 1699.00 | |
| 8 | 7225.00 | 3370.00 | 1522.00 | |
| 9 | 7050.00 | 3620.50 | 1505.00 | |
| 10 | 7349.00 | 3832.45 | 1499.67 | |
| 11 | 6785.00 | 3577.15 | 1361.41 | |
| 12 | 7314.00 | 3841.45 | 1373.68 |
|
|
图 5-1 2019年1月至2022年2月贵州省公路旅客运输量柱状图
2020年贵州省公路旅客运输量在一月降到最低谷,也是全省乃至全国疫情形式最严峻的时期,从二月开始缓慢增长,然而同比2019年,2020年几乎每个月都只有2019年同期的一半。2021年1月,公路旅客运输量同比增长为正值,与之相比的是2020年1月,疫情最严重的时期,所以数据没有参考价值,与2020年12月相比较,下降了59.02%,原因是在疫情影响下春运时间提前,外省留驻贵州省人员与贵州省外流人员经过2020年的疫情管控,留在当地过节的意愿有所加强,加之2021年1月内有外省确诊人员进入贵州省促使贵州省加强管控措施,导致流动人员数量大幅度下降。
如图5-2所示,随着新冠疫情得到控制形势逐渐缓和,贵州省2020年公路旅客运输总量得到缓慢增长,然而情况仍不乐观,同比2019年公路旅客运输总量仍处于负增长,贵州省2021公路年旅客运输总量2月份同比增长802.40%,3月份同比增长135.41%,4月份同比增长44.58%,这是自新冠疫情蔓延以来贵州省公路旅客运输总量同比首次正增长,虽然这得益于2020年新冠疫情的严峻形势和2021年春运返工,却也不能掩盖贵州省整体疫情向好的大背景。贵州省2021年公路旅客运输总量同比2020年再次有所下降,原因一方面是贵州省内疫情反复,严重影响省内公路旅客运输流量,第二方面是在新冠疫情的大背景下大量外出人员选择就地防疫过节,第三方面是外省各城市的防疫管控措施截留了很大一部分贵州省在外人员。
2022年1月分和2月份,贵州省公路旅客运输总量同比反弹上升,得益于新冠疫情在省内得到严格控制和春运返工,这无不说明自新冠疫情蔓延以来,贵州省公路旅客运输在省内得到严格控制和春运返工,这无不说明自新冠疫情蔓延以来,贵州省公路旅客运输量的变化与新冠疫情的传播扩散息息相关。自新冠疫情以来,贵州省公路旅客运输量在经过很长一段低估后有缓慢回升,虽然偶有反复,但总体呈现向上爬升的趋势,随着新冠疫情慢慢过去,贵州省公路旅客运输量将会慢慢升到运输高峰。
|
|
图 5-2 2019年1月至2022年2月贵州省公路旅客运输量折线图
如图5-3所示,公路货物运输量由2019年12月的9188万吨下降至2020年2月的2606.62万吨,减少了71.63%,2020年3月又迅速爬升至7153.25万吨,2020年3月至2021年1月这个时间段内公路货物运输量保持在7000万吨左右,2021年2月骤降至3625万吨,次月又回升,整体来看,贵州省公路货物运输量受新冠疫情的影响比较小。
表5-2 贵州省公路货物运输数据
| 月份/月 | 2019年公路货物运输量(万吨) | 2020年公路货物运输量(万吨) | 2021年公路货物运输量(万吨) | 2022年公路货物运输量(万吨) |
| 1 | 7310.40 | 7097.00 | 7223.67 | |
| 2 | 4594.37 | 2606.62 | 3625.00 | 4324.55 |
| 3 | 8797.31 | 7153.25 | 8574.89 | |
| 4 | 9667.18 | 8027.17 | 9481.58 | |
| 5 | 9188.00 | 7673.08 | 7852.75 | |
| 6 | 9188.00 | 6817.36 | 7552.19 | |
| 7 | 8283.59 | 6664.96 | 7282.42 | |
| 8 | 8694.94 | 7125.43 | 7282.42 | |
| 9 | 8197.30 | 6685.72 | 7603.00 | |
| 10 | 8484.69 | 6886.29 | 7139.41 | |
| 11 | 8709.35 | 7171.28 | 7496.96 | |
| 12 | 8965.99 | 7307.22 | 7723.77 |
|
|
图 5-3 2019年1月至2022年2月贵州省公路货物运输量柱状图
由图5-4可以看出,从2019年1月至2022年2月的公路货物运输量中,2019年最高,2020年最低,2019年至2022年的二月份公路货物运输量都出现下降的情况,有所区别的是下降幅度的大小,这里可以看出导致二月份公路货物运输量下降的的原因不仅仅是新冠疫情的爆发,还有其他原因。2020年是疫情形势最严峻的一年,也是对公路货物运输量影响最严重的一年,2020年公路货物运输量最高的一个月仅有8027.17万吨,相比较其他年份公路货物运输量最高月少了一千多万吨。
|
|
图 5-4 2019年1月至2022年2月贵州省公路货物运输量折线图
5.2.2铁路货客运输与高铁旅客运输
如图5-5从个别月份来看,2020年2月由2019年12月的473.13万人下降到86.84万人,减少了81.64%,2020年3月又回升到253.59万人,同比2019年3月下降了302.12万人,减少了54.36%,这是疫情爆发之初的三个月,全国各大城市严格的管控措施下流动人口数量直线下降,铁路运输量的重要组成部分春运和返工运输量大幅度降低,最终导致2020年2月和3月铁路旅客运输量下跌。
表5-3 贵州省铁路旅客运输数据
| 月份/月 | 2019年铁路旅客运输量(万人) | 2020年铁路旅客运输量(万人) | 2021年铁路旅客运输量(万人) | 2022年铁路旅客运输量(万人) |
| 1 | 501.67 | 436.19 | 449.32 | |
| 2 | 602.19 | 86.84 | 420.46 | 619.50 |
| 3 | 555.71 | 253.59 | 658.83 | |
| 4 | 556.34 | 299.73 | 604.64 | |
| 5 | 559.16 | 422.32 | 644.02 | |
| 6 | 547.54 | 411.02 | 553.57 | |
| 7 | 703.25 | 545.60 | 767.88 | |
| 8 | 738.72 | 672.54 | 516.59 | |
| 9 | 551.71 | 550.00 | 547.95 | |
| 10 | 567.36 | 581.74 | 542.43 | |
| 11 | 470.98 | 460.30 | 351.71 | |
| 12 | 473.13 | 440.40 | 436.84 |
![]() |
图5-5 2019年1月至2022年2月贵州省铁路旅客运输量柱状图
如图5-6所示,自疫情爆发后,2020年2月至8月贵州省铁路旅客运输量同比负增长,但整体呈向上趋势,从2020年8月份开始,2019年和2021年铁路旅客运量出现多次交叉,属于正常状态,贵州铁路旅客运输逐渐走向正轨,从2022年1月和2月来看,贵州省铁路旅客运输已经回归正常。
![]() |
图5-6 2019年1月至2022年2月贵州省铁路旅客运输量折线图
如图5-7所示,疫情爆发后,2020年2月铁路货物运输量同比2019年仅下降7.07万吨,几乎可以忽略不计,对比2019年12月份,下降了143.09万吨,2020年3月迅速提升,2020年3月份至12月份整体提呈上升态势,而2021年1月至2022年2月,同比2020年1月至9月成倍增长,疫情的扩散仅初期对铁路货物运输有影响,后期反而促进了铁路货物运输量的增加。
如图5-8所示,2021年1月至2022年2月铁路货物运输量同比2019年和2020年居高不下,造成这种结果的原因是,整个铁路货物运输过程中仅在装卸过程存在传播扩散新冠疫情的可能,所以铁路货物运输仅在疫情初期因货物来源管控和货物消毒等原因受到影响,铁路货物运输后期的迅速发展,是由于2020年疫情形势严峻,降低了铁路货物运输发展速度,2021年后迅速发展并居高不下是因为2020年各种交通运输管控措施限制了物流量,而各地对人员的管控使得人们对物流需求大大增加,各种原因相加推动了铁路货物运输的高速发展。
表5-4 贵州省铁路货物运输数据
| 月份/月 | 2019年铁路货物运输量(万吨) | 2020年铁路货物运输量(万吨) | 2021年铁路货物运输量(万吨) | 2022年铁路货物运输量(万吨) |
| 1 | 330.66 | 574.12 | 523.48 | |
| 2 | 222.21 | 215.14 | 427.98 | 420.70 |
| 3 | 278.51 | 323.30 | 560.49 | |
| 4 | 308.83 | 274.38 | 611.73 | |
| 5 | 355.92 | 324.50 | 651.45 | |
| 6 | 349.42 | 316.85 | 598.73 | |
| 7 | 324.13 | 311.81 | 606.28 | |
| 8 | 327.44 | 353.21 | 637.09 | |
| 9 | 333.67 | 343.39 | 682.76 | |
| 10 | 337.60 | 419.48 | 683.09 | |
| 11 | 378.25 | 426.23 | 637.24 | |
| 12 | 358.23 | 427.45 | 604.64 |
|
|
图5-7 2019年1月至2022年2月贵州省铁路货物运输量柱状图
![]() |
图5-8 2019年1月至2022年2月贵州省铁路货物运输量折线图
如图5-9所示,高铁旅客运输量在疫情爆发初期的三个月下降幅度大 ,从2020年4月开始回升明显,并且一直到8月都呈现上升态势,在8月份达到顶峰,超过2019年高铁旅客运输最高月,从2020年8月至2022年2月,整体处于上升状态,高铁旅客运输高峰期在每年7月和8月。
如图5-10所示,自2020年8月后,高铁旅客运输量整体明显增长,这也是受到新冠疫情的影响,新冠疫情爆发以来,人们防疫意识不断提高,加之火车人员密集度大,人员来源更复杂,新冠病毒传播扩散可能性更大,而高铁相对而言安全性更高,人们更愿意选择乘坐高铁。
表5-5 贵州省高铁旅客运输数据
| 月份/月 | 2019年高铁旅客运输量(万人) | 2020年高铁旅客运输量(万人) | 2021年高铁旅客运输量(万人) | 2022年高铁旅客运输量(万人) |
| 1 | 288.86 | 333.61 | 361.75 | |
| 2 | 333.49 | 57.49 | 328.36 | 485.71 |
| 3 | 341.99 | 160.73 | 505.02 | |
| 4 | 348.88 | 199.99 | 470.77 | |
| 5 | 359.15 | 291.66 | 507.70 | |
| 6 | 345.98 | 304.85 | 436.67 | |
| 7 | 441.32 | 429.24 | 603.12 | |
| 8 | 457.88 | 536.06 | 405.09 | |
| 9 | 350.60 | 439.98 | 439.72 | |
| 10 | 358.79 | 453.93 | 428.46 | |
| 11 | 312.24 | 366.78 | 285.39 | |
| 12 | 321.79 | 354.03 | 366.63 |
|
|
图5-9 2019年1月至2022年2月贵州省高铁旅客运输量柱状图
![]() |
图5-10 2019年1月至2022年2月贵州省高铁旅客运输量折线图
5.2.3货客运输总量
如图5-11,从图中可以看出,贵州省旅客运输主要依赖于公路,其次是铁路,高铁排在末尾;从公路运输量的占比上来看,远远超过了铁路和高铁运输。由此可以得出公路运输在贵州省旅客运输中的重要地位,因此,在新冠疫情形式缓和后,恢复的趋势也是最明显的。
![]() |
图5-11 2019年至2021年铁路、公路、高铁旅客运输总量
如图5-12,由图中可以看出,贵州省货物运输主要依赖公路,和旅客运输一样,这是由贵州省地形地貌决定的,贵州省人口众多,然而由于地势起伏,人口分布比较分散,难
图5-12 2019年至2021年铁路、公路、高铁货物运输总量
以集中,铁路修建成本高,不能照顾到所有人口小聚集区,只能以公路连通,从而减少了铁路货物运输份额,增加了公路货物运输份额。因公路运输具有复杂性,其特性能加强新冠疫情扩散,所以2020年公路货物运输量大幅度下降,而公路运输在贵州省的重要性决定了其在疫情缓和后必然上升的趋势了。
![]() |
5.2.4 可视化大屏
![]() |
图5-13 可视化大屏展示
如图5-13,将所有可视化图表合成大屏,显示在一个页面上,使得浏览者对所有图表一目了然,更能清楚的了解每一个数据,鼠标触碰相关图表某一区域时能够显示出该区域代表的数据及其属性,提高了工作效率。
6总结与展望
6.1总结
爬虫是搜索引擎的重要组成部分,更是学习研究过程中获取数据必不可少的工具,网络爬虫技术经过不断的发展,现如今已经非常的成熟,爬虫运用领域广泛,比如社交应用、行业数据、新闻聚合、舆情监控等等都离不开网络爬虫技术。
经过本次论文探讨,发现贵州省铁路高铁以及公路三种客货运输方式中,受新冠疫情影响最严重的是公路客货运输,而旅客运输和货物运输受新冠疫情影响最严重的是旅客运输。公路货客运输收到的影响都是消极的,铁路货物运输长期看受到的影响是比较积极的,铁路旅客运输收到的影响则是消极的,高铁旅客运输受到的影响则消极与积极兼具。在贵州省内,货客交通运输很大一部分需要依靠公路,而公路运输具有流量大,速度快,来源复杂等特点,而这些特点也正是新冠病毒传播扩散必要条件,为有效阻止新冠病毒传播,就必须针对公路等人员密集、人员流量大、人员流通速度快、流通人员来源复杂的交通方式采取管控措施,这就严重影响了公路货客运输的运输量。铁路旅客运输则是在密闭环境下进行,人员密集,空气无法有效流通,新冠病毒容易通过空气、唾沫等媒介传播扩散,是受到严格管控的运输方式之一;铁路货物运输具有不能主动传播扩散新冠病毒、接触新冠病毒途径少、来源简单等特点,在铁路货物运输方面的管控方式简单容易,所以铁路旅客运输受新冠疫情影响比较严重,而铁路货物运输受到的影响则微乎其微。高铁因其价格等各方面原因导致乘坐人员比较少,容易控制新冠病毒的传播扩散,所以尽在疫情形势比较严峻的时间段内收到影响,在疫情缓和,人们防疫意识提高后,高铁旅客运输量反而得到提高。
6.2展望
本文虽然顺利完成了爬虫设计,但仍然存在很多缺陷,在后续的学习生活中需要不断努力学习。网络爬虫技术仍在快速发展,反爬虫技术也在快速发展,在今后的爬虫设计中需要不断创新以应对新的反爬虫机制。就目前而言,新冠疫情的寒冬已然过去,疫情对贵州省的旅客运输量影响越来越小,甚至影响将逐渐消弭,但新冠疫情给我们的教训深深刻在了社会的方方面面,吃一堑长一智,我们需要做好各种措施,防患于未然!
更多推荐













所有评论(0)