selenium &beautifulsoupデータ収集
今日は時間が取れたので、復習とアウトプットのためデータ収集のためにseleniumとbeautifulsoupをまとめます。
・今回はマイナビから『会社名』と『年収』と『勤務地』『仕事内容』を取得し、csvファイルに保存する方法を書きます。
環境:
windows10
①モジュール(
Pythonには多くの「標準ライブラリ」や「外部ライブラリ」が「モジュール」として提供されている。
)を書き込んでいく。
今回必要な物
・from selenium import webdriver(ブラウザを自動で動かすために)
・import time(サイトに負荷をかけすぎないために時間を作るために必要)
・frome bs4 import BeautifulSoup(HTMLなどを解析するため)
・import urllib.request as req(簡単にURLを開くため)
前回の記事にも書いた調べたいサイトまでのコード書きます。(今回はマイナビ・説明は割愛します)
〜マイナビのページを開く作業〜
browser = webdriver.Chrome(executable_path= ☆☆「webdriverが置かれているpathを記入しpathを通します」)
url_login = 'マイナビのURL'
browser.get(url_login)
##以上でマイナビのページを開くことはできました。##
〜ここからはマイマビのページの中を自動で動かす〜
まず検索欄の要素を取得します。そのため、検証(右クリックした下の方にあります)
そこで欲しい要素にあるclassやname/id/xpathなど特徴があるものを見つけます。
要素を指定するため
element =browser.find_element_by_[xpath/id/name/xpath]('xxxxx')
→element = browser.find_element_by_id('srchWord')
print('取得したい企業名を記入してください')
corname = input()
検索欄に検索したい企業名を送る
element.send_key(corname)
次に検索実行ボタンを押したい。これまた要素を検証で探しにいく!
element = browser.find_element_by_id('srchButton').click()
time.sleep(0.5)「一瞬の待ち時間を作ります」
〜検索結果が複数出てきた場合は検索結果が一番上の企業を採用〜
再度クリックを押せる所の要素を検証で調べます。
element = browser.find_element_by_id('corpNameLink[0]').click()
*corpNameの要素は複数でてくる。それがリスト型になっているので[0]で指定する。
〜企業を選択することで新しいタブが開かれた〜
handle_array = browser.window_handles
browser.switch_to.window(handle_array[1])
〜また取得したい要素はブラウザ上になくスクロール下にあるとき〜
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
〜採用ページのタブを取得する〜
element = browser.find_element_by_id("headerEmploymentTabLink").click()
##以上で欲しい情報のページまで進むことができました##
〜ここでbeautifulsoupでHTMLの解析・取得を行う〜
response = req.urlopen(browser.current_url)
parser_html = BeautifulSoup(response, 'html.parser')
〜企業名〜
parser_html.find("h1")→<h1>○○株式会社</h1>
*実際エクセルに保存する時はタブは邪魔になってしまう。
タブを削除して中のテキストだけ抜き出すために以下の関数を使用します。
・get_text()関数 「テキストを取り出す」
・strip()関数 「空白を削除する」
parser_html.find("h1").get_text().strip()
→〇〇株式会社
〜仕事内容〜
parser_html.find(id="adveanceInfoWorkText").get_text().strip()
〜給与〜
parser_html.find(id="employTreatmentListDescText3190").get_text().strip()
〜勤務地〜
parser_html.find(id="employTreatmentListDescText3260").get_text().strip()
〜リストの中に保存していく〜
corpname = parser_html.find(id="adveanceInfoWorkText").get_text().strip()
suma =
parser_html.find(id="employTreatmentListDescText3190").get_text().strip()
loc =
parser_html.find(id="employTreatmentListDescText3260").get_text().strip()
conten =
parser_html.find(id="adveanceInfoWorkText").get_text().strip()
corpname_list = []
for a in corpname:
corpname_list.append(a)
##これでリストの中に格納完了。
それぞれ年収も勤務地も同様にリストにまとめた後
all_content = corpname_list, xxx, yyyy, ggg
とまとめます。
〜エクセルに書き込み保存をおこなう〜
with open()でExcelファイルを開く
with open('mainabi.csv', 'a', newline='', encoding=''cp932'')as f:
・()の中の左から二番目のaはファイルを追加で書いていくことを表します。
ここの'a'を'w'にすると毎回上書きしてエクセルに情報を書いてくれます。
・newline = ''は、改行コードの自動変換はされない設定。
・encodingはパソコンで日本語を解釈するために設定する。
(UTF_-8など何種類かある)
with open('mainabi.csv',xxxxxxx)
writer = csv.writer(f)
writer.writerow(all_content)
f.close()#ファイルを閉じる作業
##以上でマイナビを自動でブラウザ上で動かし好きな企業名を入れると企業名・年収・勤務地・仕事内容を取得しエクセルに保存してくれるpythonコード完了です。