Python爬取学校就业信息网

想法

上了一节就业课程,突然发现要毕业了,从来没有关注过学校的就业信息。突然冒出一个想法,爬一下学校的就业信息网吧,了解一下信息,就写了这个程序。网页结构比较简单。
各位6月份马上要毕业但是考研没过初始线的同学们现在就要开始找工作了,希望这个能帮助你。

准备工作

图片中的职位信息就是要获取的内容。
包括:发布日期、薪资、公司,招聘人数等。
在这里插入图片描述
检查翻页源代码发现源代码中并没有我们想要的内容,可以看出此网页是动态页面。
在这里插入图片描述
既然是动态页面,那么我们换一个思路F12键打开控制台选择Network,然后重新加载第一页网页页面只得到了一条数据,我写程序时候是好几条,写博客就剩一条了。这样挺好,这样更简单。
Network界面
显然这里面有我们想要的数据,接下来开始写程序。
在这里插入图片描述

程序

匹配我们要获取的信息

运用正则表达式在网页信息里获取我们需要的信息

pat_1 = '"positionName":"(.*?)"'#工作
pat_2 = '"positionNames":"(.*?)"'#职业类别
pat_3 = '"placeName":"(.*?)"'#所在地区
pat_4 = '"agentCompanyName":"(.*?)"'#公司名称
pat_5 = '"detailedAddress":"(.*?)"'#工作地址
pat_6 = '"salaryRangeNameStart":"(.*?)"'#最低工资
pat_7 = '"salaryRangeNameEnd":"(.*?)"'#最高工资
pat_8 = '"degreeDemandNameStart":"(.*?)"'#学历
pat_9 = '"recruitmentNum":(.*?),'#招聘人数
pat_10 = '"industryName":"(.*?)"'#行业
pat_11 = '"reivewTime":"(.*?)"'#发布时间
pat_12 ='"qrCodePath":"/QCCode/recruitment_(.*?)_'#id

job = re.compile(pat_1,re.S).findall(data_1)[i]
job_type = re.compile(pat_2,re.S).findall(data_1)[i]
area = re.compile(pat_3, re.S).findall(data_1)[i]
company = re.compile(pat_4, re.S).findall(data_1)[i]
job_address = re.compile(pat_5, re.S).findall(data_1)[i]
min_money = re.compile(pat_6, re.S).findall(data_1)[i]
max_money = re.compile(pat_7, re.S).findall(data_1)[i]
education = re.compile(pat_8, re.S).findall(data_1)[i]
person_num = re.compile(pat_9, re.S).findall(data_1)[i]
profession = re.compile(pat_10, re.S).findall(data_1)[i]
time = re.compile(pat_11, re.S).findall(data_1)[i]
id = re.compile(pat_12, re.S).findall(data_1)[i]
this_url = "http://www.hjiuye.com/page/positionManager/positionInfo?recruitmentInfo.id=" + str (id)

自动翻页代码

在这里插入图片描述
第一页在Network中显示的url是:

http://xiaozhao.hjiuye.com/Site/Position/list?collegeId=1808&keyword=&pageSize=10&pageNumber=1

第二页在Network中显示的url是:

http://xiaozhao.hjiuye.com/Site/Position/list?collegeId=1808&keyword=&pageSize=10&pageNumber=2

从而写出自动翻页代码:

#前十页作为例子,要想得到N页的数据就把11换成N+1
for j in range (1,11):
    url = "http://xiaozhao.hjiuye.com/Site/Position/list?collegeId=1808&keyword=&pageSize=10&pageNumber=" + str(j)
#    print("第" + str(j) + "页------------------")
    res = requests.get(url,headers =hd)
    data_1 = res.text

将获取到的数据保存到文件中

这里很简单,也没什么说的,至于为啥写入方式是a+,这是基础。

