python3 爬取API数据

爬取高考志愿填报系统(https://gkcx.eol.cn/)的所有学校

(一)、第一种方法

1.分析请求

2.构造url

base_url='https://gkcx.eol.cn/api?'
    data={
        'admissions': "",
        'central': "",
        'department': "",
        'dual_class': "",
        'f211': "",
        'f985': "",
        'is_dual_class': "",
        'keyword': "",
        'page': 1,
        'province_id': "",
        'request_type': 1,
        'school_type': "",
        'size': 20,
        'sort': "view_total",
        'type': "",
        'uri': "gksjk/api/school/hotlists"
    }
    url=base_url+urlencode(data)

结果:

https://gkcx.eol.cn/api?admissions=&central=&department=&dual_class=&f211=&f985=&is_dual_class=&keyword=&page=1&province_id=&request_type=1&school_type=&size=20&sort=view_total&type=&uri=gksjk%2Fapi%2Fschool%2Fhotlists

打开这个url:

 解析json:

3.提取数据:

items=json.get('data').get('item')
    item_list=[]
    for item in items:
        a_dict={}
        a_dict['name']=item.get('name')
        a_dict['type']=item.get('dual_class_name')
        a_dict['origin']=item.get('province_name')
        item_list.append(a_dict)

 结果:

[{'name': '上海理工大学', 'type': '', 'origin': '上海'}, {'name': '上海对外经贸大学', 'type': '', 'origin': '上海'}, {'name': '重庆邮电大学', 'type': '', 'origin': '重庆'}, {'name': '重庆邮电大学移通学院', 'type': '', 'origin': '重庆'}, {'name': '重庆师范大学涉外商贸学院', 'type': '', 'origin': '重庆'}, {'name': '重庆工商大学融智学院', 'type': '', 'origin': '重庆'}, {'name': '黑龙江东方学院', 'type': '', 'origin': '黑龙江'}, {'name': '重庆电子工程职业学院', 'type': '', 'origin': '重庆'}, {'name': '黑龙江外国语学院', 'type': '', 'origin': '黑龙江'}, {'name': '广州工商学院', 'type': '', 'origin': '广东'}, {'name': '河北环境工程学院', 'type': '', 'origin': '河北'}, {'name': '重庆交通职业学院', 'type': '', 'origin': '重庆'}, {'name': '河北旅游职业学院', 'type': '', 'origin': '河北'}, {'name': '承德护理职业学院', 'type': '', 'origin': '河北'}, {'name': '河南师范大学新联学院', 'type': '', 'origin': '河南'}, {'name': '厦门大学', 'type': '双一流', 'origin': '福建'}, {'name': '武汉大学', 'type': '双一流', 'origin': '湖北'}, {'name': '四川大学', 'type': '双一流', 'origin': '四川'}, {'name': '北京大学', 'type': '双一流', 'origin': '北京'}, {'name': '中山大学', 'type': '双一流', 'origin': '广东'}]

4.源码

import requests
from urllib.parse import urlencode

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36",
    'Host': 'gkcx.eol.cn',
    'Referer': 'https://gkcx.eol.cn/school/search'
}

def parse_data(json):
    items=json.get('data').get('item')
    item_list=[]
    for item in items:
        a_dict={}
        a_dict['name']=item.get('name')
        a_dict['type']=item.get('dual_class_name')
        a_dict['origin']=item.get('province_name')
        item_list.append(a_dict)
    return item_list

def gethtml(page):
    base_url='https://gkcx.eol.cn/api?'
    data={
        'admissions': "",
        'central': "",
        'department': "",
        'dual_class': "",
        'f211': "",
        'f985': "",
        'is_dual_class': "",
        'keyword': "",
        'page': page,
        'province_id': "",
        'request_type': 1,
        'school_type': "",
        'size': 20,
        'sort': "view_total",
        'type': "",
        'uri': "gksjk/api/school/hotlists"
    }
    url=base_url+urlencode(data)
    try:
        res=requests.get(url,headers=headers)
        if res.status_code==200:
            data=parse_data(res.json())
            print(data)
    except:
        print('error')

if __name__ == '__main__':
    for i in range(1,144):
        gethtml(i)

(二)、第二种方法:

import requests

def parse_data(json):
    items=json.get('data').get('item')
    item_list=[]
    for item in items:
        a_dict={}
        a_dict['name']=item.get('name')
        a_dict['type']=item.get('dual_class_name')
        a_dict['origin']=item.get('province_name')
        # print(a_dict)
        item_list.append(a_dict)
    print(item_list)
    return item_list

def gethtml(page):
    url='https://gkcx.eol.cn/api'
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
    }
    data={
            'admissions': "",
            'central': "",
            'department': "",
            'dual_class': "",
            'f211': "",
            'f985': "",
            'is_dual_class': "",
            'keyword': "",
            'page': page,
            'province_id': "",
            'request_type': 1,
            'school_type': "",
            'size': 20,
            'sort': "view_total",
            'type': "",
            'uri': "gksjk/api/school/hotlists"
        }
    res=requests.get(url,headers=headers,params=data)
    # print(res.status_code)
    parse_data(res.json())
if __name__ == '__main__':
    for i in range(1,144):
        gethtml(i)

猜你喜欢

转载自blog.csdn.net/Air_RA/article/details/89431910