Python实战:使用DrissionPage库爬取高考网大学信息

上一篇文章,我刚入门 DrissionPage 爬虫库,使用这个库爬取了拉钩网关于 Python 的职位信息。

今天再使用 DrissionPage 爬虫库练习一个案例,爬取高考网大学信息。

本次爬取到2885个大学信息,包含大学名称、所在省、市、大学标签信息。

截图如下:

一、页面分析

目标网页是https://www.gaokao.cn/school/search

获取学校名称、所在省市、学婊标签信息。

二、分析思路

使用 DrissionPage 库打开目标网页

使用元素定位方法,定位到包含学校信息的 div

在 div 内继续定位学校名称、所在省市、标签这个信息

将信息存储到列表

翻页,到下一页重复爬取信息

翻完所有页,使用 pandas 将存有所有信息的列表转为 datafram

使用 pandas 将 datafram 保存为 csv 文件或者 excel 文件,或者写入数据库

三、开始写代码

1、打开网页

from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get('https://www.gaokao.cn/school/search')

2、定位信息

# 定位包含学校信息的div
divs = page.eles('tag:div@class=school-search_schoolItem__3q7R2')
# 提取学校信息
for div in divs:# 提取学校名称school = div.ele('.school-search_schoolName__1L7pc')school_name = school.ele('tag:em')# 提取学校城市city = div.ele('.school-search_cityName__3LsWN')if len(city.texts()) == 2:city_level1 = city.texts()[0]city_level2 = city.texts()[1]elif len(city.texts()) == 1:city_level1 = city.texts()[0]city_level2 = ""else:city_level1 = ""city_level2 = ""# 提取学校标签tags = div.ele('.school-search_tags__ZPsHs')spans = tags.eles('tag:span')spans_list = []for span in spans:spans_list.append(span.text)

3、存储信息

# contents列表用来存放所有爬取到的大学信息
contents = []
# 信息存到contents列表
contents.append([school_name.text, city_level1, city_level2, spans_list])
# print(school_name.text, city_level1, city_level2, spans_list)

4、翻页

# 定位下一页,点击下一页
try:next_page = page.ele('. ant-pagination-next')next_page.click()
except:pass

5、滑动页面到底部

# 页面滚动到底部,方便查看爬到第几页
time.sleep(2)
page.scroll.to_bottom()

6、反爬措施

在编写爬虫代码时,要考虑反爬措施。不然就会遇到下面这种情况,服务器直接不给你返回数据了。

我设置的是每爬 1 次都暂停几秒,每爬 50 次暂停 1 分钟。

for i in tqdm(range(1, 146)):# 每爬50页暂停1分钟if i % 50 == 0:get_info()print("暂停1分钟")time.sleep(60)else:get_info()

7、保存数据到csv文件

import pandas as pd
def save_to_csv(data):# 保存到csv文件name = ['school_name', 'city_level1', 'city_level2', 'tags']df = pd.DataFrame(columns=name, data=data)df.to_csv(f"高考网大学信息{len(data)}条.csv", index=False)print("保存完成")

8、使用tqdm库显示进度

from tqdm import tqdm
for i in tqdm(range(1, 146)):# 每爬50页暂停1分钟if i % 50 == 0:get_info()print("暂停1分钟")time.sleep(60)else:get_info()

四、完整代码

通过定义函数,优化代码,整合成一个完整的代码。完整代码如下:

