爬取全国高校数据 (高校名称,高校所在地,高校类型,高校性质,高校特色,高校隶属,学校网站)

news2024/12/23 10:43:45

爬取全国高校数据

网站:

运行下面代码得到网站.

import base64
# 解码
website = base64.b64decode('IGh0dHA6Ly9jb2xsZWdlLmdhb2thby5jb20vc2NobGlzdC8='.encode('utf-8'))
print(website)

分析:

我们需要爬取的字段,高校名称,高校所在地,高校类型,高校性质,高校特色,高校隶属,学校网站。

在这里插入图片描述

该网页静态网页,内容就在网页里面,一共107页数据,向每一页发送请求,直接使用Xpath解析的页面数据即可拿到我们想要的数据。在这里插入图片描述

在这里插入图片描述

Xpath提取字段:

在这里插入图片描述

然后点击我们需要提取的字段。

在这里插入图片描述

在这里插入图片描述

//*[@id=“wrapper”]/div[4]/div[1]/dl[1]/dt/strong/a , 然后我们看一下页面结构 ,对Xpath进行修改即可。

在这里插入图片描述

我们不难发现每一个dl标签就是一个学校的所有信息,这个学校的信息的Xpath:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl

在这里插入图片描述

学校名称:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl//strong/@title

在这里插入图片描述

然后我们就可以得到所有的信息,xpath如下:

高校所在地:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl//ul/li[1]/text()

高校类型:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl//ul/li[3]/text()

高校性质:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl//ul/li[5]/text()

高校隶属:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl//ul/li[4]/text()

高校网站:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl//ul/li[6]/text()

是否211:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl//ul/li[2]/span[1]/text()

是否985:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl//ul/li[2]/span[2]/text()

但是有一个问题:如果某个学校是985不是211,则对应的211标签提取就会报错,我们需要异常处理,如果有这个标签怎么样,没有怎么样。

在这里插入图片描述

爬虫代码:
import requests
from lxml import etree
import time
import random
import pandas as pd
from fake_useragent import UserAgent
import os

def crawl(pages, filename, start_page=1, end_page=None):
    # 设置请求头信息
    ua = UserAgent()
    headers = {'User-Agent': ua.random}
    # 获取网页内容
    url_template = 'http://college.gaokao.com/schlist/p{}/'
    data = []
    for page in range(start_page, min(end_page or pages, pages) + 1):
        url_page = url_template.format(page)
        response = requests.get(url_page, headers=headers).text
        # 设置请求时间间隔,防止被反爬虫
        time.sleep(random.uniform(1, 3))
        # 解析网页内容,提取需要的信息
        html = etree.HTML(response)
        rows = html.xpath('//div[@class="cont_l in"]//div[@class="scores_List"]/dl')

        for row in rows:
            name = row.xpath('.//strong/@title')[0]  # 获取的每一个都是列表 只有一个元素

            location = row.xpath('.//ul/li[1]/text()')[0]
            location = location.split(':')[1]  # 将字符串按照冒号分割成两部分,获取第二部分

            school_type = row.xpath('.//ul/li[3]/text()')[0]
            school_type = school_type.split(':')[1]

            school_property = row.xpath('.//ul/li[5]/text()')[0]
            school_property = school_property.split(':')[1]

            school_affiliation = row.xpath('.//ul/li[4]/text()')[0]
            school_affiliation = school_affiliation.split(':')[1]

            website = row.xpath('.//ul/li[6]/text()')[0]
            website = website.split(':')[1]
            # feature_211= row.xpath('.//ul/li[2]/span[1]/text()')[0]
            try:
                feature_211 = row.xpath('.//ul/li[2]/span[1]/text()')[0]
            except IndexError:
                feature_211 = "0"

            try:
                feature_985 = row.xpath('.//ul/li[2]/span[2]/text()')[0]
            except IndexError:
                feature_985 = "0"
            data.append(
                [name, location, school_type, school_property, school_affiliation, website, feature_211, feature_985])
            # ['北京大学', '北京', '综合', '本科', '教育部', 'www.pku.edu.cn', '211', '985']
            # ['中国矿业大学(徐州)', '江苏', '工科', '本科', '教育部', 'http://www.cumt.edu.cn/', '211', '0']

    # 将提取的数据存储到pandas的DataFrame中
    df = pd.DataFrame(data,
                      columns=['学校名称', '高校所在地', '高校类型', '高校性质', '高校隶属', '学校网站', '是否211',
                               '是否985'])
    # 将DataFrame中的数据保存到CSV文件中
    df.to_csv(filename, mode='a', index=False, header=not os.path.exists(filename))
    # 追加写入数据,如果文件不存在则写入表头


