获取网站上的旅游攻略信息,并作数据可视化

简介: 获取网站上的旅游攻略信息,并作数据可视化

1.爬取2023最新游记有什么好玩的地方-适合年轻人的旅游攻略-去哪儿攻略 (qunar.com)

1.导入相应的库

import requests
import parsel
import csv
import time
import random

2.使用GET的方式请求网页信息

url = f'https://travel.qunar.com/travelbook/list.htm?page=1&order=hot_heat'
response = requests.get(url)

3. 获取数据

html_data = reponse.text

4.用了Python的Web爬虫库Parsel,从HTML数据中提取了所有类名为“b_strategy_list”的元素下的所有链接(即a标签的href属性),并将它们存储在一个列表中。其中,::attr(href)表示要提取的是a标签的href属性。

selector = parsel.Selector(html_data)
url_list = selector.css('.b_strategy_list li h2 a::attr(href)').getall()

5.保存为csv文件

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

6.爬取旅游攻略详情页的信息。首先通过循环遍历一个包含多个旅游攻略页面链接的列表,然后将链接中的特定字符替换掉,得到旅游攻略的ID。接着构造旅游攻略详情页的URL,发送请求并获取响应。使用parsel模块解析响应,提取出标题、评论、日期、天数、花费、旅行人物、旅游玩法、浏览量等信息,并输出到控制台。

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)
    response_1 = requests.get(url_1).text
    selector_1 = parsel.Selector(response_1)
    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)

7.最后写入csv文件中

# 写入数据
    csv_writer.writerow([title, comment, date, days, money, character, play, count])
    time.sleep(random.randint(1, 3))
csv_qne.close()

爬取的数据有些为空,是因为网站上没有相关的数据。

读取csv文件

import pandas as pd
from pyecharts.commons.utils import JsCode
from pyecharts.charts import *
from pyecharts import options as opts
df = pd.read_csv('去哪儿.csv')
print(df)

进行数据清洗,把NaN值若前后都不为空时,用前后的均值填充,同时兼具向前填充的功能

import pandas as pd
data = pd.read_csv(r'去哪儿.csv')
#缺失值填充
data= data.interpolate()            #若前后都不为空时,用前后的均值填充,同时兼具向前填充的功能
data= data.fillna(method='bfill')   #向后填充
data.to_csv("去哪儿旅行.csv",encoding='utf-8')              #保存数据
print("保存成功")

再读取去哪儿旅行.csv数据

import pandas as pd
from pyecharts.commons.utils import JsCode
from pyecharts.charts import *
from pyecharts import options as opts
df = pd.read_csv('去哪儿旅行.csv',encoding='utf-8')
print(df)

# 筛选出人物为三五好友的数据

1. # 筛选出人物为三五好友的数据
2. filtered_data = df[(df['人物'] == '三五好友')]
3.  # 输出结果
4. filtered_data

 筛选出人物为独自一人的数据

# 筛选出人物为独自一人的数据
filtered_data = df[(df['人物'] == '独自一人')]
 # 输出结果
filtered_data 

做每个地点对应的消费图

import matplotlib.pyplot as plt
import pandas as pd
#读取数据
df = pd.read_csv('去哪儿旅行.csv')
#提取地点和人均消费情况
x = df['地点']
y = df['人均消费']
plt.rcParams["font.sans-serif"] = ["SimHei"] # 设置字体
plt.rcParams["axes.unicode_minus"] = False # 该语句解决图像中的“-”负号的乱码问题
#绘制折线图
plt.figure(dpi=500, figsize=(10, 5))
plt.title("人均消费折线图")
plt.plot(x, y, marker='o')
#将地点旋转30°
plt.xticks(rotation=30)
plt.xticks(fontsize=8)
plt.ylabel("人均消费")
plt.xlabel("地点")
plt.savefig("人均消费折线图")
plt.show()

做旅游出行方式的饼图

import pandas as pd
import matplotlib.pyplot as plt
# 读取旅游数据
data = pd.read_csv('去哪儿旅行.csv')
# 统计人物出现次数
x = data['人物']
# 生成饼图
plt.pie(x.value_counts(), labels=x.value_counts().index,autopct='%1.1f%%')
plt.title('旅游出现方式最多的')
plt.show()

每个地点的浏览量

import matplotlib.pyplot as plt
import pandas as pd
#读取数据
df = pd.read_csv('去哪儿旅行.csv')
#提取地点和人均消费情况
x = df['地点']
y = df['浏览量']
plt.rcParams["font.sans-serif"] = ["SimHei"] # 设置字体
plt.rcParams["axes.unicode_minus"] = False # 该语句解决图像中的“-”负号的乱码问题
#绘制折线图
plt.figure(dpi=500, figsize=(10, 5))
plt.title("地点对应浏览量折线图")
plt.plot(x, y, marker='o')
#将地点旋转30°
plt.xticks(rotation=30)
plt.xticks(fontsize=8)
plt.ylabel("浏览量")
plt.xlabel("地点")
plt.savefig("地点对应浏览量折线图")
plt.show()

