文中的文本及图片来自互联网,仅作学习培训、沟通交流应用,不具备一切商业行为,著作权归著作人全部,如有什么问题请立即在线留言以作解决

下列文章内容来自Python技术性 ,创作者派森酱

序言

2020 终究是非凡的一年,一开年就被新冠肺炎疫情来啦当头一棒 ,一瞬间大家都不谋而合的采用宅家对策,在政府部门的有力领导干部下,所有老百姓左右一条心 ,来到四五月总算将肺炎疫情平稳控制住了,阔别大半年,中国肺炎疫情早就保持稳定 ,大家的日常生活也基础恢复过来。

正逢国庆中秋双节2个传统节日重叠,在家里憋这么多年的大家怎能不出去看一下中华民族的名山大川。据中国青年网信息,全部国庆假期出门去玩人数达 6.37 亿人 ,那麼那么多的人都到哪去玩儿了呢,今日大家就用 Python 做一个全国各地受欢迎旅游景区热点图 。

 

总体思路

大家的思路是,在我国地图上标注出热门景点 ,根据该热点图我们可以一眼看得出什么城市和地域最受欢迎 ,也就代表着哪个地域人是数最多的。

那麼大家就务必获得到全国各地的度假旅游数据,非常简单的思路就是以第三方旅行网站看下什么旅游景点的门票费卖的数最多最好是,而最常见的网址便是飞猪网、携程网 、去哪等。

拥有数据来源于以后就需要想办法将网址的数据根据网络爬虫的方法抓取出来 ,以后再对抓取到的数据做清理、过虑、梳理 。最终就将文件格式配对的数据立即在地图上展现出去就可以。

 

网址获得

历经比照好多个第三方旅行网站,发觉去哪儿网有一个「热门景点」的内容页,在主页文本框立即键入「热门景点」就可以直通该网页页面。该网址还将这种热门景点开展了归类 ,例如自然景观,城市面貌,古代建筑等 。另外大家必须的景点名称 ,城市,旅游景区等级及其旅游景区详细地址等信息内容都能够从该网页页面获得获得。

 

开启去哪儿网,主页键入「热门景点」认真观察网页页面最上边的 URL 你能发觉意外惊喜。在其中 subject 便是旅游景点主题 ,而 page 看来则是页数,点一下下一页认证一下,page 变为 2 了 ,没猜错 。

不用过多的数据 ,因而我们在每一个主题下边只留前十页的数据就可以了。

剖析完 URL 以后,再讨论一下数据从哪些地方获得的,转换到电脑浏览器开发者模式 ,访问 下大家发觉全部的旅游景点数据都会一个称为 ”search-list“ 的 div 中。对于单独旅游景点,其数据是在一个 class = ‘sight_item’ 的 div 中 。接下去便是分析网页页面原属,将旅游景点 ,省份,時间,关注度等数据做剖析 。

 

数据获得

数据根源早已剖析结束 ,接下去就可以刚开始大家的网络爬虫编号了,最先界定好大家的提前准备获得全国景点的主题。为了更好地便捷事后实际操作,我们可以将分析好的数据储存到 csv 文档中。

subjects = ['文化艺术名胜古迹', '自然美景', '农家院休闲度假', '儿童游乐场', '展厅', '古代建筑', '城市旅游观光'] excel_file = open('data.csv', 'w', encoding='utf-8', newline='') writer = csv.writer(excel_file) writer.writerow(['名字', '城市', '种类', '等级', '关注度', '详细地址'])

次之大家必须一个下载页面內容的涵数 ,该涵数接纳一个 URL 主要参数,以后回到该 URL 相匹配的网页页面,另外为了更好地更真正的仿真模拟电脑浏览器要求 ,必须加上 Headers 。

headers = {     'accept': 'text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',     'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',     'accept-encoding': 'gzip, deflate, br',     'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',     'referer': 'https://piao.qunar.com/',     'cookie': 'xxxyyyzzz...' } def get_page_html(url):     try:         response = requests.get(url, headers=headers)         if response.status_code == 200:             return response.text         return None     except RequestException:         return None

获得到內容以后 ,大家还必须一个解析函数,该涵数接受一个网页页面文字,随后将大家所必须的「名字, 城市, 种类, 等级, 关注度, 详细地址」信息内容分析出去 ,并载入 csv 文档。