if __name__ == '__main__':
    # 第一次爬取前20页,保存到university.csv文件中
    crawl(pages=20, filename='demo.csv')
    # 第二次爬取21到40页,追加到university.csv文件中
    crawl(pages=40, filename='demo.csv', start_page=21, end_page=40)
    # 第三次爬取41到60页,追加到demo.csv文件中
    crawl(pages=60, filename='demo.csv', start_page=41, end_page=60)
    # # 第四次爬取61到80页,追加到university.csv文件中
    crawl(pages=80, filename='demo.csv', start_page=61, end_page=80)
    # # 第五次爬取81到100页,追加到university.csv文件中
    crawl(pages=100, filename='demo.csv', start_page=81, end_page=100)
    # # 第六次爬取101到107页,追加到university.csv文件中
    crawl(pages=107, filename='demo.csv', start_page=101, end_page=107)

在这里插入图片描述

ok!结束!

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

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

相关文章

阎良区公益创投之“小飞机大梦想” 航模DIY主题活动

创造是人类探索迈出的第一步,科学是开启奇妙世界的金钥匙。为进一步提升“未来星”对科技知识的兴趣,培养他们的科学创新精神,11月16日,阎良区社会组织公益创投——“未来星”助力乡村留守儿童成长计划项目在阎良区聚宝小学开展“…

python+pytest接口自动化测试之接口测试基础

一、接口测试的基本信息 1、常用的两种接口:webservice接口和http api接口   webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的,可以用soupui、jmeter等工具进行测试。   http api接口是走http协议,…

Source Insight 安装及使用方法

Source Insight 安装及使用方法 Source Insight 安装及使用方法Source Insight 简介Source Insigth 安装Source Insight 使用方法 Source Insight 安装及使用方法 Source Insight 简介 Source Insight是一款非常流行的程序编辑器和代码浏览器,它主要用于阅读、编写…

C#开发的OpenRA游戏之属性BodyOrientation(6)

C#开发的OpenRA游戏之属性BodyOrientation(6) 在顶层定义里会发现这个属性: ^SpriteActor: BodyOrientation: QuantizeFacingsFromSequence: RenderSprites: SpriteActor是用来定义角色的基本属性,它的第一个属性就是BodyOrientation,这个属性主要用来描述角色的身体的…

Android并发编程与多线程

一、Android线程基础 1.线程和进程 一个进程最少一个线程,进程可以包含多个线程进程在执行过程中拥有独立的内存空间,而线程运行在进程内 2.线程的创建方式 new Thread: 缺点:缺乏统一管理,可能无限制创建线程&…

msvcp140.dll是什么东西以及如何解决其文件缺失问题

当我们在使用Windows电脑的过程中,有时候可能会遇到一些由于系统文件缺失或者损坏而导致的问题。其中,"msvcp140.dll缺失"就是一种常见的错误提示。msvcp140.dll究竟是什么?为什么它会缺失?又该如何解决这个问题呢&…

国民技术Cortex-M0系列单片机IAP升级

考虑到设备部署到现场后有可能需要进行软件升级,之前做过PIC系列单片机的升级,现在想做个国民技术N32G031系列Cortex-M0内核的单片机IAP方案。 因为国民技术系列单片机在很多大程度上都模仿了STM32,所以我想其升级方案极有可能差不多。于是在…

微软宣布计划在 Windows 10 版本 22H2 中引入 AI 助手 Copilot

