Python获取前程无忧的职位信息

Python获取前程无忧的职位信息

今天用Python写了一个小脚本可以获取前程无忧(https://www.51job.com/)的职位信息,包括职位,公司,薪资等。
主要应用requests库和正则表达式。
这个网站需要解码,这是一个坑,要不然很容易造成提取信息失败。在阿里云大学学了一招。 这个解码的代码段算是万能解码了,在提取不需要解码的网站源码信息时,把这段代码写进去也是没有问题的,在提取需要解码的网站源码信息时,把这段代码放进去就可以解码了。

data = bytes(txt.text,txt.encoding).decode("gbk","ignore")
#把获取到的网页代码转换成二进制数据,然后按照网站编码进行解码就OK了。
#这里的gbk是https://www.51job.com的编码形式,也可以转换成utf-8,当然按照网页编码进行解码是一定没有问题的。

下面直接上完整的代码,备注写的还算详细。

#_*_coding:utf-8_*_
#作者:i7366464
#时间:2020/2/24 13:43
#文件:爬取前程无忧.py
#IDE :PyCharm
#https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud这个网站是下载Python第三方库的网站
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"
}
city = input("请输入城市拼音:")#注意这里一定是拼音小写的,网站限制。。
job = input("请输入职位:")
txt = requests.get("https://www.51job.com/"+city)#所输入城市的前程无忧主页
data = bytes(txt.text,txt.encoding).decode("gbk","ignore")
pat_city_id= '<input type="hidden".*?id="jobarea".*?value="(.*?)"/>'
city_id = re.compile(pat_city_id,re.S).findall(data)[0]#获取到所输入城市的id
#print(city_id)
txt_1= requests.get("https://search.51job.com/list/"+str(city_id)+",000000,0000,00,9,99,"+job+",2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0",headers = hd)
data= bytes(txt_1.text,txt_1.encoding).decode("gbk","ignore")
#print(data)
pat = ' <div class="rt">.*?共(.*?)条职位.*?</div>'
num = re.compile(pat,re.S).findall(data)[0]#获取所搜索职位一共有多少
#print(num)
page = int(num)//50+1#算一下一共有多少页
#print(page)
for i in range(0,page):
    print("----正在爬"+str(i+1)+"页----")
    this_url = ("https://search.51job.com/list/"+str(city_id)+",000000,0000,00,9,99,"+job+",2,"+str(i+1)+".html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0")
    txt_2 = requests.get(this_url,headers = hd)
    data = bytes(txt_2.text,txt_2.encoding).decode("gbk","ignore")
#    print(data)
    pat_title = ' <span>.*?<a target="_blank" title="(.*?)" .*?</span>'
    pat_company = '<span class="t2"><a target="_blank" title="(.*?)" .*?</span>'
    pat_money = '<div class="el">.*?<span class="t4">(.*?)</span>.*?</div>'
    try:
        for j in range(0,50):
            title = re.compile(pat_title,re.S).findall(data)[j]#获取职位
            company = re.compile(pat_company,re.S).findall(data)[j]#获取公司
            money = re.compile(pat_money,re.S).findall(data)[j]#获取薪资
#            print(len(money))
#            print(title)
#            print(company)
#            print(money)
#            print("--------")
            with open("工作.doc","a+",encoding='utf-8')as f:
                f.write(title+"\r\n"+company+"\r\n"+money+"\r\n"+"------\r\n")

    except Exception as ess:
        pass

我这里已长春为例测试了一下,下面图片就是爬下来的数据中的一部分
所爬下数据的一部分
欢迎大家测试、交流。希望大家多多评论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
随着 经 济 的高速发展,人才的流动也越来越频繁,而人才资源是现代企业在日趋激烈的商业竞争中立于不败之地的根本保证。如何才能用最少的时间和精力招聘到符合企业要求的人才,同时也让应聘者更加方便地参加应聘是企业和个人都关心的问题。我们借助日益成熟的互联网技术设计和实现了一个可以让招聘者和应聘者远程进行互动交流的网络平台,即在线招聘系统(OnLine Recruitment System简称OLRS),该系统在传统的在线招聘系统基础上添加了在线考试功能,可以让招聘者和应聘者双方通过互联网完成初试工作,系统采用了B/S结构,以及架构式软件开发方法。 OLR S 系 统的功能包括: . 支 持 用户站内搜索; . 具 有 强大的后台系统管理功能; . 提 供 邮件服务平台; . 具 有 邮件过滤功能; . 提 供 在线考试功能,企业发布试卷,求职者进行考试; . 支 持 用户权限控制; 本文 设 计 和实现了OLRS系统,包括系统基本构架设计,系统功能设计,数据库设计,集成方案的设计以及数据库连接池的设计等。 在设计整个系统时,我追求的目标是简单、灵活、经济的原则,所以我选择了Tomcat5.5 作为中间件,数据库采用的是MS SQLSERVER2000,开发环境选用Eclipse3.2+Myeclipse5.0集成开发环境,同时在系统结构上,我采用符合现代网络技术发展趋势的B/S结构。系统开发遵循构架式软件开发规范, 综合运用了 Struts/Hibernate/Jsp/JavaBean/Tomcat/XML/Javascript 等技术。 由于本系统采用了MVC系统架构模式进行开发,在开发过程中代码实现了充分的重用,可分层次同时开发,极大地减低了开发时间和工作量,同时降低了系统模块间的依赖性,提供了系统良好的延展性和可维护性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值