更新時間: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 &