Python爬取——目前考研招生学校的专业信息及考试范围

1.需要爬取的信息:全部的省份,全部的学校以及其全部专业的院系所和研究方向,以及招生人数和考试科目。
2.使用的库:from bs4 import BeautifulSoup

import requests

import re

from openpyxl import Workbook

3.期望结果:

简介:

        该代码是逐步选择所在省市和学科类别,爬取到了招生单位中每个学校的链接。再通过该学校链接获得其考试范围的链接,最后爬取考试范围的链接中包含的我们所需要的信息,信息包括:院系所、专业、研究方向、拟招人数以及考试范围

查找方法:正则表达式

findSchool = re.compile(r'<td class="zsml-summary">(.*)</td>')  # 通过正则表达式查找学校和专业信息
findLink1 = re.compile(r'<a href="(.*?)" target="_blank">')   #寻找指定学科类别的学校链接
findLink2 = re.compile(r'<a href="(.*?)" target="_blank">')  # 通过正则表达式查找该学校全部的考试范围链接
findsubject = re.compile(r'<td>(.*?)<span class="sub-msg">', re.S)   #通过正则表达式查找考试科目信息

第一步:先得到招生单位中每个学校的链接

各个省市编号由for进行循环



def Firstlink(furl,yjxkdm):
    data = []
    SSMD = ['11', '12', '13', '14', '15', '21', '22', '23', '31', '32', '33', '34', '35', '36', '37', '41', '42', '43',
            '44', '45', '46', '50', '51', '52', '53', '54', '61', '62', '63', '64','65']
    for ssdm in SSMD:
        form_data = {'ssdm': ssdm, 'dwmc': '', 'mldm': '', 'mlmc': '', 'yjxkdm': yjxkdm, 'zymc': '', 'xxfs': ''}
        head = {
                "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
                "Accept - Language": "zh - CN, zh;q = 0.9",
                "Cache - Control": "max - age = 0",
                "Connection": "keep - alive",
                "Content - Length": "72"
            }
        html = requests.post(furl, headers=head, data=form_data,verify=False)
        soup = BeautifulSoup(html.text, 'lxml')
        for item in soup.find_all('table', class_="ch-table"):
            item = str(item)
            link = re.findall(findLink1, item)  #寻找指定学科类别的学校链接
            link = [item.replace("&amp;", "&") for item in link]
            data.extend(link)
        print("正在爬取第%d个学科类别%d市%d专业" % (int(itt)+1,int(ssdm), int(yjxkdm)))
    return data

第二步:获得其考试范围的链接

将全部的考试链接用data.extend的存放再link中

def Secondlink(data):
    data2 = [];num = 0
    for item in data:
        surl = baseurl+item
        shtml = askURL(surl)
        soup = BeautifulSoup(shtml.text, 'lxml')
        for item in soup.find_all('table', class_="ch-table more-content"):
            item = str(item)
            link = re.findall(findLink2, item)  # 通过正则表达式查找该学校全部的考试范围链接
            num=num+1
            print("正在储存第%d个学科类别的第%d个学校全部的考试范围链接" % (itt+1,num))
            data2.extend(link)
    return data2

第三步:爬取考试范围的链接中包含的我们所需要的信息

将全部的考试范围用data.extend的存放再plist中

def Finddata(data2):
    data3 = [];subject1 = [];plist = [];num = 0
    for item in data2:
        turl = baseurl + item
        thtml = askURL(turl)
        soup = BeautifulSoup(thtml.text, 'lxml')
        for item in soup.find_all('table', class_="zsml-condition"):
            item = str(item)
            title = re.findall(findSchool, item)  #通过正则表达式查找学校和专业信息
            data3.append(title)
        for item in soup.find_all('tbody', class_="zsml-res-items"):
            item = str(item)
            subject = re.findall(findsubject, item) # 通过正则表达式查找考试科目信息
            for i in subject:
                str(i)
                subject1.append(i.strip())
            plist.extend(subject1)
            subject1=[]
        num=num+1
        print("正在储存第%d个学科类别的第%d个考试范围" % (itt+1,num))
        data3.append(plist)
        plist = []
    return data3

最后一步:保存我们的得到的全部信息

将全部的信息用from openpyxl import Workbook方式再不同的地址中逐个保存,使程序中途被迫停止也可以将前面储存的以xlsx的文件格式保存在当前文件夹

def savedata(data3,savepath):
    k = 0
    wb = Workbook()
    ws = wb.create_sheet('研究生')
    ws.append(['学校和专业信息', '考试科目信息'])
    lendata4 = len(data3)/2 + 1
    for i in range(1, int(lendata4)):
        for j in range(1, 3):
            data4 = str(data3[k])
            ws.cell(i + 1, j).value=data4
            k = k + 1
            print("正在保存第%d个学科类别的第%d个数据" % (itt+1,k))
    wb.save(savepath)  # 保存


附上源码:Python爬取——目前考研招生学校的专业信息及考试范围(研招网)-数据挖掘文档类资源-CSDN下载压缩包内包含已爬取成功的全部信息和完整代码,导入后即可使用已爬取的信息:全部的省份,全部的学校以及更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/MAITTA/85487033

  • 6
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清梦Cryo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值