def parse_content(content, subject):     if not content:         return;     soup = BeautifulSoup(content, "html.parser")     search_list = soup.find(id='search-list')     items = search_list.find_all('div', class_="sight_item")     for item in items:         name = item['data-sight-name']         districts = item['data-districts']         address = item['data-address']         level = item.find('span', class_='level')         level = level.text if level else ''         star = item.find('span', class_='product_star_level')         star = star.text if star else ''         writer.writerow([name, districts, subject, level, star, address])

到此大家早已准备好,免费下载涵数,解析函数 ,如今只必须立即解析xml主题,拼凑 URL 启用相关函数就可以。为了更好地避免 遭禁封 IP,每一次要求以后让程序流程中止 5 秒 。

def get_data():     for subject in subjects:         for page in range(10):             page = page   1             url = F'https://piao.qunar.com/ticket/list.htm?keyword=热门景点®ion=&from=mps_search_suggest&subject={subject}&page={page}&sku='             print(url)             content = get_page_html(url)             parse_content(content, subject, url)             time.sleep(5) if __name__ == '__main__':     get_data()

最终实行 main 通道涵数来运作程序流程 ,讨论一下大家收集到的数据。

 

結果展现

获得到全国各地的度假旅游数据以后,就可以刚开始剖析了。为了更好地让实际操作便捷,引进 pandas ,先细心看下大家的数据文件格式 。最先关注度一列里边带有汉语,必须切分,次之由于关注度标值是低不方便实际操作 ,因而我们决定将关注度扩张 1000 倍 ,由于是总体扩张了 1000 倍,因而并不会危害剖析結果。

以后大家必须分析出该旅游景点所属的城市。一样是分割字符串 。另外由于也有一些地址是地形图无法识别的,因此 要除去。

data = [] with open('data.csv', 'r') as f:     reader = csv.reader(f)     header = next(reader)     for row in reader:         data.append(row) df_data = [] for row in data:     city = row[1].split('·')[1]     if city in ['保亭', '德宏', '庆元', '陵水', '黔东南', '黔南']:         continue     star = row[4].split('关注度')[1].strip()     star = int(float(star) * 1000)     df_data.append([row[0], city, row[3], star]) df = pd.DataFrame(df_data, columns=['name', 'city', 'level', 'star'])

 

数据提前准备稳妥 ,绘图热点图。

data = df.groupby(by=['city'])['star'].sum() citys = list(data.index) city_stars = list(data) data = [list(z) for z in zip(citys, city_stars)] geo = (     Geo()     .add_schema(maptype="china")     .add(         "热点图",    #图题         data,         type_=ChartType.HEATMAP,   #地形图种类     )     .set_series_opts(label_opts=opts.LabelOpts(is_show=False))  #设定是不是显示信息标识     .set_global_opts(             visualmap_opts=opts.VisualMapOpts(max_ = 5000),    #设定legend显示信息的最高值             title_opts=opts.TitleOpts(title=""),   #左上方题目     ) ) geo.render_notebook()

 

从图中能够看得出,沿海地区,北京郊区及其云南省四川是较为受欢迎的地域 。

再讨论一下 TOP 15 的网络热点度假旅游城市:

 

再讨论一下 TOP 10 的网络热点旅游景点:

 

小结

今日大家对去哪的十一国庆热门景点开展了爬取和剖析 ,一整套步骤出来還是牵涉到许多物品 。包含网站数据分析,数据爬取和清理及其标志展现。尤其是网页元素剖析,必须多一点细心。

剖析結果也较为合乎预估 ,景色建筑专业地址较为多的人想要去,终究大城市的人每天待格子间,借着假期多去室外吸气吸气空气清新 ,次之北京市 、上海市、杭州市、成都市等大城市仍然很火爆 。

由于肺炎疫情,十一国庆能够说成 2020 的第一个度假旅游大假了,就国外仍在为肺炎疫情千辛万苦犯愁的時刻 ,大家的货物运输航运业早已修复的差不多了 ,另外为了更好地刺激消费,每个当地政府连续派发各种各样优惠劵,出门去玩的朋友们也算作奉命出行 ,为在我国经济发展奉献了自身的能量。

那麼这一十一国庆,你去哪里浪了呢?

文章来源于网络,如有侵权请联系站长QQ61910465删除
本文版权归趣快排www.sEoguruBlog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ✈61910465