python 爬虫 爬取高考录取分数线 信息

这篇具有很好参考价值的文章主要介绍了python 爬虫 爬取高考录取分数线 信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原文链接: python 爬虫 爬取高考录取分数线 信息

上一篇: axios 原生上传xlsx文件

下一篇: pandas 表格 数据补全空值

网页

https://gkcx.eol.cn/school/search

完整资料一个多g

高校信息爬取接口

import requests_html
import json

sess = requests_html.HTMLSession()
url = "https://api.eol.cn/gkcx/api/"
data = {
    "access_token": "",
    "admissions": "",
    "central": "",
    "department": "",
    "dual_class": "",
    "f211": "",
    "f985": "",
    "is_dual_class": "",
    "keyword": "",
    "page": 8, "province_id": "",
    "request_type": 1,
    "school_type": "",
    "size": 20,
    "sort": "view_total",
    "type": "",
    "uri": "apigkcx/api/school/hotlists"
}
res = sess.post(url, data)
js = res.json()
print(type(js))  # <class 'dict'>

with open('./school.json', mode='w+') as f:
    f.write(js['data']['item'])

省份信息,在需要选择省份的下拉框页面中查看请求

def get_province():
    url = "https://static-data.eol.cn/www/config/detial/1.json"
    res = sess.get(url)
    js = res.json()
    print(js)
    with open('./province.json', mode='w+') as f:
        json.dump(js, f)

接口有最大数据传输量的限制,需要按照分页格式先请求所有,然后合并学校信息,并输出为xlsx文件

完整代码

import requests_html
import json
import glob
import pandas as pd

sess = requests_html.HTMLSession()


def get_school():
    url = "https://api.eol.cn/gkcx/api/"
    for pageNo in range(300):
        data = {
            "access_token": "",
            "admissions": "",
            "central": "",
            "department": "",
            "dual_class": "",
            "f211": "",
            "f985": "",
            "is_dual_class": "",
            "keyword": "",
            "page": pageNo,
            "province_id": "",
            "request_type": 1,
            "school_type": "",
            "size": 20,
            "sort": "view_total",
            "type": "",
            "uri": "apigkcx/api/school/hotlists"
        }
        res = sess.post(url, data)
        js = res.json()
        print(type(js['data']['item']))  # <class 'dict'>
        with open(f'./school/school_{pageNo}.json', mode='w+') as f:
            json.dump(js['data']['item'], f)


def get_province():
    url = "https://static-data.eol.cn/www/config/detial/1.json"
    res = sess.get(url)
    js = res.json()
    print(js)
    with open('./province.json', mode='w+') as f:
        json.dump(js, f)


def show_province():
    with open('./province.json', ) as f:
        data = json.load(f)
    print(data)


def merge_school():
    all_school = []
    for path in glob.glob('./school/*'):
        with open(path) as f:
            data = json.load(f)
            all_school += data

    print(len(all_school)) # 2855
    all_school = json.dumps(all_school)
    with open('./json/school.json', mode='w+') as f:
        json.dump(all_school, f)
    df = pd.read_json(all_school)
    df.to_excel('./school.xlsx')


if __name__ == '__main__':
    # get_school()
    # get_province()
    merge_school()

查询每个学校每年在各个省份的录取成绩 文章来源地址https://www.toymoban.com/news/detail-408254.html

import json
import requests
import os
from multiprocessing import Pool
import time
import random

years = range(2014, 2018 + 1)  # 年份
pages = range(2)  # 数目,3页基本够用了
types = [
    {
        'code': 1,
        'name': '理科'
    },
    {
        'code': 2,
        'name': '文科'
    }
]  # 文理科
with open('./json/province.json') as f:
    provinces = json.load(f)
with open('./json/school.json') as f:
    schools = json.load(f)

headers = {
    'Accept': 'application/json, text/plain, */*',
    'Content-Type': 'application/json;charset=UTF-8',
    'Origin': 'https://gkcx.eol.cn',
    'Referer': 'https://gkcx.eol.cn/school/332',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
}


def get_score(school):
    path = f"./score/{school['name']}.json"
    if os.path.exists(path):
        print(school['name'], 'exists')
        return
    sess = requests.Session()
    url = "https://api.eol.cn/gkcx/api/"
    score = {}
    for type in types:
        score[type['name']] = {}
        for province in provinces:
            score[type['name']][province['name']] = {}
            for year in years:
                all_data = []
                try:
                    for page in pages:
                        data = {
                            "access_token": "",
                            "local_province_id": province['code'],  # 学生省份
                            "local_type_id": type['code'],  # 文理科 理科1 文科2
                            "page": page,  # 页号
                            "school_id": school['school_id'],  # 学校id
                            "size": 20,
                            "uri": "apidata/api/gk/score/special",
                            "year": year  # 年份
                        }
                        # time.sleep(random.random() * 0.1)
                        js = sess.post(url, data, headers=headers).json()
                        all_data += js['data']['item']
                except Exception as e:
                    print(e)
                score[type['name']][province['name']][str(year)] = all_data

    with open(path, mode='w+') as f:
        json.dump(score, f)
    print(school['name'], 'finished')


