利用python如何在前程无忧高效投递简历


Posted in Python onMay 07, 2019

前言

在前程无忧上投递简历发现有竞争力分析,免费能看到匹配度评价和综合竞争力分数,可以做投递参考

利用python如何在前程无忧高效投递简历

计算方式

利用python如何在前程无忧高效投递简历

综合竞争力得分应该越高越好,匹配度评语也应该评价越高越好

抓取所有职位关键字搜索结果并获取综合竞争力得分和匹配度评语,最后筛选得分评语自动投递合适的简历

登陆获取cookie

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
# chrome_options.add_argument('--headless')
from time import sleep
import re
from lxml import etree
import requests
import os
import json

driver = webdriver.Chrome(chrome_options=chrome_options,executable_path = 'D:\python\chromedriver.exe')
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"}
driver.get(https://search.51job.com/list/020000,000000,0000,00,9,99,%2520,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=)

webdriver需要在相应域名写入cookie,所以转到职位搜索页面

利用python如何在前程无忧高效投递简历

def get_cookie():
  driver.get("https://login.51job.com/login.php?loginway=1&lang=c&url=")
  sleep(2)
  phone=input("输入手机号:")
  driver.find_element_by_id("loginname").send_keys(phone)
  driver.find_element_by_id("btn7").click()
  sleep(1)
  code=input("输入短信:")
  driver.find_element_by_id("phonecode").send_keys(code)
  driver.find_element_by_id("login_btn").click()
  sleep(2)
  cookies = driver.get_cookies()
  with open("cookie.json", "w")as f:
    f.write(json.dumps(cookies))

检查cookie文件是否存在,如果不存在执行get_cookie把cookie写入文件,在登陆的时候最好不用无头模式,偶尔有滑动验证码

前程无忧手机短信一天只能发送三条,保存cookie下次登陆用

def get_job():
  driver.get("https://search.51job.com/list/020000,000000,0000,00,9,99,%2520,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=")
  sleep(2)
  job=input("输入职位:")
  driver.find_element_by_id("kwdselectid").send_keys(job)
  driver.find_element_by_xpath('//button[@class="p_but"]').click()
  url=driver.current_url
  page=driver.page_source
  return url,page

在职位搜索获取职位搜索结果,需要返回页面源码和地址

利用python如何在前程无忧高效投递简历

利用python如何在前程无忧高效投递简历

利用python如何在前程无忧高效投递简历

分析页码结构html前的是页码,全部页码数量通过共XX页得到

def get_pages(url,page):
  tree=etree.HTML(page)
  href=[]
  x = tree.xpath('//span[@class="td"]/text()')[0]
  total_page=int(re.findall("(\d+)", x)[0])
  for i in range(1,total_page+1):
    href.append(re.sub("\d.html", f'{i}.html', url))
  return href

获取全部页码

利用python如何在前程无忧高效投递简历

def get_job_code(url):
  headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"}
  r=session.get(url,headers=headers)
  tree=etree.HTML(r.text)
  divs=tree.xpath('//div[@class="el"]/p/span/a/@href')
  job=str(divs)
  job_id=re.findall("\/(\d+).html",job)
  return job_id

获取职位id

利用python如何在前程无忧高效投递简历

修改id请求网址到竞争力分析页面

def get_info(job_id):
  href=f"https://i.51job.com/userset/bounce_window_redirect.php?jobid={job_id}&redirect_type=2"
  r=session.get(href,headers=headers)
  r.encoding=r.apparent_encoding
  tree=etree.HTML(r.text)
  pingjia=tree.xpath('//div[@class="warn w1"]//text()')[0].strip()
  gongsi=[]
  for i in tree.xpath('//div[@class="lf"]//text()'):
    if i.strip():
      gongsi.append(i.strip())
  fenshu=[]
  for i in tree.xpath('//ul[@class="rt"]//text()'):
    if i.strip():
      fenshu.append(i.strip())
  url=f"https://jobs.51job.com/shanghai/{job_id}.html?s=03&t=0"
  return {"公司":gongsi[1],"职位":gongsi[0],"匹配度":pingjia,fenshu[3]:fenshu[2],"链接":url,"_id":job_id}

利用python如何在前程无忧高效投递简历

抓取竞争力分析页面,返回一个字典

主程序

if not os.path.exists("cookie.json"):
  get_cookie()
f=open("cookie.json","r")
cookies=json.loads(f.read())
f.close()

检查cookie文件载入cookie,不存在执行get_cookie()把cookie保存到文件

session = requests.Session()
for cookie in cookies: 

driver.add_cookie(cookie)
session.cookies.set(cookie['name'],cookie['value'])
url, page = get_job()
driver.close()

在session和webdriver写入cookie登陆

获取第一页和url后webdriver就可以关掉了

code=[]
for i in get_pages(url,page):
  code=code+get_job_code(i)

获取的职位id添加到列表

import pymongo
client=pymongo.MongoClient("localhost",27017)
db=client["job_he"]
job_info=db["job_info"]
for i in code:
  try:
    if not job_info.find_one({"_id":i}):
      info=get_info(i)
      sleep(1)
      job_info.insert_one(info)
      print(info,"插入成功")
except:
    print(code)

龟速爬取,用MongDB保存结果,职位id作为索引id,插入之前检查id是否存在简单去重减少访问

利用python如何在前程无忧高效投递简历

吃完饭已经抓到8000个职位了,筛选找到127个匹配度好的,开始批量投递

利用python如何在前程无忧高效投递简历

登陆状态点击申请职位,用wevdriver做

for i in job_info.find({"匹配度":{$regex:"排名很好"},"综合竞争力得分":{$gte:"80"}}):
  print(i)
  try:
    driver.get(i)
    driver.find_element_by_id("app_ck").click()
    sleep(2)
  except:
    pass

用cookie登陆简单for循环投递,在Mongodb里查表,正则筛选匹配度和竞争力得分获取所有匹配结果

利用python如何在前程无忧高效投递简历

投递成功

代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
# chrome_options.add_argument('--headless')
from time import sleep
import re
from lxml import etree
import requests
import os
import json

driver = webdriver.Chrome(chrome_options=chrome_options,executable_path = 'D:\python\chromedriver.exe')
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"}
driver.get("https://search.51job.com/list/020000,000000,0000,00,9,99,%2520,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=")

def get_cookie():
  driver.get("https://login.51job.com/login.php?loginway=1&lang=c&url=")
  sleep(2)
  phone=input("输入手机号:")
  driver.find_element_by_id("loginname").send_keys(phone)
  driver.find_element_by_id("btn7").click()
  sleep(1)
  code=input("输入短信:")
  driver.find_element_by_id("phonecode").send_keys(code)
  driver.find_element_by_id("login_btn").click()
  sleep(2)
  cookies = driver.get_cookies()
  with open("cookie.json", "w")as f:
    f.write(json.dumps(cookies))

def get_job():
  driver.get("https://search.51job.com/list/020000,000000,0000,00,9,99,%2520,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=")
  sleep(2)
  job=input("输入职位:")
  driver.find_element_by_id("kwdselectid").send_keys(job)
  driver.find_element_by_xpath('//button[@class="p_but"]').click()
  url=driver.current_url
  page=driver.page_source
  return url,page

def close_driver():
  driver.close()

def get_pages(url,page):
  tree=etree.HTML(page)
  href=[]
  x = tree.xpath('//span[@class="td"]/text()')[0]
  total_page=int(re.findall("(\d+)", x)[0])
  for i in range(1,total_page+1):
    href.append(re.sub("\d.html", f'{i}.html', url))
  return href

def get_job_code(url):
  headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"}
  r=session.get(url,headers=headers)
  tree=etree.HTML(r.text)
  divs=tree.xpath('//div[@class="el"]/p/span/a/@href')
  job=str(divs)
  job_id=re.findall("\/(\d+).html",job)
  return job_id

def get_info(job_id):
  href=f"https://i.51job.com/userset/bounce_window_redirect.php?jobid={job_id}&redirect_type=2"
  r=session.get(href,headers=headers)
  r.encoding=r.apparent_encoding
  tree=etree.HTML(r.text)
  pingjia=tree.xpath('//div[@class="warn w1"]//text()')[0].strip()
  gongsi=[]
  for i in tree.xpath('//div[@class="lf"]//text()'):
    if i.strip():
      gongsi.append(i.strip())
  fenshu=[]
  for i in tree.xpath('//ul[@class="rt"]//text()'):
    if i.strip():
      fenshu.append(i.strip())
  url=f"https://jobs.51job.com/shanghai/{job_id}.html?s=03&t=0"
  return {"公司":gongsi[1],"职位":gongsi[0],"匹配度":pingjia,fenshu[3]:fenshu[2],"链接":url,"_id":job_id}



if not os.path.exists("cookie.json"):
  get_cookie()
f=open("cookie.json","r")
cookies=json.loads(f.read())
f.close()
session = requests.Session()
for cookie in cookies:
  driver.add_cookie(cookie)
  session.cookies.set(cookie['name'], cookie['value'])
url, page = get_job()
driver.close()
code=[]
for i in get_pages(url,page):
  code=code+get_job_code(i)
import pymongo
client=pymongo.MongoClient("localhost",27017)
db=client["job_he"]
job_info=db["job_info"]

for i in code:
  try:
    if not job_info.find_one({"_id":i}):
      info=get_info(i)
      sleep(1)
      job_info.insert_one(info)
      print(info)
      print("插入成功")
  except:
    print(code)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
常见的python正则用法实例讲解
Jun 21 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
Python基于xlrd模块操作Excel的方法示例
Jun 21 Python
解决Pycharm界面的子窗口不见了的问题
Jan 17 Python
Python3实现的反转单链表算法示例
Mar 08 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
Jul 08 Python
python基础 range的用法解析
Aug 23 Python
pytorch-神经网络拟合曲线实例
Jan 15 Python
详解Python IO口多路复用
Jun 17 Python
Python如何截图保存的三种方法(小结)
Sep 01 Python
PyTorch预训练Bert模型的示例
Nov 17 Python
图文详解matlab原始处理图像几何变换
Jul 09 Python
Python可迭代对象操作示例
May 07 #Python
python实现支付宝转账接口
May 07 #Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
May 07 #Python
python验证身份证信息实例代码
May 06 #Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
May 06 #Python
Python实现的栈、队列、文件目录遍历操作示例
May 06 #Python
Python两台电脑实现TCP通信的方法示例
May 06 #Python
You might like
php中使用DOM类读取XML文件的实现代码
2011/12/14 PHP
微博短链接算法php版本实现代码
2012/09/15 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
简单实现php上传文件功能
2017/09/21 PHP
utf8的编码算法 转载
2006/12/27 Javascript
pjblog中的UBBCode.js
2007/04/25 Javascript
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
快速掌握jQuery插件开发
2017/01/19 Javascript
浅谈webpack编译vue项目生成的代码探索
2017/12/11 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
tracking.js实现前端人脸识别功能
2020/04/16 Javascript
python dataframe 输出结果整行显示的方法
2018/06/14 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
python 多线程重启方法
2019/02/18 Python
Django视图、传参和forms验证操作
2020/07/15 Python
视图的作用
2014/12/19 面试题
竞聘上岗演讲稿范文
2014/01/10 职场文书
18岁生日感言
2014/01/12 职场文书
《巨人的花园》教学反思
2014/02/12 职场文书
党支部公开承诺书
2014/03/28 职场文书
终止劳动合同协议书
2014/10/05 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
初中信息技术教学计划
2015/01/22 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
班主任培训研修日志
2015/11/13 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技
Nginx报404错误的详细解决方法
2022/07/23 Servers