目录:

  • 想法
  • 准备工作
  • 程序
  • 匹配我们要获取的信息
  • 自动翻页代码
  • 将获取到的数据保存到文件中
  • 源代码


想法

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

准备工作

图片中的职位信息就是要获取的内容。

包括:发布日期、薪资、公司,招聘人数等。

使用python 爬取中国高校排名信息 代码 python爬取学校学生信息_大数据


检查翻页源代码发现源代码中并没有我们想要的内容,可以看出此网页是动态页面。

使用python 爬取中国高校排名信息 代码 python爬取学校学生信息_数据_02


既然是动态页面,那么我们换一个思路F12键打开控制台选择Network,然后重新加载第一页网页页面只得到了一条数据,我写程序时候是好几条,写博客就剩一条了。这样挺好,这样更简单。

使用python 爬取中国高校排名信息 代码 python爬取学校学生信息_Network_03


显然这里面有我们想要的数据,接下来开始写程序。

使用python 爬取中国高校排名信息 代码 python爬取学校学生信息_正则表达式_04

程序

匹配我们要获取的信息

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

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)

自动翻页代码

使用python 爬取中国高校排名信息 代码 python爬取学校学生信息_python_05


第一页在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得到网页代码,正则表达式获取信息

#_*_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条,我也不知道问题出在哪了,刚写代码时不是这样的,欢迎大佬们在评论区指出错误。