用Python采集热门城市景点数据并简单制作数据可视化图
前言
嗨喽~大家好呀,这里是魔王呐 ❤ ~!
模块使用:
爬虫部分:
-
requests
-
parsel
-
csv
数据分析部分:
-
pandas
-
pyecharts
如何安装模块:
-
win + R 输入 cmd 输入安装命令: pip install 模块名 回车
-
pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车
模块安装失败的原因:
-
提示:pip 不是内部命令
你python环境变量可能没有设置好
-
有安装进度条显示,但是安装到一半出现报错了
因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,
下载速度大概只有 几KBread time out 网络连接超时 你可以切换为国内的镜像源
-
明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块
你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
开发环境:
-
python 3.6
-
pycharm
流程思路:
-
确定目标需求
python采集旅游景点数据 / 去哪儿~
-
发送请求
-
获取数据
-
解析数据
-
保存数据
需要 源码 . 素材 . 解答 点击领取即可
代码展示
采集数据
导入模块
import requests # 发送请求模块 第三方模块 pip install requests
import parsel # 数据解析模块 第三方模块 pip install parsel
import csv # 内置模块
import time # 时间模块 可以用作延时
写入表格
f = open('张家界景点.csv', mode='a', encoding='utf-8-sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['景区', '星级', '地区', '热度', '销量', '地址','价格', '简介', '详情页'])
csv_writer.writeheader() # 写入表头
多页采集
for page in range(1, 12):# '{}'.format(page) 字符串格式化的方法print(f'===============================正在爬取第{page}页数据内容=======================================')time.sleep(2)
请求链接
url = f'https://*****.com/ticket/list_%E5%BC%A0%E5%AE%B6%E7%95%8C.html?from=mps_search_suggest_h&keyword=%E5%BC%A0%E5%AE%B6%E7%95%8C&page={page}'
请求头:把python代码伪装成浏览器 给服务器发送请求
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36'}response = requests.get(url=url, headers=headers)
获取网页文本数据 response.text
# print(response.text)
解析数据
-
css选择器 根据标签提取数据内容
第一次提取 所以景区标签内容 返回的页是一个对象 列表
-
id选择器 直接可以使用# 开头
selector = parsel.Selector(response.text)lis = selector.css('#search-list .sight_item_detail')for li in lis:title = li.css('.name::text').get() # 景区level = li.css('.level::text').get() # 星级area = li.css('.area a::text').get() # 地区# attr属性选择器 replace() 字符串替换hot = li.css('.product_star_level em::attr(title)').get().replace('热度: ', '') # 热度hot = int(float(hot)*100)address = li.css('.address span::attr(title)').get() # 地址price = li.css('.sight_item_price em::text').get() # 价格hot_num = li.css('.hot_num::text').get() # 销量intro = li.css('.intro::text').get() # 简介href = li.css('.name::attr(href)').get() # 详情页href = 'https://*****.com/' + hrefdit = {'景区': title,'星级': level,'地区': area,'热度': hot,'销量': hot_num,'地址': address,'价格': price,'简介': intro,'详情页': href,}csv_writer.writerow(dit)print(title, level, area, hot, address, price, hot_num, intro, href, sep=' | ')
需要 源码 . 素材 . 解答 点击领取即可
旅游数据可视化
导入景点数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置加载的字体名
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
import jieba
import re
from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.globals import ThemeType
import stylecloud
from IPython.display import Image df = pd.read_csv(r"c:\python\demo2\爬虫入门教程45 五一去哪儿玩?\去哪儿.csv")
df.head()
删除重复数据
df = df.drop_duplicates()
查看数据信息
df.info() #字段类型符合分析需要
景点价格价格Top20
df_qunarPrice = df.pivot_table(index='景区',values='价格')
df_qunarPrice.sort_values('价格',inplace=True,ascending=False)
df_data = df_qunarPrice[:20]
from pyecharts import options as opts
from pyecharts.charts import Barc = (Bar().add_xaxis(df_data.index.tolist()).add_yaxis("",df_data['价格'].values.tolist()).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="景点价格Top20"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=90)),))
c.render_notebook()
评分TOP20景点
df_score = df.pivot_table(index='景区',values='热度')
df_score.sort_values('热度',inplace=True,ascending=False)
df_data = df_score[:20]
from pyecharts import options as opts
from pyecharts.charts import Barc = (Bar().add_xaxis(df_data.index.tolist()).add_yaxis("",df_data['热度'].values.tolist()).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="评分TOP20景点"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=90)),))
c.render_notebook()
df_saleCount = df.pivot_table(index='景区',values='销量')
df_saleCount.sort_values('销量',inplace=True,ascending=False)
df_data = df_saleCount[:20]
df_data.values
月销量TOP20景点
df_saleCount = df.pivot_table(index='景区',values='销量')
df_saleCount.sort_values('销量',inplace=True,ascending=False)
df_data = df_saleCount[:20]from pyecharts import options as opts
from pyecharts.charts import Barc = (Bar().add_xaxis(df_data.index.tolist()).add_yaxis("",df_data['销量'].values.tolist()).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="月销量TOP20景点"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=90)),))
c.render_notebook()
景点等级分布
df_star = df["星级"].value_counts()
df_star = df_star.sort_values(ascending=False)
print(df_star)
c = (Pie(init_opts=opts.InitOpts(theme=ThemeType.WALDEN)).add("",[list(z) for z in zip(df_star.index.to_list(),df_star.to_list())]).set_global_opts(legend_opts = opts.LegendOpts(is_show = False),title_opts=opts.TitleOpts(title="景点等级分布",subtitle="数据来源:去哪儿网",pos_top="0.5%",pos_left = 'left')).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%",font_size=16)))
c.render_notebook()
#查询3A及以上景点
df[df["星级"]!='无'].sort_values("星级",ascending=False)
尾语 💝
要成功,先发疯,下定决心往前冲!
学习是需要长期坚持的,一步一个脚印地走向未来!
未来的你一定会感谢今天学习的你。
—— 心灵鸡汤
本文章到这里就结束啦~感兴趣的小伙伴可以复制代码去试试哦 😝
相关文章:

用Python采集热门城市景点数据并简单制作数据可视化图
前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 模块使用: 爬虫部分: requests parsel csv 数据分析部分: pandas pyecharts 如何安装模块: win R 输入 cmd 输入安装命令: pip install 模块名 回车 pycharm里面安装 terminal 输入安装命令…...

论文阅读:pixelNeRF: Neural Radiance Fields from One or Few Images
中文标题:从一或少量图像中构建神经辐射场 提出问题 NeRF效果虽然惊艳,但是其需要大量环绕图像以及长时间的训练。 创新点 与原始的NeRF网络不使用任何图像特征不同,pixelNeRF将与每个像素对齐的空间图像特征作为输入。也可以集合更多输入…...

C++项目——高并发内存池(1)--介绍及定长内存池
1.什么是内存池 1.1 池化技术 将程序中需要经常使用的核心资源先申请出来,放在一个池内,由程序自己管理,这样可以提高资源的使用效率,也可以保证本程序占有的资源数量。 比如之前博文实现的线程池,就是预先的申请出…...

网络有线无线配置
一、需求 在无线接入区内,当Lsw1的上联口出现故障时,需要通过AP1-LSw1-LSw2-LSw3的路径访问公网server3。这是因为AP1通过无线网连接到LSw1,而LSw1与LSw3之间的链路出现故障,无法直接访问公网server3。因此,流量需要通…...

阅读笔记——Feature-Point Matching for Aerial and Ground Images方法
阅读笔记——Feature-Point Matching for Aerial and Ground Images 1.应用背景 在三维重建应用中,常用的是航空影像,但在城市环境中,面对大量的高层建筑物,航空影像往往不能很好的重建出完整的三维模型。因为航空影像视角约束以…...
前端工程师面试题10条必会笔试题
布局 左边20% 中间自适应 右边200px 不能用定位答案:圣杯布局/双飞翼布局或者flex什么叫优雅降级和渐进增强?渐进增强 progressive enhancement:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进…...

【技术分享】Web自动化之Selenium安装
Web 应用程序的验收测试常常涉及一些手工任务,例如打开一个浏览器,并执行一个测试用例中所描述的操作。但是手工执行的任务容易出现人为的错误,也比较费时间。因此,将这些任务自动化,就可以消除人为因素。Selenium 可以…...

【Linux】进程状态的理解
✍作者:阿润菜菜 📖专栏:Liunx系统编程 本文目录概述两个先行概念我们为啥创建进程Linux下的进程状态1. R 运行状态2.S 休眠状态 --- 可中断休眠状态3. D 磁盘休眠状态 ---不可中断休眠4.T 暂停状态 (t 追踪暂停状态)5…...

打游戏哪种蓝牙耳机比较好?适合玩游戏的无线蓝牙耳机
2023年耳机市场一如既往地卷,不只是卷音质,还在外观和功能上做了许多的改进,以至于现在哪怕不懂耳机的人从各电商平台都能闭眼入一个款平价品牌耳机且极少会踩雷,玩游戏是当前年轻人的娱乐方式,下面整理了几款适合玩游…...

Fortinet推出新一代自研安全芯片,跨所有网络边缘加速网络与安全融合
专注网络与安全融合的全球网络安全领导者 Fortinet(NASDAQ:FTNT),近日宣布推出新一代自研安全芯片 FortiSP5,作为 Fortinet ASIC 技术的最新突破,有力推动了分布式网络边缘安全的重大飞跃。FortiSP5 源自 F…...

ChatGPT爆火背后的真相:学编程已经成为必选项
这一阵最热门的话题,莫过于人工智能新选手——ChatGPT,在推出后只用了两个月就积累了1亿用户!它的出现在科技圈掀起了一阵“惊涛骇浪”,有人称ChatGPT的意义,堪比当年蒸汽机的出现,它足以爆发新一轮的“工业…...

Unity UI框架
一、简介 最近在各大网站看了一下 Unity3d 的 UI 框架,各种 UI 框架已经有很多的版本了,各有千秋,有的功能虽然写的完善,但用起来太复杂,有的框架功能不完善,搞个课程就上架了,还有什么 MVC 框…...

vue2提取vue-router的title单独存放,使用i18n实现
成品效果 首先引入i18n(vue-i18n官网文档) 依赖包 npm install vue-i18n8然后单独在src目录下新建一个文件夹lang,存放相对应的变量名称,我这里只做显示中文所以其他引入我都注释了,具体目录如下: src\lang/zh.js部分代码 export…...
【Linux操作系统】【综合实验三 用户帐号、文件系统与系统安全管理】
文章目录一、实验目的二、实验要求三、实验内容四、实验报告要求一、实验目的 要求掌握Linux系统用户的创建、删除与管理操作;熟悉Linux文件系统的管理模式,学会创建用户文件系统并装载和卸载文件系统;掌握超级用户的管理方式与权限…...
sqlite3数据库-sqlite语句1(五)
DML(Data Manipulation Language,数据操作语言) SELECT:查询表中的数据;SELECT语句中使用WHERE子句SELECT <列名>,... FROM <表名> WHERE <条件表达式>;SELECT id,name,purchase_price FROM Product; /*使用逗号分隔查询多列,顺序同子句顺序*/ SELECT * FROM…...

【图像分类】卷积神经网络之LeNet5网络模型实现MNIST手写数字识别
写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 在上一篇博文中我们对LeNet5网络模型的结构进行了剖析,本篇博文,我们将使用PyTorch搭建LeNet5实现MNIST手写数字…...

前端开发环境搭建
文章目录Node.js是什么安装查看版本入门示例NPM使用 npm 命令安装模块常见命令使用淘宝 NPM 镜像TypeScript安装入门示例从github拉取构建项目如何从零创建一个TypeScript项目规划目录结构新建项目Web App运行服务添加依赖打包使用browserify打包使用webpack打包推荐流程目录配…...
学习Flask之四、网页表单
第二章介绍的request对象,使用了客户端请求的所有信息。特别地,request.form提供了对POST请求提交的表单数据的访问。尽管Flask请求对象的支持足于处理网页单,但是还有很多作务很繁锁和重复。两个很好的例子是产生HTML表单代码和验证表单数据…...

CenterMask paper笔记
CenterMask是一个anchor free的实例分割模型, 来自paper: CenterMask: Real-Time Anchor-Free Instance Segmentation 提起anchor free, 会想到FCOS模型,是用来目标检测的, 那么这里就用到了FCOS, 不过换了backbone, 在FCOS检测出目标框后&…...

06- OpenCV查找图像轮廓 (OpenCV基础) (机器视觉)
知识重点 灰度图转换: gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)二值化: 返回两个东西,一个阈值, 一个是二值化的图: thresh, binary cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)查找轮廓: 返回两个结果,分别是轮廓和层级: c…...
【Golang】使用gin框架导出excel和csv文件
目录 1、背景2、go库【1】excel库下载【2】csv标准库 3、代码示例4、使用方法 1、背景 项目中可能会遇到导入导出一批数据的功能,对于批量大数据可能用表格的方式直观性更好,所以本篇文件来讲一下go中导出excel和csv文件的方式。 2、go库 【1】excel库…...