from DrissionPage import ChromiumPage
import pandas as pd
from tqdm import tqdm
import timedef get_info():global i# 页面滚动到底部,方便查看爬到第几页time.sleep(2)page.scroll.to_bottom()# 定位包含学校信息的divdivs = page.eles('tag:div@class=school-search_schoolItem__3q7R2')# 提取学校信息for div in divs:# 提取学校名称school = div.ele('.school-search_schoolName__1L7pc')school_name = school.ele('tag:em')# 提取学校城市city = div.ele('.school-search_cityName__3LsWN')if len(city.texts()) == 2:city_level1 = city.texts()[0]city_level2 = city.texts()[1]elif len(city.texts()) == 1:city_level1 = city.texts()[0]city_level2 = ""else:city_level1 = ""city_level2 = ""# 提取学校标签tags = div.ele('.school-search_tags__ZPsHs')spans = tags.eles('tag:span')spans_list = []for span in spans:spans_list.append(span.text)# 信息存到contents列表contents.append([school_name.text, city_level1, city_level2, spans_list])# print(school_name.text, city.text, spans_list)print("爬取第", i, "页,总计获取到", len(contents), "条大学信息")time.sleep(2)# 定位下一页,点击下一页try:next_page = page.ele('. ant-pagination-next')next_page.click()except:passdef craw():global ifor i in tqdm(range(1, 146)):# 每爬50页暂停1分钟if i % 50 == 0:get_info()print("暂停1分钟")time.sleep(60)else:get_info()def save_to_csv(data):# 保存到csv文件name = ['school_name', 'city_level1', 'city_level2', 'tags']df = pd.DataFrame(columns=name, data=data)df.to_csv(f"高考网大学信息{len(data)}条.csv", index=False)print("保存完成")if __name__ == '__main__':# contents列表用来存放所有爬取到的大学信息contents = []page = ChromiumPage()page.get('https://www.gaokao.cn/school/search')# 声明全局变量ii = 0craw()save_to_csv(contents)

Pycharm 控制台输出如下:

五、数据分析

使用 excel 表自带的数据透视表功能,分析每个省的学校数量。

此外,标签字段含有的信息量也比较丰富,例如其中一个学校的标签是[‘普通本科’, ‘综合类’, ‘公办’, ‘985’, ‘211’, ‘双一流’, ‘强基计划’],也可以对标签字段进行数据分析。本文就不展开了。

六、总结

DrissionPage 库使用起来确实比 Selenium 库方便很多,再也回不去啦。哈哈哈。

本文首发在“程序员coding”公众号,欢迎关注与我一起交流学习。

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

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

相关文章

Galah:一款功能强大的LLM驱动型OpenAI Web蜜罐系统

关于Galah Galah是一款功能强大的Web蜜罐,该工具由LLM大语言模型驱动,基于OpenAI API实现其功能。 很多传统的蜜罐系统会模拟一种包含了大量网络应用程序的网络系统,但这种方法非常繁琐,而且有其固有的局限性。Galah则不同&…

【算法详解 | 二分查找】详解二分查找 \ 折半查找高效搜索算法 | 顺序数组最快搜索算法 | 递归循环解决二分查找问题

二分查找 by.Qin3Yu 本文需要读者掌握 顺序表 的操作基础,完整代码将在文章末尾展示。 顺序表相关操作可以参考我的往期博文: 【C数据结构 | 顺序表速通】使用顺序表完成简单的成绩管理系统.by.Qin3Yu 文中所有代码使用 C 举例,且默认已使用…

聊一聊Tomcat的架构和运行流程,尽量通俗易懂一点

