【.com原创文章】祖国70周年华诞一天天临近,各行各业都在为祖国庆生。作为一个IT人,我也想贡献一点力量。图片来自Pexels。据文化和旅游部预计,2019年国庆旅游人数有望达到近8亿人次。#庆假恋或有近8亿人去旅游#这个话题也冲上了微博热搜榜。仿佛看到了假日景区人山人海的画面!想来想去,最后还是定在了国庆假期。能不能用爬虫看看国庆长假哪些城市最堵?哪些景点最受欢迎?今天就来看看,如何利用网络爬虫生成国庆旅游热点地图。需要构思并制作旅游热点地图。我们要实现的效果是在一张中国地图上标出旅游热点。通过这张图,大家可以知道十一期间哪些城市或者哪些地区是旅游热点。也就是国庆去哪些地方玩的人比较多。概念图首先,我们需要找到一个可以获取全国旅游信息的数据源。这里的一个想法是机票预订信息。哪些景点的预订量多,那么这些景点所在的城市就会比较受欢迎。类似的票务网站还有很多,比如:携程、去哪儿、途牛等。然后,我们需要对网站的票务数据进行分析,爬取我们感兴趣的旅游热点信息。分析信息重点在于对网页HTML信息的解析。之后,将分析后的信息以一定的格式保存在本地。由于下载的信息可能与最终显示的信息存在偏差,因此需要进行一些数据清洗和数据聚合操作。最后将排序后的信息输入到地图中进行展示,这也是最后的展示环节。在这里可以选择对外显示的方式,如:点图、线图或热图。网站分析全球预览翻遍了旅游网站,发现在“去哪儿”的门票页面上,有一个旅游景点热门度的展示信息。网页会根据不同类型的景点(自然风光、人文古迹等)进行查询,查询结果会显示景点名称、景点热度和所在城市信息。如果我们把这些景点对应的区域的热度汇总起来,就可以知道哪些区域对应了这些景点的热度。首先,打开去哪儿旅游,搜索“热门景点”。下面列出了每个地方的热门旅游景点。按景区主题分类。显示的列表中有景区名称、景区级别、所在省市、知名度等信息。其中,省市和热点是我们关心的数据。URLAnalysisURLAnalysisGraph打开Chrome的开发者工具来查看HTML页面的结构。URL的规律很好理解:关键字就是“热点”,它是一个常量,每次请求时填这个就可以了。subject是景点的分类,比如:自然风光,游乐场,文化古迹等,这个需要一个一个的列出来,存储在一个变量后面的数组中。页是页数。如果我们要爬取所有的信息,我们需要一页一页地向下滚动,所以这个数字会不断增长。当页面滑到底部时,你会看到下一步按钮,通过它你可以遍历所有页面。URL全景页面元素分析通过Chrome开发者工具中的元素选择器,可以清楚的看到元素的HTML标签。列表元素图由于景点信息是放在列表中的,所以找到列表所在的元素,放在id为“search-list”的div中。也就是说,请求完URL,拿到HTML后,我需要找到“search-list”这个div,得到对应的item信息。获取到列表元素后,我们来看如何获取每条行程记录中的值。它的内容放在“sight_item”div中。榜单中每一项的示意图接下来会分析景区名称、景区级别、所在省市、知名度、地址。并记录下它们的元素的值,可以在后面解析HTML的时候用到。该元素的HTML标签类似于上面的两个元素。以上元素的ID或者Class可以先记录下来,后面解析HTML的时候会用到。爬虫已经可以构思和分析了,我们需要编写代码来实现这个想法。不过,在此之前我们需要准备好开发环境和需要的工具。因为涉及到网络爬虫和图文展示。所以这里我们打算使用Python作为开发语言,IDE环境使用PyCharm,图表展示使用Pyecharts。普及一下Pyecharts,Echarts是百度开源的一款数据可视化。凭借良好的交互性和精美的图表设计,得到了众多开发者的认可。另一方面,Python是一种非常适合数据操作的表达语言。当数据分析遇上数据可视化,Pyecharts诞生了。因此,Pyecharts可以理解为一个用Python实现的Echarts程序,可以在Python上运行,提供良好的地理信息展示。Pyechartsicon另外,Pyecharts的地理展示功能比较强大,这也是我们需要用到的。Pyecharts显示中国地图用于HTML解析我们使用BeautifulSoup。它是一个可以从HTML或XML文件中提取数据的Python库,它可以通过您喜欢的转换器实现导航、查找和修改文档的惯用方式。BeautifulSoup官网图片爬虫编码一切只因东风,开始写代码吧,国庆搬砖开心。这里我们把程序分成两部分来写,一部分是爬取旅游热点信息,一部分是展示旅游热点地图。爬取旅游热点信息程序流程图先说一下获取旅游热点信息的思路,大致分为四步:开始准备必要的文件,导入组件包。组合可变URL并发出网络请求,如果请求不成功则重试。下载HTML后解析,找到旅游热点列表,列出项目,分析具体的旅游信息。将分析后的信息保存到csv文件中。因为我们需要请求网络、解析HTML、保存文件,所以需要引入一些Python包:网络请求HTML解析读写csv请求头中假装浏览器错误重试,等待时间接下来创建请求header,在请求头中包含请求的浏览器、语言、请求格式等信息。这里我们使用fake_useragent中UserAgent的random方法来随机生成浏览器信息。这样在模拟浏览器访问网站时,每次请求都会随机模拟一个浏览器。例如:IE、Firefox、Chrome等。让网站以为不同的人使用不同的浏览器访问网站。接下来生成一个csv文件并保存为utf-8格式。该文件用于存储爬虫信息。在文件头中,我们定义了与景点相关的字段,例如“区域”和“名称”。这些列是在生成文件时准备的,填写数据后可以方便地查看。定义一个下载景点内容的函数,该函数接受URL作为参数,然后通过requests对象下载景点内容。下载失败,因为下载信息可能遇到网络问题。因此,我们需要定义一个下载失败函数,在下载不成功时重试下载。还记得我们之前分析的URL吗?景点类型和分页是变量,这里我们定义一个函数生成一个URL来处理这些变量。我们会列出需要搜索的景点类型。关键字字段已转换为ACSII代码。如果需要直接输入汉字,可以使用fromurllib.parseimportquote来实现。另外,我们在开始搜索的页面上使用page=1,然后会解析页面中的“下一页”按钮,完成翻页功能。好了,至此我们定义了文件、下载函数、重试下载函数、分类收集函数。现在我们需要定义最重要的HTML解析函数。它的输入参数是景点类型和URL地址。按顺序执行以下操作:下载HTML并将其转换为SOUP对象。查找旅游景点列表。查找ID为“search-list”的div元素。使用soup的find方法找到它。遍历景点项目。在'search-list'元素下,通过findAll方法找到class为'sight_item'的item,并遍历。分析具体的景点信息:名称、地区、省份、城市、知名度、地址等。找到翻页按钮,继续下载后面的页面,再次分析。使用find方法查找类为“next”的标签。最后执行main函数运行整个Python程序:下载的csv地图csv看起来比较乱,通过xls打开文件,格式化后查看热点信息:旅游热点地图排序后旅游热点地图显示旅游热点信息已经捕获,现在开始分析。这里建议把爬取和分析工作分成两部分。因为,在爬取过程中,会遇到网络问题、解析问题或反爬虫问题,需要一段时间才能爬取到数据。为了保证其独立性,信息采集可以独立运行。完成后,将获取的文件作为输入运行显示程序。显示程序主要完成,数据清洗、求和和地图显示。这样就把前面的爬虫和后面的分析展示融为一体了。旅游热点分析流程图首先,我们还需要引入几个Python包,如下。其中Geoopts和ChartType是用来显示地图的。其次,我们需要加载csv文件。虽然我们下载了很多资料,但对我们来说最重要的还是省市和热点信息。因为我们最后展示的是哪个城市是旅游热点。城市热度信息图根据观察,要计算一个城市的热度,必须对城市信息进行分组,然后求和。这也是需要考虑的。根据城市信息的热度总和,过滤掉地图中一些无法识别的地方和一些没有热度值的脏数据,将生成的城市和热度列表传递给显示函数。最后显示函数接收列表参数,绘制热力图:分析结果,首先看哪些地区是热门旅游目的地,如下图:2019年国庆旅游热力图,从图中可以看出看到北京、沿海地区(福建、福建等)广州、江浙地区、甘肃地区是国庆期间的热门景点。中部地区的武汉也因为即将举行的军运会而成为热门的旅游城市。再来看看2019年国庆旅游热点地图,Top20旅游热点城市,如下图:TOP205A旅游景点:总结爬虫思维导图需要根据国庆前达成的目标进行构思网络爬虫,包括:选择网站、分析网站、数据抓取、数据展示。在分析网站时,需要注意以下几点,包括全局分析、URL分析和元素分析。在编写爬虫程序之前,您需要准备工具、IDE和Python库。爬虫代码分为爬取旅游热点信息和旅游热点地图展示。作者:崔浩简介:十六年开发架构经验。曾在惠普武汉交付中心担任技术专家、需求分析师、项目经理,后在一家初创公司担任技术/产品经理。善于学习,乐于分享。目前专注于技术架构和研发管理。【原创稿件,合作网站转载请注明原作者和出处为.com】