编程技能:格式化打印04,sprintf
专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 (一)WIn32 专栏导航 上一篇:编程技能:格式化打印03,printf 回到目录…...

二叉数-965.单值二叉数-力扣(LeetCode)
一、题目解析 顾名思义,就是二叉树中所存储的值是相同,如果有不同则返回false 二、算法原理 对于二叉树的遍历,递归无疑是最便捷、最简单的方法,本题需要用到递归的思想。 采取前序遍历的方法,即根、左、右。 我们…...

网络安全A模块专项练习任务五解析
任务五:Linux 操作系统安全配置-1 任务环境说明: ✓ 服务器场景:LinuxServer:(开放链接) ✓ 用户名:root,密码:123456 ✓ 数据库用户名:root,密码:123456 请对服务器 LinuxServer 按要求进行相应的设置,提高服务器的安全性。 1.设置最小…...
机器学习与深度学习07-随机森林01
目录 前文回顾1.随机森林的定义2.随机森林中的过拟合3.随机森林VS单一决策树4.随机森林的随机性 前文回顾 上一篇文章链接:地址 1.随机森林的定义 随机森林(Random Forest)是一种集成学习算法,用于解决分类和回归问题。它基于决…...

电网“逆流”怎么办?如何实现分布式光伏发电全部自发自用?
2024年10月9日,国家能源局综合司发布了《分布式光伏发电开发建设管理办法(征求意见稿)》,意见稿规定了户用分布式光伏、一般工商业分布式光伏以及大型工商业分布式光伏的发电上网模式,当选择全部自发自用模式时&#x…...

