前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表

作者头像
松鼠爱吃饼干
发布2023-09-02 17:44:16
2690
发布2023-09-02 17:44:16
举报
文章被收录于专栏:Python分享Python分享

前言

2023年的中秋节和国庆节即将来临,好消息是,它们将连休8天!这个长假为许多人提供了绝佳的休闲机会,让许多人都迫不及待地想要释放他们被压抑已久的旅游热情,所以很多朋友已经开始着手规划他们的旅游行程。

今天我们来分析下去哪儿的旅游攻略数据,看看吃、住、游玩在价位合适的情况下,怎样才能玩的开心

环境使用

Python 3.8 Pycharm

模块使用

requests parsel csv

数据来源分析

  1. 明确需求

这次选的月份为10 ~ 12月,游玩费用为1000 ~ 2999这个价位

  1. 抓包分析

按F12,打开开发者工具,点击搜索,输入你想要的数据

找到数据链接

代码语言:javascript
复制
https://travel.qunar.com/travelbook/list.htm?page=1&order=hot_heat&&month=10_11_12&avgPrice=2

代码实现

导入模块

代码语言:javascript
复制
import requests
import parsel
import csv

请求数据

模拟浏览器: <可以直接复制> response.text 获取响应文本数据 response.json() 获取响应json数据 response.content 获取响应二进制数据 我们使用requests.get()方法向指定的URL发送GET请求,并获取到响应的内容

代码语言:javascript
复制
url = f'https://travel.qunar.com/travelbook/list.htm?page=1&order=hot_heat&&month=10_11_12&&avgPrice=2'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
response = requests.get(url, headers=headers)

解析

先取响应文本数据

代码语言:javascript
复制
selector = parsel.Selector(response.text)

css选择器::根据标签属性提取数据内容,看元素面板, 为了帮助找到数据标签,

代码语言:javascript
复制
lis = selector.css('.list_item')
for li in lis:
    title = li.css('.tit a::text').get()
    user_name = li.css('.user_name a::text').get()
    date = li.css('.date::text').get()
    days = li.css('.days::text').get()
    photo_nums = li.css('.photo_nums::text').get()
    fee = li.css('.fee::text').get()
    people = li.css('.people::text').get()
    trip = li.css('.trip::text').get()
    places = ''.join(li.css('.places ::text').getall()).split('行程')
    place_1 = places[0].replace('途经:', '')
    place_2 = places[-1].replace(':', '')
    href = li.css('.tit a::attr(href)').get().split('/')[-1]
    link = f'https://travel.qunar.com/travelbook/note/{href}'
    dit = {
        '标题': title,
        '昵称': user_name,
        '日期': date,
        '耗时': days,
        '照片': photo_nums,
        '费用': fee,
        '人员': people,
        '标签': trip,
        '途径': place_1,
        '行程': place_2,
        '详情页': link,
    }
    print(title, user_name, date, days, photo_nums, fee, people, trip, place_1, place_2, link, sep=' | ')

保存

代码语言:javascript
复制
f = open('data.csv', mode='w', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '标题',
    '昵称',
    '日期',
    '耗时',
    '照片',
    '费用',
    '人员',
    '标签',
    '途径',
    '行程',
    '详情页',
])
csv_writer.writeheader()

数据可视化

导入模块、数据

代码语言:javascript
复制
import pandas as pd

df = pd.read_csv('data.csv')
df.head()

年份分布情况

代码语言:javascript
复制
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
num = df['年份'].value_counts().to_list()
info = df['年份'].value_counts().index.to_list()
c = (
    Pie()
    .add(
        "",
        [
            list(z)
            for z in zip(
                info,
                num,
            )
        ],
        center=["40%", "50%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="年份分布情况"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
#     .render("pie_scroll_legend.html")
)
c.render_notebook()

月份分布情况

代码语言:javascript
复制
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
num = df['月份'].value_counts().to_list()
info = df['月份'].value_counts().index.to_list()
c = (
    Pie()
    .add(
        "",
        [
            list(z)
            for z in zip(
                info,
                num,
            )
        ],
        center=["40%", "50%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="月份分布情况"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
#     .render("pie_scroll_legend.html")
)
c.render_notebook()

出行时间情况

代码语言:javascript
复制
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
num = df['耗时'].value_counts().to_list()
info = df['耗时'].value_counts().index.to_list()
c = (
    Pie()
    .add(
        "",
        [
            list(z)
            for z in zip(
                info,
                num,
            )
        ],
        center=["40%", "50%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="出行时间情况"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
#     .render("pie_scroll_legend.html")
)
c.render_notebook()

费用分布情况

代码语言:javascript
复制
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
num = df['费用'].value_counts().to_list()
info = df['费用'].value_counts().index.to_list()
c = (
    Pie()
    .add(
        "",
        [
            list(z)
            for z in zip(
                info,
                num,
            )
        ],
        center=["40%", "50%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="费用分布情况"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
#     .render("pie_scroll_legend.html")
)
c.render_notebook()

人员分布情况

代码语言:javascript
复制
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
num = df['人员'].value_counts().to_list()
info = df['人员'].value_counts().index.to_list()
c = (
    Pie()
    .add(
        "",
        [
            list(z)
            for z in zip(
                info,
                num,
            )
        ],
        center=["40%", "50%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="人员分布情况"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
#     .render("pie_scroll_legend.html")
)
c.render_notebook()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 松鼠爱吃饼干 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 环境使用
      • 模块使用
        • 数据来源分析
        • 代码实现
          • 导入模块
            • 请求数据
              • 解析
                • 保存
                • 数据可视化
                  • 导入模块、数据
                    • 年份分布情况
                      • 月份分布情况
                        • 出行时间情况
                          • 费用分布情况
                            • 人员分布情况
                            相关产品与服务
                            云开发 CLI 工具
                            云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档