Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析


Posted in Python onOctober 16, 2021

知识点

  • requests 发送网络请求
  • parsel 解析数据
  • csv 保存数据

第三方库

  • requests >>> pip install requests
  • parsel >>> pip install parsel

开发环境:

  • 版 本: python 3.8
  • 编辑器:pycharm 2021.2

Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析

【付费VIP完整版】只要看了就能学会的教程,80集Python基础入门视频教学

点这里即可免费在线观看

爬虫程序

导入模块

# 发送网络请求的模块
import requests
# 解析数据的模块
import parsel
import csv
import time
import random

发送请求

url = f'https://travel.qunar.com/travelbook/list.htm?page=1&order=hot_heat'
# <Response [200]>: 告诉我们 请求成功了
response = requests.get(url)

获取数据(网页源代码)

html_data = response.text

解析网页(re正则表达式,css选择器,xpath,bs4/六年没更新了,json)

# html_data: 字符串
# 我们现在要把这个字符串 变成一个对象
selector = parsel.Selector(html_data)
# ::attr(href) url_list:列表
url_list = selector.css('.b_strategy_list li h2 a::attr(href)').getall()
for detail_url in url_list:
    # 字符串的 替换方法
    detail_id = detail_url.replace('/youji/', '')
    url_1 = 'https://travel.qunar.com/travelbook/note/' + detail_id
    print(url_1)

向详情页网站发送请求(get,post)

# https://travel.qunar.com/travelbook/note/7701502
response_1 = requests.get(url_1).text

解析网页

selector_1 = parsel.Selector(response_1)
# :nth-child(): 伪类选择器
# ::text 提取文本内容
# * 代表所有
# 地点
title = selector_1.css('.b_crumb_cont *:nth-child(3)::text').get().replace('旅游攻略', '')
# 短评
comment = selector_1.css('.title.white::text').get()
# 出发日期
date = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.when > p > span.data::text').get()
# 天数
days = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.howlong > p > span.data::text').get()
# 人均消费
money = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.howmuch > p > span.data::text').get()
# 人物
character = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.who > p > span.data::text').get()
# 玩法
play_list = selector_1.css('#js_mainleft > div.b_foreword > ul > li.f_item.how > p > span.data span::text').getall()
play = ' '.join(play_list)
# 浏览量
count = selector_1.css('.view_count::text').get()
print(title, comment, date, days, money, character, play, count)

保存数据

# 保存成csv
csv_qne = open('去哪儿.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.writer(csv_qne)
# 写入数据
csv_writer.writerow(['地点', '短评', '出发时间', '天数', '人均消费', '人物', '玩法', '浏览量'])

Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析

数据可视化

导入模块

import pandas as pd
from pyecharts.commons.utils import JsCode
from pyecharts.charts import *
from pyecharts import options as opts

导入数据

data = pd.read_csv('去哪儿_数分.csv')
data

Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析

旅游胜地Top10及对应费用

bar=(
    Bar(init_opts=opts.InitOpts(height='500px',width='1000px',theme='dark'))
    .add_xaxis(m2)
    .add_yaxis(
        '目的地Top10',
        n2,
        label_opts=opts.LabelOpts(is_show=True,position='top'),
        itemstyle_opts=opts.ItemStyleOpts(
            color=JsCode("""new echarts.graphic.LinearGradient(
            0, 0, 0, 1,[{offset: 0,color: 'rgb(255,99,71)'}, {offset: 1,color: 'rgb(32,178,170)'}])
            """
            )
        )
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title='目的地Top10'),
            xaxis_opts=opts.AxisOpts(name='景点名称',
            type_='category',                                           
            axislabel_opts=opts.LabelOpts(rotate=90),
        ),
        yaxis_opts=opts.AxisOpts(
            name='数量',
            min_=0,
            max_=120.0,
            splitline_opts=opts.SplitLineOpts(is_show=True,linestyle_opts=opts.LineStyleOpts(type_='dash'))
        ),
        tooltip_opts=opts.TooltipOpts(trigger='axis',axis_pointer_type='cross')
    )

    .set_series_opts(
        markline_opts=opts.MarkLineOpts(
            data=[
                opts.MarkLineItem(type_='average',name='均值'),
                opts.MarkLineItem(type_='max',name='最大值'),
                opts.MarkLineItem(type_='min',name='最小值'),
            ]
        )
    )
)
bar.render_notebook()

Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析

bar=(
    Bar(init_opts=opts.InitOpts(height='500px',width='1000px',theme='dark'))
    .add_xaxis(loc)
    .add_yaxis(
        '人均费用',
        price_mean2,
        label_opts=opts.LabelOpts(is_show=True,position='top'),
        itemstyle_opts=opts.ItemStyleOpts(
            color=JsCode("""new echarts.graphic.LinearGradient(
            0, 0, 0, 1,[{offset: 0,color: 'rgb(255,99,71)'}, {offset: 1,color: 'rgb(32,178,170)'}])
            """
            )
        )
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title='各景点人均费用'),
            xaxis_opts=opts.AxisOpts(name='景点名称',
            type_='category',                                           
            axislabel_opts=opts.LabelOpts(rotate=90),
        ),
        yaxis_opts=opts.AxisOpts(
            name='数量',
            min_=0,
            max_=2000.0,
            splitline_opts=opts.SplitLineOpts(is_show=True,linestyle_opts=opts.LineStyleOpts(type_='dash'))
        ),
        tooltip_opts=opts.TooltipOpts(trigger='axis',axis_pointer_type='cross')
    )

    .set_series_opts(
        markline_opts=opts.MarkLineOpts(
            data=[
                opts.MarkLineItem(type_='average',name='均值'),
                opts.MarkLineItem(type_='max',name='最大值'),
                opts.MarkLineItem(type_='min',name='最小值'),
            ]
        )
    )
)
bar.render_notebook()

Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析

