利用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 01 Python
Python基于Tkinter的HelloWorld入门实例
Jun 17 Python
python常用知识梳理(必看篇)
Mar 23 Python
老生常谈Python基础之字符编码
Jun 14 Python
python利用正则表达式搜索单词示例代码
Sep 24 Python
Python小白必备的8个最常用的内置函数(推荐)
Apr 03 Python
Python字符串处理的8招秘籍(小结)
Aug 13 Python
python redis 批量设置过期key过程解析
Nov 26 Python
基于python-pptx库中文文档及使用详解
Feb 14 Python
Python面向对象实现方法总结
Aug 12 Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 Python
python音频处理的示例详解
Dec 23 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
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
memcache一致性hash的php实现方法
2015/03/05 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
JS中简单的实现像C#中using功能(有源码下载)
2007/01/09 Javascript
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
SWFObject基本用法实例分析
2015/07/20 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
JavaScript实现翻页功能(附效果图)
2017/02/16 Javascript
JavaScript之underscore_动力节点Java学院整理
2017/07/03 Javascript
vue实现添加与删除图书功能
2018/10/07 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
在VUE style中使用data中的变量的方法
2020/06/19 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
[02:01]BBC DOTA2国际邀请赛每日综述:八强胜者组鏖战,中国队喜忧参半
2014/07/19 DOTA
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
Python中的index()方法使用教程
2015/05/18 Python
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
python实现超市商品销售管理系统
2019/10/25 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
2020/12/10 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
美国在线自行车商店:Jenson USA
2018/05/22 全球购物
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
营销主管自我评价怎么写
2013/09/19 职场文书
法人委托书范本
2014/04/04 职场文书
团干部培训方案
2014/06/03 职场文书
六查六看心得体会
2014/10/14 职场文书
医学专业大学生职业生涯规划书
2014/10/25 职场文书
主持人大赛开场白
2015/05/29 职场文书
合同范本之电脑出租
2019/08/13 职场文书
Python入门学习之类的相关知识总结
2021/05/25 Python