手把手教你爬取研招网调剂信息

这篇文章是去年我在博客上写的一篇基础爬虫,利用了简单的Python爬虫来定时收集目标专业的调剂信息,后面也确实帮助我成功上岸。

时间又来到了调剂的时间点,调剂通道已打开,经过热心小伙伴测试,该程序仍能够正常运行,「阅读原文」即可获取源代码。


研究生复试陆续展开,有些学校甚至都已发送拟录取通知,慌张的我昨天刚刚复试完,经历了慌张的考试,慌张地等成绩,慌张地等分数线,慌张地复试,然后我现在在慌张地等待通知。少壮不努力,考研天天愁。真实!

作为守门员要有守门员地自觉,因此我也准备着手调剂,一看,什么科软不收啦,地大关调剂大门啦,这可咋办?

研招网上的调剂信息每20条就要翻页,并且时不时要刷新才能显示信息地bug让人很难受,于是我打算对研招网地调剂信息进行爬取,便于我直接观察,咱们说干就干!

登录研招网,找到指定的调剂信息查询页面,页面链接yz.chsi.com.cn/sytj/tj/

观察页面源代码,清楚的发现具体的信息不在上面,即要爬的对象是动态的,随即打开开发者工具,查询首都师范大学,发现包含在sytjqexxcx.action之中。

点击sytjqexxcx.action,发现该表格信息果然隐藏在json之中


找到了表格所在页面,我们接着来看看该页面的头部信息

Post请求是需要我们提供表单数据的,而该表单数据就在Headers的底部。


发现表单中不包含登录信息,很好,不需要模拟登录了,利用cookie应该可以直接访问,一个action页面有20条数据,继续往下翻,发现网址没有发生改变,但是上图中的start值变为了20,以此类推40,60,80等等。我们仅需要改变表单数据中的start这个参数就可以爬取所有符合条件的数据了。

利用循环,访问页面,将所有信息提取。

通过try..except语句将所有页面访问,利用json库将json转化为list并提取所需要的信息。

for i in range(60):
    if count==0:
        para={
         'pageSize': 20,
         'start': '',
         'orderBy':'' ,
         'mhcx': 1,
         'ssdm2': '',
         'xxfs2': '',
         'dwmc2': '软件',
         'data_type': 'json',
         'agent_from':'wap',
         'pageid': ''
        }
    else:
        para={
         'pageSize': 20,
         'start': count*20,
         'orderBy':'' ,
         'mhcx': 1,
         'ssdm2': '',
         'xxfs2': '',
         'dwmc2': '软件',
         'data_type': 'json',
         'agent_from':'wap',
         'pageid': 'tj_qe_list'
            
            }
    try:
        r=requests.post(url,headers=headers,timeout=30,data=para)
        count+=1
        r.raise_for_status()
        r.encoding='utf-8'
        #print (r.text)
        text=json.loads(r.text)
        content=text['data']['vo_list']['vos']
        #print(content)
    except:
        count+=1

在提取数据的时候发现该信息中的培养方式这一项是用数字1代表全日制,2代表的非全日制,这是一条很关键的信息,利用字典将其转换。

type_dict = {}
type_dict['1'] = "全日制" 
type_dict['2'] = "非全日制"

编写 parse_one_page 函数将从网页上爬取下来的数据按key提取内容,其中对应关系分别为下所示,

def parse_one_page(content):
 
    for item in content:
        yield{
            'school': item['dwmc'],
            'academic': item['yxsmc'],
            'major': item['zymc'],
            'majorID': item['zydm'],
            'schoolID': item['dwdm'],
            'direction':item['yjfxmc'],
            'type':type_dict[str(item['xxfs'])],
            'remain':item['qers'],
            'publish':item['gxsj']
        }
'''
bz: "调剂特殊要求"
dwdm: "单位代码"
dwmc: "单位名称"
fbsjStr: "发布时间"
gxsj: "距离最后更新时间已过xx分钟"
hasit: "考生是否已经填报该志愿 true 或 false"
id: "余额信息ID"
qers: "余额人数"
sfmzyq: "是否满足要求,空为满足要求,非空其内容为不满足要求原因"
ssdm: "省市代码"
xxfs: "学习方式"
yjfxdm: "研究方向代码"
yjfxmc: "研究方向名称"
yxsdm: "院系所代码"
yxsmc: "院系所名称"
zt: "余额状态"
zydm: "专业代码"
zymc: "专业名称"
'''

将提取出来的信息存为csv文件

for item in parse_one_page(content):
        with open('soft.csv', 'a', encoding='utf-8') as csv:
            csv.write(item['schoolID'] + ',' + item['school'] +','+
                       item['academic'] + ',' + item['major'] + ','+ item['majorID']+',' +
                       item['direction']+ ',' + str(item['type'])+','+str(item['remain'])+','+str(item['publish'])+'\n')

这样我们便可以得到所有软件相关的调剂信息数据,如需获取其他专业的调剂信息,改变参数 dwmc2 即可。

爬虫到这就写完了,希望对大家能有所帮助。虽然调剂不是非常好的选择,但如果到了这一步,我还是希望大家能够调整好心态,打好这最后一仗。

加油,奥里给!

——END——

推荐阅读

我用Python在网上复制文字的几种实用方法

石油类专业三个月跨考中科大大数据一志愿上岸

Python&520

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
本科毕业论文,查重率为1.9%,可供大家参考。以python爬虫为背景。Web网页数据挖掘技术在上个世纪80年代早就已经有了初步的研究,随着互联网的迅速开展和大规模数据时代的开展,从“冰山一角”的大量数据中寻找潜在有用的价值信息,数据挖掘技术起到了不可忽视的作用,并成为当下最抢手的钻研热点之一。近年来,该技术快速进步,在工程、医学与科学等多种行业都取得了巨大的成果,其研究价值也随之增高。 随之传统的Web爬虫技术也称为网页机器人或者网页蜘蛛,它是一个对网页数据进行批量的下载的程序。面向传统的Web页面的网络爬虫通常采用的方式是对网页中的超链接关系的对外进行扩展,从而获取整个互联网中页面的信息。基于python的Web爬虫需要对网站中的各个节点之间的进行研究,以便获得整个网站的节点关系图。在网络爬虫开发中,Python是最为普遍运用的设计言语。Python在爬虫设计中具备特殊的优势,其丰厚的开源库和优异的代码封装使得Python爬虫逐步成为了潮流。 本次毕业设计就是在这个背景下进行的,主要采用了python语言设计程序,其丰富的库函数能够找出网页的xml结构,并运用正则表达式对数据进行筛选。 最后将数据存入mysql数据库展开保存,方便后续的操作。本文旨在方便考研调剂挖掘,为考研学子以后咨询信息提供了一条更加便捷和可行的方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值