一、说明
由于国家线快出了,故写了一份爬取小木虫网站调剂信息的爬虫代码,方便信息查看。此代码仅用于学习,不作为任何商业用途。
本代码可爬取小木虫任何年份,任何专业的调剂信息。
二、代码
#!~/opt/anaconda3/bin/python# -*- coding: utf-8 -*-import requestsfrom bs4 import BeautifulSoupimport reimport pandas as pdimport os# 获取网页def getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ''# 获取数据def getDataInfo(infoList, url, pre_params, *args):params = []count = -1for i in args:count += 1par_ = pre_params[count] + iparams.append(par_)# 根据参数获取访问链接for param in params:url += param + '&'# print(url)html = getHTMLText(url)soup = BeautifulSoup(html, 'html.parser')# 获取页码数,并处理空页异常try:pages_tag = soup.find_all('td', 'header')[1].stringpages = int(re.split('/', pages_tag)[1])except:pages = 0# 判读是否只有一页if pages == 0:pages += 1for i in range(pages): # 遍历每一页page = i + 1url = url + '&page=' + str(page)html = getHTMLText(url)soup = BeautifulSoup(html, 'html.parser')tbody = soup.find_all('tbody', 'forum_body_manage')[0]trs = tbody.find_all('tr') # 每个学校的全部信息被tr标签包围for tr in trs: # 遍历每一个学校dicts = {}href = tr.find_all('a')[0].get('href') # 定位至a标签,提取href的属性值tds = tr.find_all('td') # 每个学校的各个信息包含在td标签内lens = len(tds)for i in range(lens): # 将各个学校信息添加至字典中if i == 0:title = tds[i].find('a').stringdicts[i] = titleelse:dicts[i] = tds[i].stringdicts['href'] = hrefprint(dicts)infoList.append(dicts) # 每一个学校的信息,添加至列表def outputCSV(infoList, path):data = pd.DataFrame(infoList)# with open(r'./info.csv','w+',encoding='utf-8') as f:try:data.columns = ['标题', '学校', '门类/专业', '招生人数', '发布时间', '链接']except:print('没有调剂信息...')try:if not os.path.exists(path):data.to_csv(path)print('保存成功')else:print('路径存在')except:print('保存失败')# 设定查询参数 -- 专业、年份def parameters(pro_='', pro_1='', pro_2='', year=''):paramsList = [pro_, pro_1, pro_2, year]return paramsListdef main():url = '/bbs/kaoyan.php?'path = './计算机调剂信息(截止4.09).csv'pre_params = ['r1%5B%5D=', 'r2%5B%5D=', 'r3%5B%5D=', 'year=']params = parameters(pro_='08', pro_1='0812',year='')dataList = []getDataInfo(dataList, url, pre_params, *params)outputCSV(dataList, path)main()
三、代码使用参数说明
def parameters(pro_='', pro_1='', pro_2='', year=''):paramsList = [pro_, pro_1, pro_2, year]return paramsListdef main():url = '/bbs/kaoyan.php?'path = './data_info.csv'pre_params = ['r1%5B%5D=', 'r2%5B%5D=', 'r3%5B%5D=', 'year=']params = parameters(pro_='08', pro_1='0801')dataList = []getDataInfo(dataList, url, pre_params, *params)outputCSV(dataList, path)
主体代码已写完,只需要修改main函数中params
中的相关参数,即可使用。
parameters
函数主要用于返回查询的参数。默认参数都为空。如果都不填,则是爬取小木虫全部年份,全部专业的所有调剂信息。
params
具体参数说明:
pro_
所要查询的学科门类。可查询的见下图:
只要查询填写对应学科门类前的数字即可。例如工学,则:pro_='08'
注意:填写的为字符串格式
pro_1
填写的一级学科代码。如下图:
以电子科学与技术为例,同样只需要填写前面代码即可。如:pro_2='0806'
如果这一项不填,则查询的是前一个填写的整个学科门类所有信息。
pro_2
填写的二级学科代码。如图:
例如查询物理电子学调剂信息,同上。则填:pro_2='080901'
。如果不填,则默认查询的是上一级学科下的所有调剂信息。例如,这里就是全部的电子科学与技术的调剂信息。
year
查询年份。例如查询。year=''
。注意:同样是字符串类型。如果不填,则是查询全部的年份。
其中,main()
函数中的保存路径path
,可自定义修改。
**总结:**只需修改params
和保存路径url
即可。
四、效果图
附
小木虫调剂信息网站:/bbs/kaoyan.php
下载源码–并附有截止在4.09前计算机类的调剂信息