0


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

前言

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

模块使用:

爬虫部分:

  • requests
  • parsel
  • csv

数据分析部分:

  • pandas
  • pyecharts

如何安装模块:

  1. win + R 输入 cmd 输入安装命令: pip install 模块名 回车
  2. pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车

模块安装失败的原因:

  1. 提示:pip 不是内部命令你python环境变量可能没有设置好
  2. 有安装进度条显示,但是安装到一半出现报错了因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢, 下载速度大概只有 几KBread time out 网络连接超时 你可以切换为国内的镜像源
  3. 明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下

开发环境:

  • python 3.6
  • pycharm

流程思路:

  1. 确定目标需求python采集旅游景点数据 / 去哪儿~
  2. 发送请求
  3. 获取数据
  4. 解析数据
  5. 保存数据

需要 源码 . 素材 . 解答 点击领取即可

代码展示

采集数据

导入模块

import requests # 发送请求模块 第三方模块 pip install requests
import parsel # 数据解析模块 第三方模块 pip install 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):
    # '{}'.format(page) 字符串格式化的方法
    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() # 地区
        #attr属性选择器 replace() 字符串替换
        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/'+ href
        dit ={'景区': 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 Bar

c =(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 Bar

c =(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 Bar

c =(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()
#查询3A及以上景点
df[df["星级"]!='无'].sort_values("星级",ascending=False)

尾语 💝

要成功,先发疯,下定决心往前冲!

学习是需要长期坚持的,一步一个脚印地走向未来!

未来的你一定会感谢今天学习的你。

—— 心灵鸡汤

本文章到这里就结束啦~感兴趣的小伙伴可以复制代码去试试哦 😝

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


本文转载自: https://blog.csdn.net/python56123/article/details/129123395
版权归原作者 魔王不会哭 所有, 如有侵权,请联系我们删除。

“用Python采集热门城市景点数据并简单制作数据可视化图”的评论:

还没有评论