8天長假快來了,Python分析【去哪兒旅游攻略】數(shù)據(jù)蒋腮,制作可視化圖表

前言:

嗨嘍~大家好呀淘捡,這里是魔王吶 ? ~!

2023年的中秋節(jié)和國慶節(jié)即將來臨,好消息是池摧,它們將連休8天=钩!作彤!

這個長假為許多人提供了絕佳的休閑機會膘魄,

讓許多人都迫不及待地想要釋放他們被壓抑已久的旅游熱情乌逐,

所以很多朋友已經(jīng)開始著手規(guī)劃他們的旅游行程。

今天我們來分析下去哪兒的旅游攻略數(shù)據(jù)创葡,

看看吃浙踢、住、游玩在價位合適的情況下灿渴,怎樣才能玩的開心

環(huán)境使用

  • 解釋器版本 >>> python 3.8

  • 代碼編輯器 >>> pycharm 2021.2

模塊使用

  • requests >>> 主要用來發(fā) 送 HTTP 請求 / 第三方模塊

  • parsel >>> 主要用來將請求后的字符串格式解析成re,xpath,css進行內容的匹配 / 第三方模塊

  • csv

第三方模塊安裝:

win + R 輸入cmd 輸入安裝命令 pip install 模塊名

(如果你覺得安裝速度比較慢, 你可以切換國內鏡像源)

數(shù)據(jù)來源分析

1. 明確需求

這次選的月份為10 ~ 12月洛波,游玩費用為1000 ~ 2999這個價位

2. 抓包分析

按F12,打開開發(fā)者工具骚露,點擊搜索蹬挤,輸入你想要的數(shù)據(jù)

找到數(shù)據(jù)鏈接

https://travel.qunar.com/travelbook/list.htm?page=1&order=hot_heat&&month=10_11_12&avgPrice=2

代碼實現(xiàn)

導入模塊

import requests
import parsel
import csv

請求數(shù)據(jù)

模擬瀏覽器: <可以直接復制>

  • response.text 獲取響應文本數(shù)據(jù)

  • response.json() 獲取響應json數(shù)據(jù)

  • response.content 獲取響應二進制數(shù)據(jù)

我們使用requests.get()方法向指定的URL發(fā)送GET請求,并獲取到響應的內容

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)

解析

先取響應文本數(shù)據(jù)

selector = parsel.Selector(response.text)

css選擇器::根據(jù)標簽屬性提取數(shù)據(jù)內容棘幸,看元素面板, 為了幫助找到數(shù)據(jù)標簽,

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('途經(jīng):', '')
    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=' | ')

保存

f = open('data.csv', mode='w', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '標題',
    '昵稱',
    '日期',
    '耗時',
    '照片',
    '費用',
    '人員',
    '標簽',
    '途徑',
    '行程',
    '詳情頁',
])
csv_writer.writeheader()

數(shù)據(jù)可視化

導入模塊焰扳、數(shù)據(jù)

import pandas as pd

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

年份分布情況

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=": {c}"))
#     .render("pie_scroll_legend.html")
)
c.render_notebook()

月份分布情況

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="误续: {c}"))
#     .render("pie_scroll_legend.html")
)
c.render_notebook()

出行時間情況

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="吨悍: {c}"))
#     .render("pie_scroll_legend.html")
)
c.render_notebook()

費用分布情況

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=": {c}"))
#     .render("pie_scroll_legend.html")
)
c.render_notebook()

人員分布情況

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="女嘲: {c}"))
#     .render("pie_scroll_legend.html")
)
c.render_notebook()

尾語

最后感謝你觀看我的文章吶~本次航班到這里就結束啦 ??

希望本篇文章有對你帶來幫助 ??畜份,有學習到一點知識~

躲起來的星星??也在努力發(fā)光诞帐,你也要努力加油(讓我們一起努力叭)欣尼。

<a id="article_bottom"></a>最后,宣傳一下呀~??????更多源碼停蕉、資料愕鼓、素材、解答慧起、交流皆點擊下方名片獲取呀????

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末菇晃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蚓挤,更是在濱河造成了極大的恐慌磺送,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灿意,死亡現(xiàn)場離奇詭異估灿,居然都是意外死亡,警方通過查閱死者的電腦和手機缤剧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門馅袁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荒辕,你說我怎么就攤上這事汗销∮贪” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵弛针,是天一觀的道長叠骑。 經(jīng)常有香客問我,道長钦奋,這世上最難降的妖魔是什么座云? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮付材,結果婚禮上朦拖,老公的妹妹穿的比我還像新娘。我一直安慰自己厌衔,他們只是感情好璧帝,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著富寿,像睡著了一般睬隶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上页徐,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天苏潜,我揣著相機與錄音,去河邊找鬼变勇。 笑死恤左,一個胖子當著我的面吹牛,可吹牛的內容都是我干的搀绣。 我是一名探鬼主播飞袋,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼链患!你這毒婦竟也來了巧鸭?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤麻捻,失蹤者是張志新(化名)和其女友劉穎纲仍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贸毕,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡郑叠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了崖咨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锻拘。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出署拟,到底是詐尸還是另有隱情婉宰,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布推穷,位于F島的核電站心包,受9級特大地震影響,放射性物質發(fā)生泄漏馒铃。R本人自食惡果不足惜蟹腾,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望区宇。 院中可真熱鬧娃殖,春花似錦、人聲如沸议谷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卧晓。三九已至芬首,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逼裆,已是汗流浹背郁稍。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胜宇,地道東北人耀怜。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像掸屡,于是被迫代替她去往敵國和親封寞。 傳聞我的和親對象是個殘疾皇子然评,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內容