相关文章
|
Ubuntu 安全 Linux
盘点|2021年最受欢迎Linux桌面操作系统前十名
根据各操作系统镜像站后台下载量,阿里云镜像站统计了2021年最受欢迎的Linux桌面操作系统,仅根据调用量排名,供大家参考。排位最高的还是Centos,受中国Linux用户欢迎的Ubuntu、Debian均进入了前十,国内的优麒麟操作系统排在第7位。
12515 3
|
Linux
百度搜索:蓝易云【Centos7配置webrtc-streamer环境教程。】
请注意,webrtc-streamer还有其他配置选项和功能,您可以参考其官方文档或访问其项目页面以获取更多信息和用法示例。
701 0
|
弹性计算 人工智能 虚拟化
阿里云gpu云服务器产品知识、常见问题及官方解答资料
作为阿里云弹性计算家族的一员,GPU云服务器结合了GPU计算力与CPU计算力,满足您在人工智能、高性能计算、专业图形图像处理等场景中的需求。下面是阿里云GPU云服务器的一些产品知识和常见问题及官方解答资料,以供大家参考和了解阿里云GPU云服务器。
1546 1
阿里云gpu云服务器产品知识、常见问题及官方解答资料
|
程序员
一张图道尽程序员的出路
原文转自:http://blog.csdn.net/foruok/article/details/40585139     最近在琢磨程序员到底路在何方,经过不断的自虐和代入,终于在迷雾森林中得图一张,看之豁然开朗。
1908 0
|
7月前
|
算法 关系型数据库 Java
Springboot集成PostGIS完成路径规划
因为公司里需要做关于林区防火方面的项目,需要完成着火后山区路径的导航,但.....某德的功能似乎只能到达山区的边上,后边的路就需要自己完成导航了。搞了一个周终于有所效果了,也遇见了很多的坑,在此记录一下,希望以后不要踩坑。需要上述的环境才能进行路径导航,环境的搭建可以参阅
248 5
|
11月前
|
数据采集 运维 监控
数据采集监控与告警:错误重试、日志分析与自动化运维
本文探讨了数据采集技术从“简单采集”到自动化运维的演进。传统方式因反爬策略和网络波动常导致数据丢失,而引入错误重试、日志分析与自动化告警机制可显著提升系统稳定性与时效性。正方强调健全监控体系的重要性,反方则担忧复杂化带来的成本与安全风险。未来,结合AI与大数据技术,数据采集将向智能化、全自动方向发展,实现动态调整与智能识别反爬策略,降低人工干预需求。附带的Python示例展示了如何通过代理IP、重试策略及日志记录实现高效的数据采集程序。
520 7
数据采集监控与告警:错误重试、日志分析与自动化运维
|
数据采集 数据可视化 搜索推荐
Python爬虫技术从去哪儿网获取旅游数据,对攻略进行可视化分析,提供全面的旅游攻略和个性化的出行建议
本文利用Python爬虫技术从去哪儿网获取旅游数据,通过数据处理和可视化分析,提供了全面的旅游攻略和个性化出行建议,同时探讨了热门目的地、出游方式、时间段以及玩法的偏好,为旅游行业和游客提供了有价值的参考信息。
1074 9
|
监控 数据可视化 数据挖掘
ERP系统中的销售预测与市场分析
【7月更文挑战第25天】 ERP系统中的销售预测与市场分析
856 2
|
大数据 API 数据库
进行实名认证的必要性,实名认证使用很简单(附教程)
网络平台通过大数据技术进行实名认证以验证用户身份的真实性。常用方法包括身份证、手机号和银行卡信息的核验,如身份证实名认证、公安人脸实名认证、手机三要素及二要素实名认证、以及银行卡要素验证等接口。实名认证广泛应用于游戏、电商、招聘、金融和安保等领域。为调试接口,推荐使用Postman工具,可通过简单的配置测试接口有效性,并导出所需语言的代码样例。具体步骤包括:设置Header中的Authorization字段,并按需配置body参数,最后导出代码以便直接使用。
|
关系型数据库 分布式数据库 数据库
PolarDB 数据库迁移工具与策略
【8月更文第27天】随着业务的增长和技术的发展,企业常常需要对现有的数据库进行升级或迁移以适应新的需求。阿里云提供的 PolarDB 是一款高性能的关系型数据库服务,支持 MySQL、PostgreSQL 和 Oracle 三种存储引擎。本文将介绍如何利用 PolarDB 提供的迁移工具来高效地完成数据迁移工作,并探讨在迁移过程中需要注意的关键点。
976 0