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…

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

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

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

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

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

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

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. 控制网络上的广…

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

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

Github上哪些好用的工具

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

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

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

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

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

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

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

面试题:从输入网址到页面显示的全过程(超详细解析)

面试题:从输入网址到页面显示的全过程 01. 要看到一个网页,我们需要什么? 我们现在经常使用的网页其实是由三种语言书写而来的:HTML、Css 和 JavaScript,它们分别负责网页的结构、网页的样式和网页的交互功能&#xf…

【C#语言入门】17. 事件详解(上)

【C#语言入门】17. 事件详解(上) 一、初步了解事件 定义:单词Event,译为“事件” 通顺的解释就是**“能够发生的什么事情”**,例如,“苹果”不能发生,但是“公司上市”这件事能发生。在C#中事…

基于springboot+vue实现校企合作项目管理系统项目【项目源码+论文说明】

基于springboot实现校企合作项目管理系统演示 摘要 这是一个计算机的时代,在计算机应用非常广泛的时代中,用计算机来完成对信息的处理有着非常好的使用效果。特别是针对学校而言亦是如此,通过在学校中的信息化建设,能够很好的提升…

1.1计算机系统构成及硬件系统知识(下)

1、定点数与浮点数 定点整数的小数点在最低有效数位之后,也就是00000000.; 因为定点整数只表示整数,不涉及小数; 定点小数的小数点在符号位之后,也就是最高有效数位之前,也就是0.0000000; 浮点…

在线安装QT Creator 版本(自带编译套件)

在线版下载Qt6最新版本 第一步:进入archive目录 第二步:进入online_installers目录 第三步:进入目前在线安装包最新版本4.7 第四步:选择下载windows版本的在线安装包 如果出现以下错误,访问不了,则启动…

2024年GitHub标星2-9K的Android基础——高级面试题合集

3、横竖屏切换时候 Activity 的生命周期 4、AsyncTask 的缺陷和问题,说说他的原理。 5、onSaveInstanceState() 与 onRestoreIntanceState() Android高级面试题 1、你们做了哪些稳定性方面的优化? 2、性能稳定性是怎么做的? 3、业务稳定性如…

使用Docker管理linux容器

文章目录 一、使用docker管理镜像 二、使用docker管理容器 一、使用docker管理镜像 1、安装操作系统,我安装的是centOS 7 ,因为centos7有着非常丰富的软件仓库,方便后续安装与docker相关的软件。 2、初始化设置, 关闭防火墙 关闭…

独家原创!微电网OR综合能源系统用户用电行为分析程序代码!

适用平台:MatlabYalmipCplex 程序以含分布式新能源、储能、微型燃气轮机作为主要电力来源,以照明设备、电视、洗衣机和空调等主要家庭用电设备作为电负荷,仿真了3种典型家庭用户的用电行为。程序算例丰富、注释清晰、干货满满,可…

TCP收发——计算机网络——day02

今天主要讲了TCP的收发 TCP发端步骤 ①socket ②connect ③send ④closeTCP收端步骤 ①socket ②bind ③listen ④accept ⑤recv ⑥clise其函数主要有 connect int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);功能:发送链接请求参数:sockfd:套接…