1、Tomcat的架构 这里可以看出 A、一个Tomcat就是一个Server,一个Server下会有多个Service, B、Service只负责封装多个Connector和一个Container(Service本身不是容器,可以看做只是用来包装Connector和Container的壳&#xff0c…

基于Springboot的社区疫情防控平台

末尾获取源码作者介绍:大家好,我是墨韵,本人4年开发经验,专注定制项目开发 更多项目:CSDN主页YAML墨韵 学如逆水行舟,不进则退。学习如赶路,不能慢一步。 一、项目简介 以往的社区疫情防控管理…

交强险投保日期查询接口返回字段说明

API接口是现代互联网应用中重要的组成部分,通过接口的调用可以实现不同系统之间的数据交互和共享。在汽车保险行业中,交强险投保日期查询接口是非常关键的一个接口,本文将详细介绍该接口的返回字段和使用方法。 接口名称:交强险投…

C++入坑基础知识点

当学习了C语言之后,很多的小伙伴都想进一步学习C,但两者有相当一部分的内容都是重叠的,不知道该从哪些方面开始入门C,这篇文章罗列了从C到C必学的入门知识,学完就算是踏入C的大门了。 1. 命名空间 写C的时候&#xff…

找不到d3dcompiler_43.dll,无法继续执行代码的原因分析与解决方法

在运行某些软件或游戏时,可能会遇到系统提示找不到 d3dcompiler_43.dll 文件的情况。这个特定的动态链接库文件 (dll) 是 DirectX 3D 编译器组件的一部分,对于许多现代软件游戏的正常运行起着不可或缺的作用。它的主要功能在于将高级着色语言编写的代码转…

零基础学Python之核心基础知识

1.Python入门简介 (1)什么是Python Life is short, you need Python!人生苦短,我用Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性,相比其他语言…

MySQL数据库入门(概念+使用)

目录 1. 数据库的概念 1.1 数据库的存储介质 1.2 主流数据库 2. MySQL的基本使用 2.1 链接数据库 2.2 服务器管理 2.3 数据库,服务器和表关系 2.4 简单MySQL语句 3. MySQL架构 4. SQL分类 5. 存储引擎 本篇完。 1. 数据库的概念 数据库是按照数据结构来…

【CSS】页面自适应屏幕宽度(响应式布局媒体查询-@media、弹性布局、网格布局和相对单位-vh/em/%)

【CSS】页面自适应屏幕宽度(响应式布局媒体查询-media、弹性布局、网格布局和相对单位-vh/em/%) 一、媒体查询(media)1、媒体类型2、媒体特征3、媒体查询语法4、示例(1)示例1(2)示例…

leetcode热题100.二叉树中的最大路径和

Problem: 124. 二叉树中的最大路径和 文章目录 题目解题方法复杂度Code 题目 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 …

pytorch_car_caring 排坑记录

pytorch_car_caring 排坑记录 任务踩坑回顾简单环境问题代码版本问题症状描述解决方法 cuda问题(异步问题)症状描述解决方法 任务 因为之前那个MPC代码跑出来的效果不理想,看了一天代码,大概看明白了,但要做改进还要有…

C语言指针学习 之 指针是什么

前言 指针是C语言中一个重要概念,也是C语言的一个重要特色,正确而灵活地运用指针可以使程序简洁、紧凑、高效。每一个学习和使用C语言的人都应当深入的学习和掌握指针,也可以说不掌握指针就没有掌握C语言的精华。 一、什么是指针 想弄清楚什…

末世智能毁灭机械

在一个遥远的星球上,AI和机器人在末世中扮演着重要角色。由于一场毁灭性的灾难,人类文明几乎被彻底毁灭,幸存者被迫在废土中艰难求生。为了重建家园,人类和机器人联手,利用智能机械技术开始了重建工作。 然而&#xff…

应用层协议 ——— HTTP协议

应用层协议 ——— HTTP协议 HTTP简介认识URL二、登录信息三、服务器地址四、服务器端口号五、带层次的文件路径六、查询字符串七、片段标识符urlencode和urldecodeHTTP协议格式HTTP请求协议格式HTTP的方法HTTP的状态码HTTP常见的HeaderHTTPS VS HTTP对称加密 VS 非对称加密 HT…

Stable diffusion使用和操作流程

Stable Diffusion是一个文本到图像的潜在扩散模型,由CompVis、Stability AI和LAION的研究人员和工程师创建。它使用来自LAION-5B数据库子集的512x512图像进行训练。使用这个模型,可以生成包括人脸在内的任何图像,因为有开源的预训练模型,所以我们也可以在自己的机器上运行它…

Java工具类库Hutool

这里写目录标题 一、简介二、包含组件三、常用功能演示2、时间工具DateUtil3、数字类工具NumberUtil4、身份认证工具IdcardUtil5、信息脱敏工具DesensitizedUtil6、字段校验工具Validator7、集合工具类CollStreamUtil 一、简介 Hutool是一个小而全的Java工具类库,通…

类与对象

面向对象的程序设计 面对对象的程序 类 类 .... 类 设计程序的过程,就是设计类的过程。 面对对象的程序设计方法: 1.将某类客观事物共同特点(属性)归纳出来,形成一个数据结构(可以用多个变量描述…

定义HarmonyOS IDL接口

HarmonyOS IDL简介 HarmonyOS Interface Definition Language(简称HarmonyOS IDL)是HarmonyOS的接口描述语言。HarmonyOS IDL与其他接口语言类似,通过HarmonyOS IDL定义客户端与服务端均认可的编程接口,可以实现在二者间的跨进程…

SpringBoot+Vue实现各种文件预览(附源码)

👨‍💻作者简介:在笑大学牲 🎟️个人主页:无所谓^_^ ps:点赞是免费的,却可以让写博客的作者开心好几天😎 项目运行效果 前言 在做项目时,文件的上传和预览必不可少。继上…