Python实战:采集全国5A景点名单

本文将以采集全国 5A 景点名单为例,详细介绍如何使用 Python 进行数据采集。

本文采集到全国340家5A景区的名单,包括景区名称地区A级评定年份这些字段。

一、分析数据源

为了获取权威数据,我们来到主管部门的官方网站,在右上角搜索框内搜索“5A”。

可以看到搜索结果有一个列表,通过翻页可以查询到全国所有 5A 景区的景区名称地区A级评定年份这些字段。

在浏览器右键,检查,找到请求 url、请求方式。

找到请求需要携带的参数。

分析返回的 response,content 下面就是我们需要的数据。

通过以上分析,可以发现想要获取到数据并不难。

接下来,我们可以通过 Python 代码,轻松采集到这些字段信息。

二、开始写代码

1、导入库

import requests
import time
from DataRecorder import Recorder
from tqdm import tqdm

2、请求数据

headers = {'User-Agent': '' #填写自己的
}
json_data = {'directoryId': '4','searchList': [],'size': 5,'page': 1,
}response = requests.post('https://www.mct.gov.cn/tourism/api/content/getContentListByDirId',headers=headers, json=json_data).json()

3、处理response

# contents包含本页景区信息
contents = response['data']['contentList']['content']
# 当前页景区数量
content_num = len(contents)
print(f"**********第{page}页有{content_num}个景区**********")
# 提取每个景区信息:'景区名称'、'地区'、 'A级'、'评定年份'
for content in contents:name = content['name']provinceName = content['provinceName']gradesName = content['gradesName']year = content['year']# 景区信息放入一个字典content_dict = {'景区名称': name, '地区': provinceName, 'A级': gradesName, '评定年份': year}print(content_dict)

这样简单几行代码,就可以完成数据采集了,Pycharm 控制台输出如下。

接下来,可以完善代码,把采集每页景点信息的代码封装为一个函数+实现翻页采集数据+数据存储。

4、封装函数

