网页

完整资料一个多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)) #

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'])) #

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()

查询每个学校每年在各个省份的录取成绩

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爬取高考各高校分数线查询_python 爬虫 爬取高考录取分数线 信息相关推荐

  1. python爬取豆瓣电影top250的代码_Python爬虫——爬取豆瓣电影Top250代码实例

    利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Excel表中 ...

  2. python爬取历史天气查询_python爬虫爬取各个城市历史天气及数据可视化

    import asyncio import aiohttp from lxml import etree import re from collections import namedtuple Ar ...

  3. python爬取js加载的数据_Python爬虫:爬取JS加载数据的网页

    比如简书: Paste_Image.png 我们来写个程序,爬取简书网站随便一个作者的所有文章,再对其所有文章进行分词统计 程序运行统计的结果见文章: 我统计了彭小六简书360篇文章中使用的词语 需要 ...

  4. python爬取微博热搜写入数据库_python爬虫爬取微博热搜

    [实例简介] [实例截图] [核心代码] import requests                #数据抓取库 from lxml import etree         #数据解析库 imp ...

  5. python爬取豆瓣电影top250的名字_Python爬虫-爬取豆瓣电影Top250

    小菜鸟一枚,这是第五个爬虫吧,记录一下 #!usr/bin/env python3 # -*- coding:utf-8-*- import requests from bs4 import Beau ...

  6. python编写的软件可以申请专利吗_Python爬虫 | 爬取同一公司用不同名字申请专利的那些Assignees...

    公司在申请专利时,因为各种原因会使用不同的名字作为申请人(Assignees),那当我们要研究这个公司的专利时,如果不知道这个公司用过什么名字,可能就会错过很多专利数据. 正好学长做过相关的研究,写了 ...

  7. 2021重庆市实验中学高考成绩查询,重庆实验中学2021年录取分数线

    家长和同学们在选择报考学校的时候,一定要先了解学校的招生政策和招生要求,学校录分数线是多少,提前了解学校录取分数线对同学们来说是非常重要的,家长和学生们可以参考学校往年的录取分数线,预测自己能不能考生 ...

  8. 建文高考成绩查询2021,巴中市建文中学录取分数线是多少,2021年分数要求

    巴中市建文中学的录取分数线预计2021年6月份公布.斗争的生活使你干练,苦闷的煎熬使你醇化:这是时代要造成青年为能担负历史使命的两件法宝.一个人做事要像一堵墙,外人永远也窥探不到墙里的秘密:两个人做事 ...

  9. 2021年峰峰春晖中学高考成绩查询,峰峰春晖中学2019年录取分数线

    技校网专门为您推荐的类似问题答案 问题1: 河北丰润车轴山中学2011年录取分数线 按学校名次录取 问题2: 广州美术中学2011年中考录取分数线 提前批优先线为693分,比往年略高.公费线640分, ...

  10. 河南城建学院计算机分数,河南城建学院录取分数线2021是多少分(附历年录取分数线)...

    河南城建学院录取分数线2020是多少分,各专业录取分数线是多少,是每个填报河南城建学院的考生最关注的问题,随着各省高考录取批次相继公布,考生也开始关心是否被录取,本站小编整理相关信息供参考,仅供参考. ...

最新文章

  1. 分段函数是不是一定初等函数_查漏补缺问题64:一个含多参数分段函数的连续性与可导性讨论...
  2. 如何启用 SAP Spartacus Guest checkout
  3. win10电脑安装android,5步教你如何在Win10 PC上安装Android 10
  4. iphone最新款手机_苹果罕见“跌停”!遭遇6年来最惨淡一夜,2019年全球股市第一颗雷引爆...
  5. 如何在自己的程序里执行/终止一个外部程序?
  6. 【Shell】数某关键字在文件中出现次数
  7. moodle重定向_用最简单的pythonGUI库PysimpleGUI 设计一款中丹学院Moodle课件下载器。...
  8. linux正则表达式大全,正则表达式,正则表达式语法大全
  9. 即时通讯软件(即聊天软件)代表软件列表
  10. 《沉默的大多数》 - 王小波
  11. 【转帖】 嵌入式路线狂人计划--------个人认为。
  12. Kubernetes(k8s)的Pod资源清单spec.containers属性详细讲解
  13. 利用微搭低代码操作微信缓存
  14. unity下载并和vs2019关联的步骤
  15. struts1 使用poi组件 读取excel文件,创建excel ,输出excel文件
  16. 【Python学习】transpose函数
  17. HTML部分基础语法
  18. 香港汇丰银行个人开户资料及流程
  19. 服务器电源显示灯图标,服务器主机指示灯图标含义
  20. salesforce 定时任务遇到的坑

热门文章

  1. 当航运遇上区块链: 有人在砸钱,有人想上车
  2. (转)高盛:老牌投行新生意,华尔街“谷歌”如何炼成?
  3. 机器学习笔记(十九):逻辑回归
  4. 【手写数字识别】基于matlab GUI BP神经网络手写数字识别(手写+带面板)【含Matlab源码 1196期】
  5. Cannot read property 'style' of null 问题
  6. Oracle的sql条件带有,oraclesql语句的if
  7. int main(int argc,char *argv[])该函数中int argc和argv[]两个参数的理解你懂多少?
  8. html中如何禁用,如何禁用HTML链接
  9. ci github 通知_GitHub 欢迎一切 CI 工具
  10. sql与mysql数据对接_SQL Server 对接MySQL 数据库