出游方式分析

pie = (Pie(init_opts=opts.InitOpts(theme='dark', width='1000px', height='800px'))
       .add("", [z for z in zip(m1,n1)],
            radius=["40%", "65%"])
       .set_global_opts(title_opts=opts.TitleOpts(title="去哪儿\n\n出游结伴方式", pos_left='center', pos_top='center',
                                               title_textstyle_opts=opts.TextStyleOpts(
                                                   color='#FF6A6A', font_size=30, font_weight='bold'),
                                               ),
                        visualmap_opts=opts.VisualMapOpts(is_show=False, 
                                          min_=38,
                                          max_=641,
                                          is_piecewise=False,
                                          dimension=0,
                                          range_color=['#9400D3', '#008afb', '#ffec4a', '#FFA500','#ce5777']),
                        legend_opts=opts.LegendOpts(is_show=False, pos_top='5%'),
                        )
       .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}", font_size=12),
                        tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{b}: {c}"),
                        itemstyle_opts={"normal": {
                                                    "barBorderRadius": [30, 30, 30, 30],
                                                    'shadowBlur': 10,
                                                    'shadowColor': 'rgba(0,191,255,0.5)',
                                                    'shadowOffsetY': 1,
                                                    'opacity': 0.8
                                                }
                                       })
        
                        )
pie.render_notebook()

Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析

出游时间分析

line = (
    Line()
    .add_xaxis(m4.tolist())
    .add_yaxis('',n4.tolist())
)
line.render_notebook()

Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析

2021年的旅游时间曲线大约在五月一号起伏最大,原因肯定是因为假期调休延长至4天,为了调整自己生活及工作的状态,很多人利用这个假期去旅行放松自己。

出游玩法分析

m5 = []
n5 = []
for i in range(20):
    m5.append(list[i][0])
    n5.append(list[i][1])
m5.reverse()
m6 = m5
n5.reverse()
n6 = n5

bar = (
    Bar(init_opts=opts.InitOpts(theme='dark', width='1000px',height ='500px'))
    .add_xaxis(m6)
    .add_yaxis('', n6)
    .set_series_opts(label_opts=opts.LabelOpts(is_show=True, 
                                                       position='insideRight',
                                                       font_style='italic'),
                            itemstyle_opts=opts.ItemStyleOpts(
                                color=JsCode("""new echarts.graphic.LinearGradient(1, 0, 0, 0, 
                                             [{
                                                 offset: 0,
                                                 color: 'rgb(255,99,71)'
                                             }, {
                                                 offset: 1,
                                                 color: 'rgb(32,178,170)'
                                             }])"""))
                            )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="出游玩法分析"),
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),
        legend_opts=opts.LegendOpts(is_show=True))
    .reversal_axis()
)
bar.render_notebook()

Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析

“摄影”和“美食”可谓与旅行息息相关,一次完整的旅行最不能缺的就是“摄影”,拍美食发到朋友圈、拍风景发到朋友圈、拍完美的自己发到朋友圈;工作之后就没有了寒暑假,所以利用周末来一次短途旅行就成为了大多数人的首选。

到此这篇关于Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析的文章就介绍到这了,更多相关Python 爬取去哪儿内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用Python的Flask框架来搭建第一个Web应用程序
Jun 04 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
基于python log取对数详解
Jun 08 Python
python后端接收前端回传的文件方法
Jan 02 Python
python3使用QQ邮箱发送邮件
May 20 Python
学习python分支结构
May 17 Python
Python迭代器iterator生成器generator使用解析
Oct 24 Python
Python 列表反转显示的四种方法
Nov 16 Python
Python+unittest+DDT实现数据驱动测试
Nov 30 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
Jun 11 Python
Python 语言实现六大查找算法
Jun 30 Python
Python爬虫入门案例之爬取二手房源数据
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Python Django模型详解
Python 阶乘详解
Oct 05 #Python
Python 实现Mac 屏幕截图详解
基于Python和openCV实现图像的全景拼接详细步骤
C3 线性化算法与 MRO之Python中的多继承
You might like
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
Ajax+PHP快速上手及简单应用说明
2013/07/24 PHP
yii gridview实现时间段筛选功能
2017/08/15 PHP
Yii框架学习笔记之session与cookie简单操作示例
2019/04/30 PHP
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
js仿腾讯QQ的web登陆界面
2016/08/19 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
快速了解Node中的Stream流是什么
2019/02/13 Javascript
推荐一个基于Node.js的表单验证库
2019/02/15 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
Vuex实现数据增加和删除功能
2019/11/11 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
详解Python异常处理中的Finally else的功能
2017/12/29 Python
python通过zabbix api获取主机
2018/09/17 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
Pytorch之finetune使用详解
2020/01/18 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
教师师德教育的自我评价
2013/10/31 职场文书
送货司机岗位职责
2013/12/11 职场文书
2014年秋季开学演讲稿
2014/05/24 职场文书
幼儿园老师新年寄语2015
2014/12/08 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
谢师宴家长致辞
2015/07/27 职场文书
《秋思》教学反思
2016/02/23 职场文书
自荐信大全
2019/03/21 职场文书
收音机爱好者玩机13年,简评其使用过的19台收音机
2022/04/30 无线电