目录:
- 想法
- 准备工作
- 程序
- 匹配我们要获取的信息
- 自动翻页代码
- 将获取到的数据保存到文件中
- 源代码
想法
上了一节就业课程,突然发现要毕业了,从来没有关注过学校的就业信息。突然冒出一个想法,爬一下学校的就业信息网吧,了解一下信息,就写了这个程序。网页结构比较简单。
各位6月份马上要毕业但是考研没过初始线的同学们,现在就要开始找工作了,希望这个能帮助你。
准备工作
图片中的职位信息就是要获取的内容。
包括:发布日期、薪资、公司,招聘人数等。
检查翻页源代码发现源代码中并没有我们想要的内容,可以看出此网页是动态页面。
既然是动态页面,那么我们换一个思路F12键打开控制台选择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得到网页代码,正则表达式获取信息
#_*_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条,我也不知道问题出在哪了,刚写代码时不是这样的,欢迎大佬们在评论区指出错误。