Python|採用サイトを自動更新する
某採用サイトのURL更新を行いたいが、求人数が多くて手間がかかる。
そう思っていた時にPythonで自動化できないかな?と思い立って自動更新プログラムを作ってみました。
コード
全様はこんな感じ。本職のSEでは無いので細かいところは見逃してください。
-- coding: utf-8 --
from selenium import webdriver
from bs4 import BeautifulSoup
USER = 'ユーザーID'
PASS = 'パスワード'
browser = webdriver.Chrome(executable_path = 'C:\chromedriver.exe')
browser.implicitly_wait(3)
url = str("サイトURL")
url_login = str("ログイン画面URL")
browser.get(url_login)
element = browser.find_element_by_name('email')
element.clear()
element.send_keys(USER)
element = browser.find_element_by_name('password')
element.clear()
element.send_keys(PASS)
browser_from = browser.find_element_by_id('id')
browser_from.click()
url_recruit = "募集ページURL"
browser.get(url_recruit)
browser.implicitly_wait(3)
soup = BeautifulSoup(browser.page_source, 'html.parser')
count = len(soup.find_all('p','name'))
print(count)
copy_url = []
x = 1
for page in browser.find_elements_by_xpath('/html/body/div[1]/div/main/div[1]/div[3]/table/tbody/tr/td/a[@class="class name"]'):
copy_url.append(page.get_attribute('href'))
x += 1
if x == count+1:
break
x = 1
for x in range(count):
page = browser.find_element_by_link_text("掲載終了")
browser.implicitly_wait(5)
page.click()
browser.implicitly_wait(5)
browser.find_element_by_id("id").click()
browser.refresh()
x += 1
for page in copy_url:
url_copy = str(url + page)
browser.get(url_copy)
browser.find_element_by_id("id").click()
browser.find_element_by_link_text("掲載").click()
browser.find_element_by_id("id").click()
print("完了")
解説
今回行うのは、seleniumとBeautifulSoupを組み合わせたスクレイピングです。
-- coding: utf-8 --
from selenium import webdriver
from bs4 import BeautifulSoup
変数にユーザーID、パスワード、目的のサイトURLを格納します。
USER = 'ユーザーID'
PASS = 'パスワード'
browser = webdriver.Chrome(executable_path = 'C:\chromedriver.exe')
browser.implicitly_wait(3)
url = str("サイトURL")
url_login = str("ログイン画面URL")
ログイン画面にアクセスを行います。
browser.get(url_login)
ログイン画面上で、先ほど設定したユーザーIDとパスワードを入力させます。
「.clear()」を設定しているのは、既存の入力値を一度削除してから入力を行うためです。何も入力されていなくても、デフォルトの「メールアドレス」と言ったテキストが残ってしまうことを防ぎます。
element = browser.find_element_by_name('email')
element.clear()
element.send_keys(USER)
element = browser.find_element_by_name('password')
element.clear()
element.send_keys(PASS)
seleniumの出番です。特定のidを持った要素を見つけてクリックを行います。ここではログインボタンをクリックしてログインを完了させています。
browser_from = browser.find_element_by_id('id')
browser_from.click()
続いて、募集一覧ページに遷移します。
.get(”URL”)で簡単に異動することが出来ます。(seleniumすごい!)
browser.implicitly_wait(3)としているのは、次のサイトが読み込まれる前に次のコードが実行されるのを防ぐためです。
url_recruit = "募集ページURL"
browser.get(url_recruit)
browser.implicitly_wait(3)
続いて、BeautifulSoupを使ってサイト内を解析しています。ここでは<p>タグのnameの要素数を取得し、公開中の募集要項の数をカウントしています。
soup = BeautifulSoup(browser.page_source, 'html.parser')
count = len(soup.find_all('p','name'))
print(count)
xpathを使って、URLが格納されているタグを探しています。募集要項が公開中であれば複製用のURLを取得して、copy_urlのリストに格納します。
ちなみに募集要項が公開中かどうかを判別しようとすると処理が複雑になるため、上からcount個分だけ処理を繰り返す、という記述になっています。
copy_url = []
x = 1
for page in browser.find_elements_by_xpath('/html/body/div[1]/div/main/div[1]/div[3]/table/tbody/tr/td/a[@class="class name"]'):
copy_url.append(page.get_attribute('href'))
x += 1
if x == count+1:
break
続いて、元の募集要項は全て非公開設定にします。ここは掲載終了のボタンをクリックする処理を記載しています。
x = 1
for x in range(count):
page = browser.find_element_by_link_text("掲載終了")
page.click()
browser.implicitly_wait(3)
browser.refresh()
x += 1
最後に、copy_urlのリストに格納していた求人複製用のURLをひとつずつ開いて公開していきます。
for page in copy_url:
url_copy = str(url + page)
browser.get(url_copy)
browser.find_element_by_id("id").click()
browser.find_element_by_link_text("掲載").click()
browser.find_element_by_id("id").click()
print("完了")
自動処理プログラムの完成です!
noteをご覧いただきありがとうございました。
この記事が気に入ったらサポートをしてみませんか?