网络爬虫实战(二):爬取研招网调剂信息

编程入门 行业动态 更新时间:2024-10-26 21:19:18

网络<a href=https://www.elefans.com/category/jswz/34/1770264.html style=爬虫实战(二):爬取研招网调剂信息"/>

网络爬虫实战(二):爬取研招网调剂信息

 

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

 

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

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

        登录研招网,找到指定的调剂信息查询页面,页面链接.html

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

 

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

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

          不是普通的get请求,而是post请求,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+=1r.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')

得到所有软件相关的调剂信息数据

           爬取任务大功告成!19年考研er的真实写照!

            当然我最希望的还是一志愿录取哈哈哈哈哈哈哈哈!

            昨天特意拍的未名湖:

 

 

 

 

 

 

 

 

 

 

更多推荐

网络爬虫实战(二):爬取研招网调剂信息

本文发布于:2024-03-23 18:13:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1741271.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:爬虫   实战   研招   网络   信息

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!