def get_info(page):headers = {'User-Agent':  #填写自己的}json_data = {'directoryId': '4','searchList': [],'size': 5,'page': page,}response = requests.post('https://www.mct.gov.cn/tourism/api/content/getContentListByDirId',headers=headers, json=json_data).json()......

5、翻页采集数据

# 获取第1页到68页的景点信息
for page in tqdm(range(1, 69)):# 调用获取景区信息的函数get_info(page)# 翻页之间设置3秒等待,减小对方网站压力time.sleep(3)

6、数据存储到excel

# 获取当前时间
current_time = time.localtime()
# 格式化当前时间
formatted_time = time.strftime("%Y-%m-%d %H%M%S", current_time)
# 初始化文件
init_file_path = f'全国5A景点名单-{formatted_time}.xlsx'
# 新建一个excel表格,用来保存数据,每500条缓存写入一次本地excel
r = Recorder(path=init_file_path, cache_size=500)
# 景区信息写入缓存
r.add_data(content_dict)
# 避免数据丢失,爬虫结束时强制保存excel文件
r.record()

三、完整代码如下

import requests
import time
from DataRecorder import Recorder
from tqdm import tqdmdef get_info(page):headers = {'User-Agent':#填写自己的}json_data = {'directoryId': '4','searchList': [],'size': 5,'page': page,}response = requests.post('https://www.mct.gov.cn/tourism/api/content/getContentListByDirId',headers=headers, json=json_data).json()# contents包含本页景区信息contents = response['data']['contentList']['content']# 当前页景区数量content_num = len(contents)print(f"**********第{page}页有{content_num}个景区**********")# 提取每个景区信息:'景区名称'、'地区'、 'A级'、'评定年份'for content in contents:name = content['name']provinceName = content['provinceName']gradesName = content['gradesName']year = content['year']# 景区信息放入一个字典content_dict = {'景区名称': name, '地区': provinceName, 'A级': gradesName, '评定年份': year}print(content_dict)# 景区信息写入缓存r.add_data(content_dict)if __name__ == '__main__':# 获取当前时间current_time = time.localtime()# 格式化当前时间formatted_time = time.strftime("%Y-%m-%d %H%M%S", current_time)# 初始化文件init_file_path = f'全国5A景点名单-{formatted_time}.xlsx'# 新建一个excel表格,用来保存数据,每500条缓存写入一次本地excelr = Recorder(path=init_file_path, cache_size=500)# 获取第1页到68页的景点信息for page in tqdm(range(1, 69)):# 调用获取景区信息的函数get_info(page)# 翻页之间设置3秒等待,减小对方网站压力time.sleep(3)# 避免数据丢失,爬虫结束时强制保存excel文件r.record()

Pycharm 控制台输出如下:

总计获取到 340 个 5A 景区信息,excel 截图如下:

四、数据分析

接下来,可以进行数据分析,由于不是本文重点,而且我之前发过类似文章,就不展开写了,有兴趣的读者可以自行尝试。

比较有趣的是,黄河壶口瀑布旅游区(陕西省延安市·山西省临汾市)这个景区同时属于山西陕西两个地区,官方网站把他算作 2 条数据,所以也可以说全国有 339 个或 340 个 5A 景区。

五、总结

通过以上步骤,编写这个简单的 Python 代码,就获取到了官方发布的全国 5A 景点信息,一共是 340 个。

这个过程包括获取网页源代码、解析网页源代码、提取所需数据和存储数据等环节。掌握了这些技能,我们可以更加高效地在网上采集所需的信息,为数据分析提供有力支持。

世界那么大,我想去看看。

本文首发在“程序员coding”公众号,欢迎关注与我一起交流学习。还可以通过公众号添加我的私人微信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/742167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java集合中经典的 5种设计模式,打死也要记住啊!

集合 一、 迭代器模式(Iterator Pattern)二、 工厂模式(Factory Pattern)三、 装饰器模式(Decorator Pattern)四、 适配器模式(Adapter Pattern)五、 组合模式(Composite Pattern) Java 集合框架中的 List、Set、Map 以及其实现类都使用了多种经典的设计模式 一、 迭代器模式(I…

测试用例是什么?怎么写?不会测试用例的看过来,

前言 今天笔者想和大家来聊聊测试用例,这篇文章主要是想要写给测试小伙伴们的,因为我发现还是有很多小伙伴在遇到写测试用例的时候无从下手,我就想和大家简单的聊聊,这篇文章主要是针对功能测试的哟。 一、什么是测试用例&#…

如何将服务器数据迁移到另一台服务器?

将服务器数据迁移到另一台服务器通常涉及以下几个步骤: 1.备份数据: 在进行数据迁移之前,首先需要备份服务器上的数据。这包括网站文件、数据库、配置文件等。可以使用各种备份工具和方法,如rsync、scp、FTP、数据库备份工具等。 …

Azure Databricks 集群合并小文件与删除过多的历史版本

原因是:databricks 集群的数据底层是HDFS虽然是spark做为引擎读写如果没有及时合并也一样会因为小文件问题造成大量的资源消耗,也就会越来越慢。目前采用的主要方式,定时合并,与版本删除 1、python 脚本如下有用到的同学可以参考下…

Flask开发类似jenkins构建自动化测试任务工具

1、自动化 某一天你入职了一家高大上的科技公司,开心的做着软件测试的工作,每天点点点,下班就走,晚上陪女朋友玩王者,生活很惬意。 但是美好时光一般不长,这种生活很快被女主管打破。为了提升公司测试效率…

有了HTTP协议,为什么还要有WebSocket

HTTP的缺陷 现在的应用场景可能更多的是,前端发起一次HTTP请求,服务器后端返回一次HTTP响应。但是有这样的场景,是需要服务器主动给前端发送请求的。 最常见的场景是扫码登陆。 这里有两种解决方案,一种是微信的解决方案&#xf…

Could not find artifact com.gexin.platform:gexin-rp-sdk-http:pom:4.1.0.1

Could not find artifact com.gexin.platform:gexin-rp-sdk-http:pom:4.1.0.1 新接手了一个项目,导入到idea后,maven标签中页点击Reload All Maven Projects,报Could not find artifact com.gexin.platform:gexin-rp-sdk-http:pom:4.1.0.1错…

YOLOv5算法进阶改进(19)— 在主干网络中引入SAConv | 轻量化的可切换空洞卷积

前言:Hello大家好,我是小哥谈。Switchable Atrous Convolution(SAC)是一种用于图像处理和计算机视觉任务的卷积神经网络(CNN)操作。它是在传统的空洞卷积的基础上进行改进的。传统的空洞卷积是一种通过在卷积核中引入空洞(或称为膨胀率)来扩大感受野的技术。然而,传统…

网络学习:Vlan基础知识、划分思路及其优越性

目录 一、VLAN基础知识 二、VLAN的划分方法 1. 基于端口划分的VLAN 2. 基于MAC地址划分VLAN 3. 基于网络层协议划分VLAN 4. 根据IP组播划分VLAN 5. 按策略划分VLAN 6. 按用户定义、非用户授权划分VLAN 三、VLAN的优越性 1. 增加了网络连接的灵活性 2. 控制网络上的广…

GStreamer管道播放建立

1 mediainfo工具获取媒体的基本信息 1.1 封装形式(别被文件后缀迷惑,有些mp4封装,可能是ts等等) TS封装:/home/firefly# mediainfo /home/firefly/LG_Colors-of-Journey-HDR.mp4 General ID : 1 (0x1) Complete name …

企业信息化转型之企业统一门户搭建

一、当前企业门户实施的背景和痛点 企业随着公司业务的发展,公司运作的复杂度在不断加大,各部门的业务量和业务的复杂度都在不断增加,已经建设了ERP、HR、OA、考勤、合同、BPM、PLM等有效地支撑了过去和现有业务的发展。 企业在信息化办公是…

Github上哪些好用的工具

专注于web漏洞挖掘、内网渗透、免杀和代码审计,感谢各位师傅的关注!网安之路漫长,与君共勉! Qexo-爱写博客的师傅强烈推荐 漂亮的 Hexo 静态博客编辑器。该项目是基于 Django 的 Hexo 静态博客管理后台,支持文章管理、…

暖通空调HVAC软件行业调研报告

本文调研和分析全球暖通空调HVAC软件发展现状及未来趋势,核心内容如下: (1)全球市场暖通空调HVAC软件总体规模,按收入进行了统计分析,历史数据2019-2023年,预测数据2024至2030年。 (…

Nginx和Ribbon实现负载均衡的区别

Nginx和Ribbon的区别 1. Nginx服务器端负载均衡: 1、Nginx是客户端所有请求统一交给nginx,由nginx进行实现负载均衡请求转发,属于服务器端负载均衡。即请求有nginx服务器端进行转发。 3、Nginx是服务端的负载均衡,Ribbon是客户端…

shell变量引用

在 Bash 中,如果你想让一个变量引用或“指向”另一个变量(数组),你可以使用间接引用的概念。对于你的场景,你可以将变量 a 设为数组名 eb2_info 的字符串值,然后在需要引用数组时使用间接引用。 #!/bin/ba…

(开源项目)OpenHarmony、社区共建Sample合入要求

1.新增Sample功能不能重复于当前已有Sample的功能; 2.新增Sample的工程推荐使用ArkTS语言编写; 3.新增Sample的工程推荐使用Stage模型编写; 4.新增Sample的工程中需要包含UI自动化用例(ohosTest工程模块)&#xff0…

postgres12安装postgis

文章目录 OpenEulr 23.03 x86_64依赖安装 centos7.6 x86_64依赖安装 给postgres 12安装postgis。 postgres 12支持的postgis版本为:(检查postgis POSTGIS_PGSQL_VERSION) postgis>2.5 OpenEulr 23.03 x86_64 依赖 postgis-3.4.2依赖:(yum源安装的版本及postgis…

小众二手跨境电商平台——Depop新手卖家指南

对标美国的二手跨境电商平台Mercari和Poshmark以及东南亚的Etsy,Depop是英国的一个独特的创意时尚交易平台。它与Instagram相似,但它更倾向于交易二手衣物、饰品以及艺术作品。这个相对细分的电子商务平台Depop也吸引了很多跨境人。今天就给大家分享如何…

AM和FM是啥意思?有啥区别?

同学们大家好,今天我们继续学习杨欣的《电子设计从零开始》,这本书从基本原理出发,知识点遍及无线电通讯、仪器设计、三极管电路、集成电路、传感器、数字电路基础、单片机及应用实例,可以说是全面系统地介绍了电子设计所需的知识…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的条形码二维码检测系统(深度学习+UI界面+训练数据集+Python代码)

摘要:在物流和制造业中,开发一套高效的条形码与二维码识别系统显得尤为关键。本博文深入探讨了如何利用深度学习技术打造出一套先进的条形码及二维码检测系统,并且提供了一套完整的实施方案。该系统搭载了性能卓越的YOLOv8算法,并…