根据之前的传言,微软宣布计划在 Windows 10 版本 22H2 中引入 AI 助手 Copilot。Copilot 将包含在 Windows 10 家庭版和专业版中。该更新的发布日期尚未公布,但预计将在不久的将来发布。 在一份新闻稿中,微软表示在向 Windows 11 用户提供 Co…

2.Pandas数据预处理

2.1 数据清洗 以titanic数据为例。 df pd.read_csv(titanic.csv) 2.1.1 缺失值 (1)缺失判断 df.isnull() (2)缺失统计 # 列缺失统计 df.isnull().sum(axis0) # 行缺失统计 df.isnull().sum(axis1) # 统计缺失率 df.isnu…

时间序列预测中的4大类8种异常值检测方法(从根源上提高预测精度)

一、本文介绍 本文给大家带来的是时间序列预测中异常值检测,在我们的数据当中有一些异常值(Outliers)是指在数据集中与其他数据点显著不同的数据点。它们可能是一些极端值,与数据集中的大多数数据呈现明显的差异。异常值可能由于…

小红书美妆文案怎么写会火?

美妆护肤品牌如何在众多竞争者中脱颖而出,成为消费者心中的“网红”?答案就在小红书这个国内知名的美妆护肤分享平台上。小红书美妆文案怎么写会火?本文伯乐网络传媒将为你揭秘小红书美妆爆款文案撰写技巧,让你的内容疯狂吸睛&…

Java入门篇 之 多态

本篇碎碎念:个人认为,一切都不是不学习的理由,在如今这个"内卷"的时代,唯有认真学习,掌握知识,才能把握命运 今日份励志文案:你必须拼尽全力,才有资格说运气不好 加油吧,少…

微服务学习 | Eureka注册中心

微服务远程调用 在order-service的OrderApplication中注册RestTemplate 在查询订单信息时,需要同时返回订单用户的信息,但是由于微服务的关系,用户信息需要在用户的微服务中去查询,故需要用到上面的RestTemplate来让订单的这个微…

C语言之break continue详解

C语言之break continue 文章目录 C语言之break continue1. break 和 continue2. while语句中的break和continue2.1break和continue举例 3. for语句中的break和continue3.1break和continue举例 1. break 和 continue 循环中break和continue 在循环语句中,如果我达到…

软件开发和测试

一,敏捷软件开发 二,软件测试

【C++】多线程的学习笔记(3)——白话文版(bushi

前言 好久没有继续写博客了,原因就是去沉淀了一下偷懒了一下 现在在学网络编程,c的多线程也还在学 这一变博客就讲讲c中的Condition Variable库吧 Condition Variable的简介 官方原文解释 翻译就是 条件变量是一个对象,它能够阻止调用…

微电影分销付费短剧小程序开发

微电影系统分销管理付费软件是一款面向微电影制作公司和影视产业的付费软件,它的出现旨在帮助微电影制作公司和影视产业实现分销管理,提高产业的效率和竞争力。本文将介绍微电影系统分销管理付费软件的背景、特点和开发方法。 一、背景 微电影作…

苍穹外卖项目笔记(2)

1 Nginx 反向代理和负载均衡 1.1 概念 【Tips】可以看到前端请求地址和后端接口地址并不匹配,这里涉及到 nginx 反向代理 ,就是将前端发送的动态请求由 nginx 转发到后端服务器 使用 nginx 作反向代理的好处: 提高访问速度(在请…

腾讯云服务器新用户购买优惠多少钱?腾讯云新用户优惠信息来了!

腾讯云服务器新用户购买优惠多少钱?这是每个新手上路的人都会问到的问题。 如果你是一个刚刚接触云服务器的小白用户,不知道该如何选择合适的云服务器,那么你就来对了地方。今天我们将向你介绍腾讯云服务器新用户购买优惠活动,让…

结构体数组保存进二进制文件的简单做法

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 最近面临这样一个需求:以比较节省存储空间的存储一组坐标点到文件,要求程序能够跨平台读写这种文件。思考了一下,比较…