当前位置: 首页 > news >正文

Python采集热门城市景点数据+简单制作数据可视化图

人生苦短,我用python

真的好想出去玩啊!!!

春游啊这是!!!

万物复苏的好季节!!!

python 安装包+资料:点击此处跳转文末名片获取

在这里插入图片描述

一、模块使用:

爬虫部分:

  • requests

  • parsel

  • csv

数据分析部分:

  • pandas

  • pyecharts

二、开发环境:

  • python 3.6

  • pycharm

在这里插入图片描述


三、流程思路:

1. 确定目标需求

python采集旅游景点数据 / 去哪儿~

2. 发送请求

3. 获取数据

4. 解析数据

5. 保存数据

在这里插入图片描述


四、代码展示

采集数据

导入模块

import requests
import parsel 
import csv 
import time 

写入表格

f = open('张家界景点.csv', mode='a', encoding='utf-8-sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['景区', '星级', '地区', '热度', '销量', '地址','价格', '简介', '详情页'])
csv_writer.writeheader() 

多页采集

for page in range(1, 12):print(f'===============================正在爬取第{page}页数据内容=======================================')time.sleep(2)

请求链接

    url = f'https://*****.com/ticket/list_%E5%BC%A0%E5%AE%B6%E7%95%8C.html?from=mps_search_suggest_h&keyword=%E5%BC%A0%E5%AE%B6%E7%95%8C&page={page}'

请求头:把python代码伪装成浏览器 给服务器发送请求

    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36'}response = requests.get(url=url, headers=headers)

获取网页文本数据 response.text

    # print(response.text)

解析数据

  • css选择器 根据标签提取数据内容

  • 第一次提取 所以景区标签内容 返回的页是一个对象 列表

  • id选择器 直接可以使用# 开头

    selector = parsel.Selector(response.text)lis = selector.css('#search-list .sight_item_detail')for li in lis:title = li.css('.name::text').get()level = li.css('.level::text').get() area = li.css('.area a::text').get() hot = li.css('.product_star_level em::attr(title)').get().replace('热度: ', '')hot = int(float(hot)*100)address = li.css('.address span::attr(title)').get() price = li.css('.sight_item_price em::text').get() hot_num = li.css('.hot_num::text').get() intro = li.css('.intro::text').get() href = li.css('.name::attr(href)').get()href = 'https://*****.com/' + hrefdit = {'景区': title,'星级': level,'地区': area,'热度': hot,'销量': hot_num,'地址': address,'价格': price,'简介': intro,'详情页': href,}csv_writer.writerow(dit)print(title, level, area, hot, address, price, hot_num, intro, href, sep=' | ')

旅游数据可视化

导入景点数据

import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置加载的字体名
plt.rcParams['axes.unicode_minus'] = False   # 解决保存图像是负号'-'显示为方块的问题 
import jieba
import re
from pyecharts.charts import *
from pyecharts import options as opts 
from pyecharts.globals import ThemeType  
import stylecloud
from IPython.display import Image df = pd.read_csv(r"c:\python\demo2\爬虫入门教程45 五一去哪儿玩?\去哪儿.csv")
df.head()

删除重复数据

df = df.drop_duplicates()

查看数据信息

df.info() 

景点价格价格Top20

df_qunarPrice = df.pivot_table(index='景区',values='价格')
df_qunarPrice.sort_values('价格',inplace=True,ascending=False)
df_data = df_qunarPrice[:20]
from pyecharts import options as opts
from pyecharts.charts import Barc = (Bar().add_xaxis(df_data.index.tolist()).add_yaxis("",df_data['价格'].values.tolist()).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="景点价格Top20"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=90)),))
c.render_notebook()

评分TOP20景点

df_score = df.pivot_table(index='景区',values='热度')
df_score.sort_values('热度',inplace=True,ascending=False)
df_data = df_score[:20]
from pyecharts import options as opts
from pyecharts.charts import Barc = (Bar().add_xaxis(df_data.index.tolist()).add_yaxis("",df_data['热度'].values.tolist()).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="评分TOP20景点"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=90)),))
c.render_notebook()
df_saleCount = df.pivot_table(index='景区',values='销量')
df_saleCount.sort_values('销量',inplace=True,ascending=False)
df_data = df_saleCount[:20]
df_data.values

月销量TOP20景点

df_saleCount = df.pivot_table(index='景区',values='销量')
df_saleCount.sort_values('销量',inplace=True,ascending=False)
df_data = df_saleCount[:20]from pyecharts import options as opts
from pyecharts.charts import Barc = (Bar().add_xaxis(df_data.index.tolist()).add_yaxis("",df_data['销量'].values.tolist()).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="月销量TOP20景点"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=90)),))
c.render_notebook()

景点等级分布

df_star = df["星级"].value_counts()
df_star = df_star.sort_values(ascending=False)
print(df_star)
c = (Pie(init_opts=opts.InitOpts(theme=ThemeType.WALDEN)).add("",[list(z) for z in zip(df_star.index.to_list(),df_star.to_list())]).set_global_opts(legend_opts = opts.LegendOpts(is_show = False),title_opts=opts.TitleOpts(title="景点等级分布",subtitle="数据来源:去哪儿网",pos_top="0.5%",pos_left = 'left')).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%",font_size=16)))
c.render_notebook()
df[df["星级"]!='无'].sort_values("星级",ascending=False)

还是要多出去走一走散散心的鸭~

要趁大好春光,去康康这个世界❤


👇问题解答 · 源码获取 · 技术交流 · 抱团学习请联系👇

http://www.lryc.cn/news/43565.html

相关文章:

  • VUE-cli搭建项目
  • Feign返回值统一处理
  • 探究如何在Linux系统中修改进程资源限制:四种方法调整进程限制,让你的系统高效运行(包含应用层getrlimit和setrlimit API)
  • 9.5. 机器翻译与数据集
  • 跟着凯新生物2 Arm PEG Biotin,2-Branched PEG Biotin,生物素-聚乙二醇-二臂/支,学试剂知识
  • react组件进阶(四)
  • 阿维塔城区NCA智驾导航辅助,复杂路口,全面胜任
  • [Pandas] div()函数
  • c++并发与多线程
  • Vinylsulfone PEG Biotin,Biotin-PEG-VS,生物素聚乙二醇乙烯砜,VS基团容易与游离巯基发生反应
  • 论文学习——Tune-A-Video
  • C++类与对象part1
  • 记一次抓取网页内容
  • parasoft帮助史密斯医疗通过测试驱动开发提供安全、高质量的医疗设备
  • SpringBoot整合Oauth2开放平台接口授权案例
  • Linux_创建用户
  • RDD(弹性分布式数据集)总结
  • 服务器版RstudioServer安装与配置详细教程
  • 如何在Java中将一个列表拆分为多个较小的列表
  • TryHackMe-Inferno(boot2root)
  • 微信原生开发中 JSON配置文件的作用 小程序中有几种JSON配制文件
  • 【python】为什么使用python Django开发网站这么火?
  • Java设计模式(五)—— 责任链模式
  • VMLogin:虚拟浏览器提供的那些亮眼的功能
  • 第一个错误的版本
  • 2023爱分析·AIGC市场厂商评估报告:拓尔思
  • MobTech|场景唤醒的实现
  • 不在路由器上做端口映射,如何访问局域网内网站
  • ChatGPT 辅助科研写作
  • MySQL最大建议行数 2000w,靠谱吗?