获取网站上的旅游攻略信息,并作数据可视化
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_idprint(url_1)response_1 = requests.get(url_1).textselector_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 optsdf = pd.read_csv('去哪儿.csv')
print(df)
进行数据清洗,把NaN值若前后都不为空时,用前后的均值填充,同时兼具向前填充的功能
import pandas as pddata = 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 optsdf = pd.read_csv('去哪儿旅行.csv',encoding='utf-8')
print(df)
# 筛选出人物为三五好友的数据
# 筛选出人物为三五好友的数据
filtered_data = df[(df['人物'] == '三五好友')]# 输出结果
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()
获取网站上的旅游攻略信息,并作数据可视化相关推荐
- (附源码)计算机毕业设计SSM旅游攻略网站系统
(附源码)计算机毕业设计SSM旅游攻略网站系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(Intel ...
- 冬季到吉林来玩雪|史上最全的吉林冬季旅游攻略!
观雪.滑雪.漂流.冬捕.赏雾凇.泡温泉,体验浓郁的民俗风情--来吉林省一站式全新体验! 小编整理出最全吉林省冬季旅游攻略,喜欢就分享给你的朋友吧! 一.冰雪观光 平原沃野.山川河流,凝霜挂雪.戴玉披银 ...
- 广州去厦门旅游攻略--(转自 #散文吧网站#)
广州去厦门旅游攻略 发布时间:2016-12-11 17:30 厦门由厦门岛.离岛鼓浪屿.内陆九龙江南岸海沧半岛.集美半岛.翔安区以及同安等组成,陆地面积1699.39Km2,海域面积300多平方公里 ...
- 深圳免费旅游景点大全|深圳旅游攻略(上)
大鹏所城 ☑ 门票:免费 ☑ 开放时间:09:00~17:30 ☑ 地址:深圳市龙岗区南门西路 ☑ 乘车路线:在大鹏王母站乘坐M741(原B756路)公交车到大鹏所城站下车 推荐理由:大鹏所城是深圳八 ...
- Python实战——选择最佳旅游攻略,让旅游更加便捷(爬虫实战)
前言: 打算和老弟去西安来一个说走就走的旅行,但是网上攻略太多了看得头皮发麻,但是仔细看的话每条旅游攻略都有特定的参数条件的,比如人数.价钱.游玩时间,也就是说我们可以通过筛选这些条件初步获取我们满意 ...
- Python 网络爬虫实战:爬取《去哪儿》网数千篇旅游攻略数据,再也不愁旅游去哪儿玩了
好久不见! 今天我们来爬取 去哪儿网站 的 旅游攻略 数据. 0x00 找一个合理的作案动机 作为一名立志成为技术宅的普通肥宅,每次一到周末就会面临一个人生难题:这周末怎么过? 本来是没有这些问题的 ...
- 越南旅游攻略??转载
越南旅游攻略??转载 2010年03月18日 open bus在越南是经济游的首选交通方式.越南是从北到南狭长的形状,各个景点差不多平均地分布在南北的线上.open bus 是旅游公司的,提供穿梭于各 ...
- Python 爬取蚂蜂窝旅游攻略 (+Scrapy框架+MySQL)
前言:使用python+scrapy框架爬取蚂蜂窝旅游攻略 Git代码地址:https://github.com/qijingpei/mafengwo 获取代理IP地址的开源项目ProxyPool-m ...
- 基于PHP+小程序(MINA框架)+Mysql数据库的旅游攻略小程序系统设计与实现
项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信景区景点旅游攻略小程序系统,前台用户使用小程序,小程序使用微信开发者工具开发:后台管理使用基PP+MySql的B/S架构,开发工具使用p ...
最新文章
- 超全总结:神经网络加速之量化模型 | 附带代码
- 2020\Simulation_1\4.数字9
- jquery easyui datagrid mvc server端分页排序筛选的实现
- mysql联合索引和单索引_mysql联合索引跟单列索引的区别
- Win7系统下调整硬盘分区大小给C盘更多的空间
- mysql scale,Mailchimp Scale:a MySQL Perspective
- MyBatis-Plus 分页查询以及自定义sql分页
- Linux基础命令大全
- k3刷机 重置_K3 官改刷官改升级或降级两种方法
- windows编译librtmp
- SQL数据库置疑恢复
- spring 事务传播机制总结
- win10摄像头可以用计算机里不显示,win10打开计算机如何显示摄像头
- pool(三)——Timer
- 电脑屏幕下方任务栏不显示了怎么处理 ?
- c语言变量名拼音,C语言的32个关键字(读音、用法、注释)转来的,给刚接触C的...
- java des 中文乱码_网络上DesUtil.java关于汉字加密解密出现乱码的问题
- 蓝桥杯国赛C++A组B组题解整理(第八、七、六、五、四届)
- 太原理工大学信息与计算机学怎么样,桑胜波-太原理工大学信息与计算机学院...
- 如何使用视频流媒体服务器支持HTML5直播?
热门文章
- 低代码如何助力化学材料行业数字化升级?
- Leetcode 5986:设置时间的最少代价
- php7 xdebug 性能,PHP 7 Xdebug 深深的坑
- 超导量子计算机速度多快,中国科学家实现 “量子霸权”,计算速度比超级计算机快100万亿倍...
- 华为系统鸿蒙什么意思,华为新推出的鸿蒙系统是什么意思,怎么去理解?
- 多线程入门级教学!!!
- 单链表图解及模板总结
- VB编码, Gamma编码, Delta编码
- 飞思卡尔K22调试FXOS8700加速度和电子罗盘
- ubuntu 18.04 安装 ROS