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

爬取全国高校数据

网站:

运行下面代码得到网站.

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!结束!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Win10专业版如何重装-Win10专业版重装系统教程

Win10专业版如何重装?Win10专业版系统能够用户带来丰富的功能服务,用户操作需求轻松得到满足。如果我们在Win10专业版电脑中,遇到了系统问题,这时候可以考虑重新安装Win10专业版系统,从而解决系统出现的问题。下面小编…

品牌被侵权 有效治理下架的方法

当一条未授权的低价链接在平台上出现时,会对其他店铺产品影响,影响授权销量,同时影响了品牌对授权经销商的掌控力,也会影响未授权店铺,使其他未授权跟价、低价,所以品牌治理低价链接,不仅是使经…

ImportError: cannot import name ‘url_quote‘ from...

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是全栈工…

23111708[含文档+PPT+源码等]计算机毕业设计基于javaweb的旅游网站前台与后台旅景点

文章目录 **论文截图:****实现:****代码片段:** 编程技术交流、源码分享、模板分享、网课教程 🐧裙:776871563 下面是系统运行起来后的部分截图: 论文截图: 实现: 代码片段&#xf…

AE (1)_软件、硬件、驱动控制

#灵感# AE是个值得推敲再推敲的模块,有意思。 目录 相关的硬件-光圈: 相关的软件-曝光-ISO: ISP中的sensor AE 组成: sensor AE的流程及控制: 相关的硬件-光圈: 光圈(F-Number&#xff0…

OpenAI chatGPT又又又出bug!强制开通plus

自奥特曼宣布暂时停止plus用户的注册后,plus账号的价格水涨船高! 现在教大家如何强制开通plus,体验gpt4等各种功能! 如图: 打开官网进入后,按F12打开控制台,在控制台上输入代码 即可强制跳转至付…

实时人眼追踪、内置3D引擎,联想ThinkVision裸眼3D显示器创新四大应用场景

11月17日,在以“因思而变 智领未来”为主题的Think Centre和ThinkVision 20周年纪念活动上,联想正式发布了业内首款2D/3D 可切换裸眼3D显示器——联想ThinkVision 27 3D。该产品首次将裸眼2D、3D可切换技术应用在显示器领域,并拓展了3D技术多…

自学人工智能编程难吗?

在科技飞速发展的时代,人工智能编程已经成为了一个热门的技能。随着诸如机器学习、深度学习等技术的广泛应用,掌握人工智能编程已经成为了一种趋势。那么,自学人工智能编程难吗?答案是:难,但值得&#xff0…

Shopee活动名称怎么填写好?Shopee活动名称设置注意事项——站斧浏览器

虾皮活动名称的设定不仅是一个技巧性的问题,更是一门艺术。通过合理的活动名称设计,可以吸引更多的消费者参与活动,增加活动的曝光度和影响力。 shopee活动名称怎么填写好 简洁明了:活动名称应该尽量简洁明了,能够一…

虾皮产品标题生成器:为您的商品打造吸引眼球的标题

在电商平台上,一个引人注目的商品标题是吸引潜在买家点击进入您的产品页面的第一步。然而,很多商家在创建商品标题时遇到困难,不知道如何吸引更多的目标受众。幸运的是,现在有一个名为知虾工具的强大工具,可以帮助商家…

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

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

Elasticsearch备份与还原:使用elasticdump

在数据管理的世界里,备份和还原数据是重中之重的日常工作,特别是对于Elasticsearch这样的强大而复杂的搜索引擎。备份不仅可以用于灾难恢复,还可以在数据迁移、测试或者升级等场景中发挥重要作用。 在本博客中,我们将会重点介绍如…

lvgl 画好一个圆弧arc 要了解的相关知识

目录 一、概述 1. css盒子模型示意图2. 圆弧的理解对象3. lvgl 版本 二、功能细节 1. 圆弧的角度 1.1 圆弧的0度在哪里?1.2 设置圆弧角度的1.3 设置圆弧的背景角度 2. 圆弧的半径3. 圆弧的圆角 3.1 设置圆弧的圆角 效果如下: 4. 圆弧的宽度 4.1圆弧主体…

微服务学习 | Eureka注册中心

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

如何选择合适的数据库管理工具?Navicat Or DBeaver

写在前面 在阅读本文之前,糖糖给大家准备了Navicat和DBeaver安装包,在公众号内回复“Navicat”或“DBeaver”或"数据库管理工具"来下载。 引言 对于测试而言,在实际工作中往往会用到数据库,那么选择使用哪种类型的数…

基于SSM的大学餐厅菜品推荐和点评系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

【华为OD机试高分必刷题目】神奇的卡片(C++等差数列实现)

🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,高质量解题代码,详细代码讲解,助你深入学习,高分通过! 文章目录 【华为OD机试高分必刷题目】神奇的卡片(C等差数列实现&a…

虾皮插件能做数据分析的-知虾数据分析插件Shopee大数据分析平台

在如今的电商行业中,数据分析已经成为了一项至关重要的任务。通过对大量数据的收集和分析,企业可以更好地了解市场趋势、了解竞争对手、优化产品和店铺运营等。然而,要想做好数据分析,一个好用的工具是必不可少的。 虾皮插件——知…

ke11介绍本地,会话存储

代码顺序: 1.设置input,捕获input如果有多个用属性选择符例如 input[typefile]点击事件.向我们的本地存储设置键值对 2.在点击事件外面设置本地存储表示初始化的值.点击上面的事件才能修改我们想修改的值 会话(session)浏览a数据可以写到本地硬盘,关闭页面数据就没了 本地(…

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…