大家好,今天我們來利用python技術助力高考,獲取網上的本專科專業選考科目要求,用到的Python模塊有:Requests、Json、BeautifulSoup、Pandas ,主要思路是Requests獲取接口請求,利用BeautifulSoup 解析網站的數據,最后利用Pandas庫生成Excel文件。本期我們來獲取江蘇省,歷史類的所有高校的專業選考科目要求實現的結果展示如下:
下面我們就來看看如何實現:
首先打開網址我們按F12檢查網站信息,我們選擇江蘇,首選科目選擇歷史,點擊查詢 瀏覽器 NetWork中就會顯示出調用的URL,和相對應的請求參數
請求參數,經過分析 我們可以得出 江蘇代碼32 ,歷史類代碼08 記住這個在后面查看詳情里面用到。
這時我們通過requests請求就能得到系統返回的json數據。
下面我們來分析詳情的參數:
yxdm為學校編碼,yxmc為學校名稱,xkm為所選科目:08代表歷史
我們利用BeautifulSoup模塊進行解析,最終提取出所有的信息導出到excel。
具體實現代碼如下:
import requests
from urllib.parse import urlencode
from urllib.parse import unquote
import time
import hashlib
import pandas as pd
import random
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
}
?
json_data = {'ssdm': '32',
'sxkm': '08',
'kskms': '',
'xkml': '',
'qttj': '',
'cxtj': ''
}
?
def get_xk(yxdm, ssmc, zswz,dq):list = []url = 'https://xkcx2024/xxdetail.jsp?yxdm={}&yxmc={}&sxkm=08&kskms=&qttj=&cxtj=&xkml='.format(yxdm, ssmc)response = requests.post(url, headers=headers)content = response.textpage = BeautifulSoup(content, 'html.parser') ? for trs in page.findAll('tr'):for tds in trs.findAll('td'):list.append(tds.text)
?chunks = 7chunks_list = [list[i:i + chunks] for i in range(0, len(list), chunks)]lists_with_new_element = [sublist + [yxdm, ssmc, zswz, '歷史',dq] for sublist in chunks_list]print(lists_with_new_element)result.extend(lists_with_new_element)print(yxdm+':'+ssmc+':已下載...'
?
?
if __name__ == '__main__':result=[]title = ['序號', '層次', '專業(類)名稱', '首選科目', '再選科目及選考要求', '所含專業和代碼', '招考方向', '學校代碼', '學校名稱', '學校網址', '首選科目','地區']response = requests.post('https://xkcx2024/GetYxxxServlet', headers=headers,data=json_data)data = response.json()schools=data['yxs']for ?school in schools:random_time = random.uniform(1, 2)time.sleep(random_time)dm=school['yxdm']mc=school['yxmc']wz=school['zswz']dq=school['ssmc']get_xk(dm, mc, wz,dq) ? ? ? ?df = pd.DataFrame(result, columns=title)df.to_excel('歷史類選科.xlsx', index=False)print('done')
?
希望得到大家的關注和點贊,我們下期見。