利用python如何在前程無憂高效投遞簡歷
前言
在前程無憂上投遞簡歷發(fā)現(xiàn)有競爭力分析,免費(fèi)能看到匹配度評價和綜合競爭力分?jǐn)?shù),可以做投遞參考
計算方式
綜合競爭力得分應(yīng)該越高越好,匹配度評語也應(yīng)該評價越高越好
抓取所有職位關(guān)鍵字搜索結(jié)果并獲取綜合競爭力得分和匹配度評語,最后篩選得分評語自動投遞合適的簡歷
登陸獲取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需要在相應(yīng)域名寫入cookie,所以轉(zhuǎn)到職位搜索頁面
def get_cookie(): driver.get("https://login.51job.com/login.php?loginway=1&lang=c&url=") sleep(2) phone=input("輸入手機(jī)號:") 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文件是否存在,如果不存在執(zhí)行g(shù)et_cookie把cookie寫入文件,在登陸的時候最好不用無頭模式,偶爾有滑動驗證碼
前程無憂手機(jī)短信一天只能發(fā)送三條,保存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
在職位搜索獲取職位搜索結(jié)果,需要返回頁面源碼和地址
分析頁碼結(jié)構(gòu)html前的是頁碼,全部頁碼數(shù)量通過共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
獲取全部頁碼
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
修改id請求網(wǎng)址到競爭力分析頁面
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()
檢查cookie文件載入cookie,不存在執(zhí)行g(shù)et_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就可以關(guān)掉了
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保存結(jié)果,職位id作為索引id,插入之前檢查id是否存在簡單去重減少訪問
吃完飯已經(jīng)抓到8000個職位了,篩選找到127個匹配度好的,開始批量投遞
登陸狀態(tài)點(diǎn)擊申請職位,用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循環(huán)投遞,在Mongodb里查表,正則篩選匹配度和競爭力得分獲取所有匹配結(jié)果
投遞成功
代碼
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("輸入手機(jī)號:") 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)
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
相關(guān)文章
Python實(shí)現(xiàn)自動裝機(jī)功能案例分析
這篇文章主要介紹了Python實(shí)現(xiàn)自動裝機(jī)功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10Python開發(fā)中爬蟲使用代理proxy抓取網(wǎng)頁的方法示例
這篇文章主要介紹了Python開發(fā)中爬蟲使用代理proxy抓取網(wǎng)頁的方法,結(jié)合具體實(shí)例形式分析了urllib模塊代理與requests模塊代理兩種實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-09-09如何通過神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)線性回歸的擬合
這篇文章主要介紹了如何通過神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)線性回歸的擬合問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05python中enumerate函數(shù)用法實(shí)例分析
這篇文章主要介紹了python中enumerate函數(shù)用法,以實(shí)例形式較為詳細(xì)的分析了enumerate函數(shù)的功能、定義及使用技巧,需要的朋友可以參考下2015-05-05使用Python爬蟲庫BeautifulSoup遍歷文檔樹并對標(biāo)簽進(jìn)行操作詳解
今天為大家介紹下Python爬蟲庫BeautifulSoup遍歷文檔樹并對標(biāo)簽進(jìn)行操作的詳細(xì)方法與函數(shù)2020-01-01使用Python腳本來獲取Cisco設(shè)備信息的示例
這篇文章主要介紹了編寫Python腳本來獲取Python腳本來獲取Cisco設(shè)備信息的教程,文中的示例是獲取一臺思科交換機(jī)的腳本,需要的朋友可以參考下2015-05-05基于Python中isfile函數(shù)和isdir函數(shù)使用詳解
今天小編就為大家分享一篇基于Python中isfile函數(shù)和isdir函數(shù)使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11Python中的裝飾器鏈(decorator chain)詳解
在Python中,裝飾器是一種高級功能,它允許你在不修改函數(shù)或類代碼的情況下,為它們添加額外的功能,裝飾器通常用于日志記錄、性能測量、權(quán)限檢查等場景,當(dāng)多個裝飾器應(yīng)用于同一個函數(shù)或類時,形成裝飾器鏈,這篇文章主要介紹了Python中的裝飾器鏈詳解,需要的朋友可以參考下2024-06-06matplotlib之Font family [‘sans-serif‘] not&nbs
本文主要介紹了matplotlib之Font family [‘sans-serif‘] not found的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03