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

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

投稿:2022年3月20日

更新:2022年3月20日

こんにちわ!はじめまして、フリーランスのエンジニア泉原です。今回は前回に引き続きPythonを使って、抽出した情報をcsvに出力したいと思います!

前回の記事でindeedを使って、情報を抽出するところまで解説しました。今回はcsvファイルに出力するところまで解説したいと思います。

前回の記事をまだ見てないかたは下のリンクからご参照をお願いします!

前回までのおさらい

indeedから会社名会社住所仕事内容をスクレイピングして取得しました。

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)

カード形式で情報を取得する

以前までは別々に情報を取得しましたが、今回はカード形式で大きな要素を取得して、そこから各情報を取得したいと思います。

ステップ
1. google検証モードでカードのクラス名を調べる
2. 会社名、会社情報、仕事内容をカードから取得する

カード情報とはこのようなイメージです。

google検証モードでカードのクラス名を調べる

Webページで右クリック→検証でGoogle検証モードを開きます。

右上のカーソルボタンを押すことで要素やクラス名を調べる事が出来ます。

tableタブに対して、jobCard_mainContentクラスが付与されていることを確認出来ました。

jobCardsとし情報を取得します。

jobCards = soup.select('.jobCard_mainContent')

会社名、会社情報、仕事内容をカードから取得する

会社名会社住所仕事内容をカードから取得する。

select_one()にしないとエラーになるので注意してくださいね!

for jobCard in jobCards:
  # 会社名
  companyName = jobCard.select_one('.companyName').text
  #会社住所
  companyLocation = jobCard.select_one('.companyLocation').text
  # 仕事内容
  jobTitle = jobCard.select_one('.jobTitle').text.replace('新着','')
  print('=================================')
  print(jobTitle)
  print(companyName)
  print(companyLocation)

情報が正しく取得できるので、csvに出力していきます。

抽出したデータをCSVに出力する

抽出したデータをcsvファイルとして出力します。

ステップ

  1. 辞書型で取得したデータを保存する
  2. pandasをインストールする
  3. csvに出力する

辞書型でデータを保存する

辞書名[’キー’] = ‘値’とすることで値を代入出来ます。

# 辞書の作成
    datum = {}
  datum['会社名'] = companyName
  print(datum)

会社名をキーにcompanyNameを値に取得出来ています。

会社住所仕事内容も同じように追加します

# 追加
datum['会社住所'] = companyLocation
datum['仕事内容'] = jobTitle

取得出来ました。

それでは、空のリスト(data)をfor文の前に作成して、リスト(data)に辞書(datum)を追加します。

data = []
for jobCard in jobCards:
  # 会社名
  companyName = jobCard.select_one('.companyName').text
  #会社住所
  companyLocation = jobCard.select_one('.companyLocation').text
  # 仕事内容
  jobTitle = jobCard.select_one('.jobTitle').text.replace('新着','')

  # 辞書の作成
  datum = {}
  datum['会社名'] = companyName
  datum['会社住所'] = companyLocation
  datum['仕事内容'] = jobTitle
  data.append(datum)

print(data)

dataの中に情報を代入しました。

それではdataをpandasを使って、出力していきます。使用するにはインストールをする必要があります。

pandasをインストールする

pandasとはデータ分析をするにも便利なライブラリです。csvに出力するために使用します。

pipを使って、pandasをインストール

pip install pandas

正しくインストールされているか、確認します。

pip list

インストールされています

csvに出力する

pandasをインポートして、csvファイルで出力する

import pandas as pd
df = pd.DataFrame(data)
df.to_csv('company.csv',encoding='utf_8_sig')

python_scraping.pyの同階層にcompany.csvファイルが作成されています。

ファイルを開くと、情報が出力されているので成功です!

A列にindex番号が付与されています。不要な方はto_csv引数にindex=Falseを渡す事で、排除出来ます。

df.to_csv('company.csv',encoding='utf_8_sig',index=False)

以上です!お疲れ様でした!pythonを使うとWeb上にある情報を簡単にスクレイピング出来ます。

もしプログラミングが動かないとか、文法についてよくわからない!なんて人はTwitterのDMにメッセージを頂けると返信します!お気軽にお問い合わせくださいね!

Writer info

プロフィール写真

泉原 遥輝 | Haruki Izumihara

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