IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【Python爬虫】图文教学 爬取并汇总至Excel:高考志愿中的所有专业大类、具体专业的各项信息 -> 正文阅读

[Python知识库]【Python爬虫】图文教学 爬取并汇总至Excel:高考志愿中的所有专业大类、具体专业的各项信息

1 本文背景

近期在做一个高考志愿智能决策系统,并想引入专业介绍功能,此系统的用户提供志愿推荐的同时,来普及各种专业的信息,方便用户了解了多数专业的具体情况后,再根据系统的推荐,来得到比较理性并且适合自己的专业选择。

因此,此功能的实现,需要借助高考志愿中所有的专业信息,包括专业大类,具体专业。

2 技术选型

Python + requests库 + xlwt库

3 数据来源

网站:https://gkcx.eol.cn/special

4 网站分析

此网页设计十分规整,一共 25 页,格式统一,这意味着接下来如果此网站的反爬机制不强,我们会很容易地进行数据预分析(如 JSON 数据)并找到数据的规律。
在这里插入图片描述
首先进行网页检查,在 NetWork 一栏中,先找几个文件,看它们的响应是否是对应我们需要的专业信息数据
在这里插入图片描述
是一堆 JS 代码,显然里面不存在网页中的专业信息数据,因此,我们初步推测网页中的数据是异步加载上去的能让用户体验更好,现在大多数网站都是这样,传统网站已经不多了
在这里插入图片描述
我们接下来用 NetWork 中的 Type 字段进行分类,分析 xhr 类型的异步文件就可以了,也是从前几个开始找,这里就不再一一演示了,最终,我在下面红框中的响应文件中找到了线索
在这里插入图片描述
这一看就是我们需要的专业信息了,这里也没有用 Unicode 给汉字编码,直接显示了汉字,那么就更好判断了
在这里插入图片描述
我们用 JSON 工具,来对其中的信息进行更直观的格式化
在这里插入图片描述
OK,看了一下所有的 JSON 数据,正好是一整页网页的专业信息,接下来看一下此 JSON 对应的网络请求
在这里插入图片描述
结果是:
https://api.eol.cn/gkcx/api/?access_token=&keyword=&level1=1&level2=&page=1&signsafe=&size=30&sort=&uri=apidata/api/gkv3/special/lists

接下来再看一下第二页的这个请求是多少:
https://api.eol.cn/gkcx/api/?access_token=&keyword=&level1=1&level2=&page=2&signsafe=&size=30&sort=&uri=apidata/api/gkv3/special/lists

对比,只有page参数的值是变化的,因此,接下来的请求也可以模拟了。

开始写代码就可以了。

5 代码编写

import requests
import xlwt


# 创建一个workbook 设置编码
workbook = xlwt.Workbook(encoding = 'utf-8')
# 创建一个worksheet
worksheet = workbook.add_sheet('MyWorksheet')

# 写入excel

# 先写表头
rowCount = 0
worksheet.write(rowCount, 0, '专业介绍id 主键')
worksheet.write(rowCount, 1, '大类id')
worksheet.write(rowCount, 2, '名称')
worksheet.write(rowCount, 3, '专业代码')
worksheet.write(rowCount, 4, '本科/专科')
worksheet.write(rowCount, 5, '修学年限')
worksheet.write(rowCount, 6, '授予学位')


header = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'}


for i in range(25):
    pageNum = i + 1
    
    print("https://api.eol.cn/gkcx/api/?access_token=&keyword=&level1=1&level2=&page=" + str(pageNum) + "&signsafe=&size=30&sort=&uri=apidata/api/gkv3/special/lists")

    response = requests.get("https://api.eol.cn/gkcx/api/?access_token=&keyword=&level1=1&level2=&page=" + str(pageNum) + "&signsafe=&size=30&sort=&uri=apidata/api/gkv3/special/lists", headers = header)

    response.encoding = 'utf-8'

    # print(response.text)

    info = response.json()

    onePageItems = info['data']['item']

    # print(onePageItems)

    totalResult = []

    keyIndex = 2 #主键下标从2开始
    for item in onePageItems:
        result = []
        result.append(keyIndex)
        result.append(item['level3_name']) # 专业大类
        result.append(item['name']) # 名称
        result.append(item['spcode']) # 专业代码
        result.append(item['level1_name']) # 本科/专科
        result.append(item['limit_year']) # 修学年限
        result.append(item['degree']) # 授予学位
        totalResult.append(result)
        keyIndex += 1

    # print(totalResult)


    # 参数对应 行, 列, 值
    for result in totalResult:
        rowCount += 1
        worksheet.write(rowCount, 0, result[0])
        worksheet.write(rowCount, 1, result[1])
        worksheet.write(rowCount, 2, result[2])
        worksheet.write(rowCount, 3, result[3])
        worksheet.write(rowCount, 4, result[4])
        worksheet.write(rowCount, 5, result[5])
        worksheet.write(rowCount, 6, result[6])


workbook.save('Excel_test.xls')

6 测试结果

成功爬取~
在这里插入图片描述

在这里插入图片描述

附加

另外,关于每个专业的具体描述信息
在这里插入图片描述

我也写了实现,下图为结果,爬取思路相似,不再详细介绍

在这里插入图片描述

在这里插入图片描述

最后,汇总两次爬虫的信息
在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 11:42:01  更:2021-08-16 11:42:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:17:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码