with open("工作.doc","a+",encoding="utf_8")as f:
    f.write("发布时间:" + time + "\r\n" + "工作:"+job + "\r\n" + "职位类别:"+job_type + "\r\n" + "所在地区:"+area + "\r\n" + "公司名称:" + company + "\r\n" + "工作地址:" + job_address + "\r\n" + "薪资:" + min_money + "~" + max_money + "\r\n" + "学历:" + education + "以上" + "\r\n" + "招聘人数:招聘" + person_num + "人" + "\r\n" + "行业:" + profession + "\r\n" + this_url  + "\r\n" + "------------------------------" + "\r\n") #/r/n的作用是换行
#        print(job)

源代码

很简单就是应用requests得到网页代码,正则表达式获取信息,正则表达式参看博文:Python正则表达式基础.

#_*_coding:utf-8_*_
#作者:i7366464
#时间:2020/3/22 14:57
#文件:job_web.py   有兴趣的评论区评论可以说是哪个学校哦
#IDE :PyCharm

import requests
import re
hd = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
}

def download(data_1):
    pat_1 = '"positionName":"(.*?)"'#工作
    pat_2 = '"positionNames":"(.*?)"'#职业类别
    pat_3 = '"placeName":"(.*?)"'#所在地区
    pat_4 = '"agentCompanyName":"(.*?)"'#公司名称
    pat_5 = '"detailedAddress":"(.*?)"'#工作地址
    pat_6 = '"salaryRangeNameStart":"(.*?)"'#最低工资
    pat_7 = '"salaryRangeNameEnd":"(.*?)"'#最高工资
    pat_8 = '"degreeDemandNameStart":"(.*?)"'#学历
    pat_9 = '"recruitmentNum":(.*?),'#招聘人数
    pat_10 = '"industryName":"(.*?)"'#行业
    pat_11 = '"reivewTime":"(.*?)"'#发布时间
    pat_12 ='"qrCodePath":"/QCCode/recruitment_(.*?)_'#id
    try:
        for i in range(0,10):
            job = re.compile(pat_1,re.S).findall(data_1)[i]
            job_type = re.compile(pat_2,re.S).findall(data_1)[i]
            area = re.compile(pat_3, re.S).findall(data_1)[i]
            company = re.compile(pat_4, re.S).findall(data_1)[i]
            job_address = re.compile(pat_5, re.S).findall(data_1)[i]
            min_money = re.compile(pat_6, re.S).findall(data_1)[i]
            max_money = re.compile(pat_7, re.S).findall(data_1)[i]
            education = re.compile(pat_8, re.S).findall(data_1)[i]
            person_num = re.compile(pat_9, re.S).findall(data_1)[i]
            profession = re.compile(pat_10, re.S).findall(data_1)[i]
            time = re.compile(pat_11, re.S).findall(data_1)[i]
            id = re.compile(pat_12, re.S).findall(data_1)[i]
            this_url = "http://www.hjiuye.com/page/positionManager/positionInfo?recruitmentInfo.id=" + str (id)
            with open("工作.doc","a+",encoding="utf_8")as f:
                f.write("发布时间:" + time + "\r\n" + "工作:"+job + "\r\n" + "职位类别:"+job_type + "\r\n" + "所在地区:"+area + "\r\n" + "公司名称:" + company + "\r\n" + "工作地址:" + job_address + "\r\n" + "薪资:" + min_money + "~" + max_money + "\r\n" + "学历:" + education + "以上" + "\r\n" + "招聘人数:招聘" + person_num + "人" + "\r\n" + "行业:" + profession + "\r\n" + this_url  + "\r\n" + "------------------------------" + "\r\n")
        #        print(job)
    except :
        pass

def get_data():
    #前十页
    for j in range (1,11):
        url = "http://xiaozhao.hjiuye.com/Site/Position/list?collegeId=1808&keyword=&pageSize=10&pageNumber=" + str(j)
    #    print("第" + str(j) + "页------------------")
        res = requests.get(url,headers =hd)
        data_1 = res.text
        download(data_1)


if __name__ == "__main__" :
    get_data()

这里的代码实测爬取10页只能得到70条数据,正常是100条,我也不知道问题出在哪了,刚写代码时不是这样的,欢迎大佬们在评论区指出错误。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值