BugKu Web渗透之game1
启动场景,打开网页如下: 是一个游戏。 步骤一: 右键查看源代码也没有发现异常。 步骤二: 点击开始游戏来看看。 结果他是这种搭高楼的游戏。我玩了一下子,玩到350分就game over。 之后就显示游戏结束,如…...

【音视频】H265 NALU分析
1 H265 概述 H264 与 H265 的区别 传输码率:H264 由于算法优化,可以低于 2Mbps 的速度实现标清数字图像传送;H.265 High Profile 可实现低于 1.5Mbps 的传输带宽下,实现 1080p 全高清视频传输。 编码架构:H.265/HEVC…...

GLIDE论文阅读笔记与DDPM(Diffusion model)的原理推导
Abstract 扩散模型(Diffusion model)最近被证明可以生成高质量的合成图像,尤其是当它们与某种引导技术结合使用时,可以在生成结果的多样性与保真度之间进行权衡。本文探讨了在文本条件图像生成任务中使用扩散模型,并比…...

11.2 java语言执行浅析3美团面试追魂七连问
美团面试追魂七连问:关于Object o New Object() ,1请解释一下对象的创建过程(半初始化) 2,加问DCL要不要volatile 问题(指令重排) 3.对象在内存中的存储布局(对象与数组的存储不同),4.对象头具体包括什么.5.对象怎么定位.6.对象怎么分配(栈-线程本地-Eden-Old)7.在…...