高考派招生信息爬虫实战:获取学校 id 和城市号

雅思2024-07-05 07:02:22佚名

攀岩只是为了好玩网校头条,只是为了学习,没有其他目的

这几天都在高考派上查招生信息,走了很多弯路,也学到了很多东西。

以下是涉及的模块

import requests
from fake_useragent import UserAgent
from multiprocessing import Process
import urllib.request as r
import threading
import re
import time
import random

首先我们来看看需要爬取的网页

不同的学校对应着文理科,以及全国各省确定招生计划。点击搜索,可以得到一个请求页面,这个页面是通过ajax实现的。

发送的数据如下

通过多个页面对比可以知道,id指的是学校id,type 1或者2指的是文科或者理科,city自然就是城市编号,state 1或者0表示是否有招生计划。

所以我们需要先把所有的ID和城市获取出来并写入txt,这个是在首页用正则表达式实现的高考派,具体代码很简单,获取学校的文本文件和对应的网址、省份和身份证号码:

共有 3054 所大学

和 31 个省

然后向各个大学的URL发送请求,获取JSON数据。

#获取id列表
def getSchoolIdList():
#...
#获取city列表
def getCityIdList():
# ...
#获取请求数据列表
def getDataList(schoolId,cityId):
    dataList = []
    for sid in schoolId:
        for cid in cityId:
            for type in [1, 2]:
                dataList.append('id={}&type={}&city={}&state=1'.format(sid, type, cid))
    return dataList

也就是说一共有=条数据需要获取

而且考虑到数据量很大,为了防止被拦截,必须设置代理和不同的消息头

我是通过向代理网站发送请求来获取代理IP的(19元一天高考派,不过可以无限量),另外如果字典里是‘http’,就会报错,还有‘http’和‘http’都报错,不知道为什么,干脆从代理网站获取https的IP吧

#获取代理ip列表,其中有15个ip
def getProxyList():
    url1 = 'http://api3.xiguadaili.com/ip/?tid=558070598680507&num=15&delay=1&category=2&protocol=https'
    res = requests.get(url1)
    proxyList &

相关推荐

猜你喜欢

大家正在看

换一换