def start():
    for school in schools[:10]:
        print(school['name'], 'start')
        get_score(school)


def thread_start():
    #  线程数目太多会被访问拒绝
    p = Pool(4)
    for school in schools:
        print(school['name'], 'start')
        p.apply_async(get_score, args=(school,))
    p.close()  # 关闭进程池,不再接受新的任务
    p.join()  # 阻塞主进程,知道进程池中的进程完成任务


def main():
    # start()
    thread_start()


if __name__ == '__main__':
    main()

到了这里,关于python 爬虫 爬取高考录取分数线 信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2022 CSP-J CSP-S 第1轮 初赛 第2轮 复赛 分数线 晋级率 获奖名单 汇总 整体成绩分析解读

    2022年CSP-JS初赛北京及全国各省市分数线汇总! 2022年CSP-JS初赛北京及全国各省市分数线汇总! - 知乎 CSP-J/S 2022第一轮认证评级全国分数线各省分数线和晋级率 CSP-J/S 2022第一轮认证评级全国分数线各省分数线和晋级率-童程童美少儿编程招生网 2022 CSP-S1 提高组 第1轮 初赛 视频

    2024年02月12日
    浏览(19)
  • 录取分数爆降102分,只招一个人也敢报考的狠人!

    本期为大家整理热门院校-“华南理工大学”的择校分析,这个择校分析专题会为大家结合:初试复试占比、复试录取规则(是否公平)、往年录取录取名单、招生人数、分数线、专业课难度等进行分析。希望能够帮到大家! –所有数据来源于研招网,如有错误,欢迎指正,谢

    2024年02月04日
    浏览(12)
  • 六个步骤学会使用Python爬虫爬取数据(爬虫爬取微博实战)

    用python的爬虫爬取数据真的很简单,只要掌握这六步就好,也不复杂。以前还以为爬虫很难,结果一上手,从初学到把东西爬下来,一个小时都不到就解决了。 第一步:安装requests库和BeautifulSoup库 在程序中两个库的书写是这样的: 由于我使用的是pycharm进行的python编程。所以

    2024年02月08日
    浏览(15)
  • 【python爬虫】—图片爬取

    从https://pic.netbian.com/4kfengjing/网站爬取图片,并保存 获取待爬取网页 获取所有图片,并下载 爬取结果展示

    2024年02月10日
    浏览(13)
  • Python爬虫 爬取图片

    在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。 我们最常规的做法就是通过鼠标右键,选择另存为。但有些图片鼠标右键的时候并没有另存为选项,还有办法就通过就是通过

    2024年02月13日
    浏览(11)
  • 【爬虫】python爬虫爬取网站页面(基础讲解)

    👉博__主👈:米码收割机 👉技__能👈:C++/Python语言 👉公众号👈:测试开发自动化【获取源码+商业合作】 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 1. 导入必要的库 requests 库用于发送HTTP请

    2024年02月08日
    浏览(13)
  • 【python爬虫】闲鱼爬虫,可以爬取商品

    目录 前言 一、介绍 二、爬虫流程 1. 确定并构造URL 2. 发送网络请求 3. 解析HTML并提取数据 4. 保存数据 三、使用代理IP 四、完整代码 五、总结 前言 闲鱼是一个很受欢迎的二手交易平台,但是由于没有开放API,我们需要使用爬虫来获取数据。本文将介绍如何使用Python爬

    2024年02月08日
    浏览(13)
  • 【Python 爬虫脚本】Python爬取歌曲

    目标:爬取酷狗音乐 右键--检查 进入网络,查看所有请求,事先先清空历史数据 点击刷新,重新进入页面 找到index请求,在预览中可以看到  play_backup_url:\\\"https://webfs.tx.kugou.com/202308251554/97c6fef48119300dd2a238ee8025c521/v2/409ebc56ea4ba76e58d8c89af8d03b6a/KGTX/CLTX001/409ebc56ea4ba76e58d8c89af8d03b6a.

    2024年01月17日
    浏览(11)
  • python爬虫 爬取网页图片

    目录 一:爬虫基础 二:安装html解析的python工具 三:爬取网页图片 爬虫基本过程: 1.请求标头 headers 2.创建一个会话 requests.Session 3.确定请求的路径 4.根据路径获取网页资源(HTML文件) 5.解析html文件BeautifulSoup div a 标签 获取对应的图片 6.建立网络连接进行下载  创建出下载的图

    2024年02月02日
    浏览(19)
  • Python爬虫:爬取各种视频

    一、先看效果: 包括短视频 中视频 长视频等。 短视频(2到3分钟时间): 中视频(10分钟左右时间): 长视频(20分钟左右时间): 二、爬取规则: 2.1:短视频爬取: 爬取该网页视频: 方法一:F12键 找到 network 然后media,数据包中的url,复制粘贴看是否能打开该视频,如果能打

    2024年04月13日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包