Pythonを使って、求人サイトから情報をスクレイピングする①

Home - python - Pythonを使って、求人サイトから情報をスクレイピングする①

投稿:2022年3月19日

更新:2022年3月20日

こんにちわ!はじめまして、Web系フリーランスの泉原です。今回は求人サイトのindeedから求人情報をpythonを使ってスクレイピングしていきたいと思います。よろしくお願いします。

PythonはWebスクレイピングをするための便利なライブラリが揃っています。自動化することで効率的に情報を抽出することが出来ます。ぜひチャレンジしてみて下さい!

前提知識として、RequestsやBeautifulSoupの基本的な知識が必要になります。まだ良くわからない方は以下のリンクから使い方を習得して下さい!

今回はindeedから情報をスクレイピングしていきたいと思います。スクレイピングをする際はサイトに負荷をかけないように配慮が必要です。自己責任でお願いします。

必要なライブラリをインストールする

必要なライブラリをインストールしていきます

仮想環境を有効化する

仮想環境を作成していることが前提になります。以下の記事を参考に仮想環境を作成して下さい

今回はデスクトップ上にpython_scrapingと仮想環境を作成しました。

source python_scraping/bin/activateと入力して仮想環境を有効化する

先頭に(python_scraping)が追加されて、有効化されました。

Requestsをインストールする

仮想環境が有効化されたので、Requestsをインストールします。RequestsとはサーバーとHTTP通信をするために必要なライブラリになります。

pip install requests

BeautifulSoupをインストールする

BeautifulSoupをインストールしていきます。

pip install beautifulsoup4

ライブラリがインストールできてるか、確認しておきます。

pip list

インストールが確認できたので、スクレイピングしていきたいと思います。

indeedから求人情報をスクレイピングする

indeedから求人情報スクレイピングしていきます

ライブラリをインポートする

.pyファイルを作成します。今回はpython_scraping.pyとしました。

RequestsとBeautifulSoupをインポートします

import requests
from bs4 import BeautifulSoup

indeedから情報を取得する

環境が整ったので、indeedで情報を抽出します。まずindeedに移動します。

プログラミング大阪で検索してみました。

たくさんの求人情報が出てきます。URLをコピーしてurlに格納します

url = 'https://jp.indeed.com/jobs?q=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0&l=%E5%A4%A7%E9%98%AA'

私の環境ではクエリの部分に数字の羅列になったので、消します。

# 変更
url = 'https://jp.indeed.com/jobs?q=プログラミング&l=大阪'

Requestsを使って、レスポンスが帰ってくるか調べてみます。

url = 'https://jp.indeed.com/jobs?q=プログラミング&l=大阪'

# 追加
res = requests.get(url)
print(res)

レスポンスが帰ってきたので、大丈夫そうです。

会社名を取得する

BeautifulSoupを使って、会社名を取得します。indeedに戻って、google 検証モードを開きます。右クリック→検証から開くことが出来ます。

矢印アイコンをクリックして、会社名を調べます。

会社名にカーソルを合わせると、cssのクラス名を調べることが出来ます。indeedの場合はspanタグに対して、companyNameとクラスが付与されていることが確認出来ました。

クリックすると該当位置に移動することが出来ます。

vscodeにコードを書いて、会社名を取得する

soup = BeautifulSoup(res.text,'html.parser')
companyNames = soup.select('.companyName')
print(companyName)

少し見にくいですが、会社名が取得出来ました。

今の状態ではタグごと取得しているので、文字列だけ抽出したいと思います。そういう時はget_text()を使います。タグを除いてテキストだけ抽出してくれます。

companyNames = soup.select('.companyName')
for i in companyNames:
  print(i.get_text())

テキストだけ抽出出来ました。

会社住所を取得する

会社名が取得出来たので、次は会社住所を取得します。検証モードを開いてクラス名を調べます。

divタグに対して、companyLocationクラスをあてています。

同じくselect関数を使って、抽出します

# 会社住所
companyLocations = soup.select('.companyLocation')
print(companyLocations)

取得出来ました。

テキストだけ取得

# 会社住所
companyLocations = soup.select('.companyLocation')
for i in companyLocations:
  print(i.get_text())

仕事内容を取得する

最後に仕事内容を取得します。google検証モードで見てみると、h2タグjobTitleクラスを付与しています。

get_text()関数にstrip=True引数を渡すことで、改行や空白文字を削除してくれます!便利なので、覚えておきましょう。

# 仕事内容
jobTitles = soup.select(".jobTitle")
for i in jobTitles:
  jobtitle = i.get_text(strip=True)
  print(jobtitle)

新着の文字列が不要なので、replace関数を使って削除します

jobtitle = i.get_text(strip=True).replace('新着','')

良い感じに取得出来ました!

コメントを追加して、実行

import requests
from bs4 import BeautifulSoup

# 対象サイト
url = 'https://jp.indeed.com/jobs?q=プログラミング&l=大阪'
res = requests.get(url)
soup = BeautifulSoup(res.text,'html.parser')

print('===============会社名================')
# 会社名
companyNames = soup.select('.companyName')
for i in companyNames:
  print(i.get_text())

print('===============会社住所================')
# 会社住所
companyLocations = soup.select('.companyLocation')
for i in companyLocations:
  print(i.get_text())

print('===============仕事内容================')
# 仕事内容
jobTitles = soup.select(".jobTitle")
for i in jobTitles:
  jobtitle = i.get_text(strip=True).replace('新着','')
  print(jobtitle)

大丈夫そうですね!次の記事でcsvを作成して出力したいと思います!ありがとうございました!

もしプログラミングが動かないとか、解説している内容が分からない!なんてことがあったらお気軽にTwitterのDMまでご連絡ください!サポート致します

Writer info

プロフィール写真

泉原 遥輝 | Haruki Izumihara

フリーランスのエンジニアです。Web制作や、LP、Pythonを使った自動化ツールなどをメインにお仕事をしています。お気軽にお問い合わせください!