プログラムでおかえしできるかな

Python、フェイジョア、日常のあれこれでお返し、元SEの隠居生活。

ハローワークの求人情報を自動で検索するアプリ(スクレイピング)

このエントリーをはてなブックマークに追加

ハローワークの求人情報を指定した条件で検索し、CSVに保存するアプリを公開します。

検索条件はひな形を修正して設定します。実行すると、検索結果をcsvファイルに出力します。エクセルなどで見られます。
ブラウザにChromeFirefoxをお使いであれば、Webドライバーと アプリを取得するだけで動作します。
就職活動のお役に立てれば幸いです。

Firefox に加え Chrome の対応を追加しました。(更新:2021-07-04)
Web ドライバーの取得を自動化しました。(更新:2023-02-20)
職種選択のHTMLの変更に対応しました(更新:2023-08-22)

Pythonで作成 アプリの作成方法が知りたい方は、別記事をご覧ください。
📖 ハローワーク求人情報のスクレイピング【Python】 🔗
更新:2023-02-20

◆概要

事前にハローワークの求人情報の検索条件を設定ファイルに設定し、アプリを実行すると検索結果をcsvファイルに出力します。
検索結果は50件まで出力します。
csvファイルをエクセルで見ると次の様になります。

検索結果

まずは、普段の使い方から説明します。
条件設定が気になる方は、こちら⤵から。
準備方法を知りたい方は、こちら⤵から。

目次

◆普段の使い方

普段はアプリ Scraping4HW.exe を起動するだけです。1

検索条件を変える場合:検索条件の設定を参照

結果はcsvファイル(ファイル名:「月日_時分_秒.csv」)に出力します。検索結果は最大50件までです。
エクセルやメモ帳などで見られます。

◇実行中の表示

実行すると以下の表示が順次出ます。
通常、実行開始までに 10秒以上かかります。ご了承ください。

start browsing
got url, start selecting
selected, start job search
got jobs, start analysis
100%|██████████████████████████████████████| 37/37 [00:21<00:00,  1.70件/s]
analyzed, start writing csv
finished

Web ドライバーをダウンロードする場合は次のような表示も出ます。

[WDM] - Downloading: 100%|███████████████████████████████████████████| 6.79M/6.79M 

エラーが発生した場合、まず、設定ファイルを確認してください。
いつも動いている設定ファイルでエラーが発生した場合、再実行してみてください。
それでもエラーが発生する場合、お問い合わせください。
ただし、回答をお約束するものではありません。お急ぎの場合は手動で検索してください。

◇出力されるCSVについて

◎出力項目

  • 求人区分、事業所名、就業場所、仕事の内容、雇用形態、賃金、就業時間、休日、年齢、求人番号、公開範囲 など
  • 仕事の内容には、詳細情報の【必要な経験等】を含みます。

csvについて

  • csvファイルは、「月日_時分_秒.csv」(例:0123_1122_55.csv)というファイル名で、実行ファイルがあるフォルダに作成します。
  • 1行目は、見出しです。見出しは、1件目のデータによって作られます。
  • 検索結果によって、出力される項目数が変わるため、行によって、見出しと合わないものがあります。
    読み替えるか、適宜、ご自分で調整してください。

◆検索条件の設定

設定ファイル settings.py を修正して条件を設定します。2

設定項目 ▷就業場所⤵ ▷職種⤵ ▷その他の条件

◇就業場所

就業場所を設定します。3つまで指定できます。
1件分として、先頭に都道府県名、その後に市町村名を5つまで指定できます。
市町村名は省略可です。

市町村名は、ハローワーク サイトの『住所 選択画面』の選択肢の文字を省略しないで設定してください。
ひとつの設定値は "" で括ってください。 設定値の区切りは , カンマです。
Pythonというプログラミング言語の書式に従っています。 ," は同じように使用してください。

["都道府県名", "市町村名", "市町村名", "市町村名", "市町村名", "市町村名"]

例
tdks = [
          ["東京都", "千代田区"]
        , ["神奈川県", "横浜市西区", "横浜市中区", "横浜市南区", "横浜市緑区", "横浜市金沢区"]
        , ["埼玉県"]
       ]

tdks = [
          ["東京都", "千代田区"]
       ]

tdks = [
          ["東京都", "千代田区", "港区"]
        , ["神奈川県"]
        , ["埼玉県"]
        ]

◇職種

職種を設定します。3つまで指定できます。
1件分として、先頭に大分類、その後に詳細を5つまで指定できます。
詳細は省略可です。

大分類、詳細は、ハローワーク サイトの『職種 選択画面』の選択肢の文字を省略しないで設定してください。
ひとつの設定値は "" で括ってください。 設定値の区切りは , カンマです。
Pythonというプログラミング言語の書式に従っています。 ," は同じように使用してください。

["大分類", "詳細", "詳細", "詳細", "詳細", "詳細"]

例
sksus = [
          ["事務、管理職", "一般事務、事務補助"]
        ]

sksus = [
          ["事務、管理職"]
        ]
        
sksus = [
          ["営業", "不動産営業", "金融・保険営業", "飲食料品販売営業", "自動車販売営業", "製品受注営業"]
        , ["事務、管理職", "一般事務、事務補助"]
        ]

◇その他の条件

◎設定可能な項目

条件として、ハローワーク サイトで以下のように操作して設定できる項目を設定できます。

検索条件はハローワーク サイトの検索条件設定画面と設定ファイル settings.py のコメントを照らし合わせて設定場所を判断してください。

  • クリックして設定する項目
  • テキストを入力して設定する項目
  • 選択して設定する項目

具体的にどの項目が設定可能かは、設定ファイル settings.py で確認してください。

※「希望する産業」、「必要な免許・資格」は免許・資格を選択した後に表示される番号で設定できます。

◎設定方法

設定ファイルsettings.pyをメモ帳などで開き、修正後、保存します。

  • クリックして設定する項目
    条件として加えたい項目の FalseTrue に変更します。
    FalseTrue はこの文字の通り記述してください。
  • テキストを入力して設定する項目
    条件として加えたい項目の "" の間に設定値を入力します。
  • 選択して設定する項目
    条件として加えたい項目の [] の間に設定値を入力します。
    設定値は "8" と言うように ""で括ります。 具体的には、 ["8"] とします。

◇設定ファイルの詳細

参考までに設定ファイルを掲載します。

# ドライバ(geckodriver.exe)のパスを指定 exeファイル名を含めること
executable_path = "C:\MyProgram\geckodriver.exe"

# 選択項目

# 都道府県
tdks = [
          ["東京都"]
        , ["埼玉県", "川口市"]
        , ["神奈川県", "横浜市鶴見区", "横浜市南区", "横浜市磯子区", "横浜市中区", "横浜市西区"]
        ]

# 職種
sksus = [["技術職(建設、開発、IT)、専門職", "ソフトウェア開発技術者、プログラマー", "その他の情報処理・通信技術者"]
        , ["事務、管理職", "一般事務、事務補助"]
        ]

_kensaku = {    
      "ID_kSNoJo": ""                     # text 求人番号
    , "ID_kSNoGe": ""                     # text 求人番号
    , "ID_kjKbnRadioBtn1": False          # radio 一般求人
    , "ID_ippanCKBox1": False             # checkbox フルタイム
    , "ID_ippanCKBox2": False             # checkbox パート
    , "ID_kjKbnRadioBtn2": False          # radio 新卒・既卒求人
    , "ID_kjKbnRadioBtn3": False          # radio 季節求人
    , "ID_kjKbnRadioBtn4": False          # radio 出稼ぎ求人
    , "ID_kjKbnRadioBtn5": False          # radio 障害のある方のための求人
    , "ID_sGSYACKBox1": False             # checkbox フルタイム
    , "ID_sGSYACKBox2": False             # checkbox パート
    , "ID_nenreiInput": ""                    # text 年齢
    , "ID_nenreiCKBox1": False                # checkbox 不問のみ
    , "ID_nenreiCKBox2": False                # checkbox 不問をのぞく
    , "ID_sKGYBRUIJo1": ""                    # text 職業分類
    , "ID_sKGYBRUIGe1": ""                    # text 職業分類
    , "ID_sKGYBRUIJo2": ""                    # text 職業分類
    , "ID_sKGYBRUIGe2": ""                    # text 職業分類
    , "ID_sKGYBRUIJo3": ""                    # text 職業分類
    , "ID_sKGYBRUIGe3": ""                    # text 職業分類
    , "ID_koyoFltmCKBox1": False          # checkbox 正社員
    , "ID_koyoFltmCKBox2": False          # checkbox 正社員以外
    , "ID_koyoFltmCKBox3": False          # checkbox 有期雇用派遣労働者
    , "ID_koyoFltmCKBox4": False          # checkbox 無期雇用派遣労働者
    , "ID_koyoPartCKBox5": False          # checkbox パート労働者
    , "ID_koyoPartCKBox6": False          # checkbox 有期雇用派遣パート
    , "ID_koyoPartCKBox7": False          # checkbox 無期雇用派遣パート
    , "ID_newArrivedCKBox1": False            # checkbox 新着(当日・前日)の求人情報から検索
    , "ID_newArrivedCKBox2": False            # checkbox 新着(1週間以内)の求人情報から検索
    , "ID_freeWordRadioBtn0": False           # radio OR検索
    , "ID_freeWordRadioBtn1": False           # radio AND検索
    , "ID_freeWordInput": ""              # text フリーワード
    , "ID_nOTKNSKFreeWordInput": ""           # text をのぞく
    , "ID_kJNoJo1": ""                        # text 求人番号
    , "ID_kJNoGe1": ""                        # text 求人番号
    , "ID_kJNoJo2": ""                        # text 求人番号
    , "ID_kJNoGe2": ""                        # text 求人番号
    , "ID_kJNoJo3": ""                        # text 求人番号
    , "ID_kJNoGe3": ""                        # text 求人番号
    , "ID_kJNoJo4": ""                        # text 求人番号
    , "ID_kJNoGe4": ""                        # text 求人番号
    , "ID_kJNoJo5": ""                        # text 求人番号
    , "ID_kJNoGe5": ""                        # text 求人番号
    , "ID_jGSHNoJo": ""                       # text 事業所番号
    , "ID_jGSHNoChuu": ""                 # text 事業所番号
    , "ID_jGSHNoGe": ""                       # text 事業所番号
    }

_shosai_settei = {    
      "ID_shoyoAriCKBox1":  False             #checkbox",,あり
    , "ID_shgJnStaJiCmbBoxHH": []                #select時(0-23)["8"]と指定、時と分はセットで指定
    , "ID_shgJnStaFunCmbBoxMM": []               #select分(0,10,20,30,40,50)
    , "ID_shgJnEndJiCmbBoxHH": []                #select時(0-23)["8"]と指定、時と分はセットで指定
    , "ID_shgJnEndFunCmbBoxMM": []               #select分(0,10,20,30,40,50)
    , "ID_kiboShgJnCKBox1":  False                #checkbox",,交代制(シフト制)を含まない
    , "ID_kiboShgJnCKBox2":  False                #checkbox",,裁量労働制を含まない
    , "ID_kiboShgJnCKBox3":  False                #checkbox",,変形労働時間制を含まない
    , "ID_jkgiRadioBtn0":  False              #radio",,指定しない
    , "ID_jkgiRadioBtn1":  False              #radio",,あり
    , "ID_jkgiRadioBtn2":  False              #radio",,なし
    , "ID_thkin":  ""                         #text",
    , "ID_holidayCKBox1":  False              #checkbox",,月曜日
    , "ID_holidayCKBox2":  False              #checkbox",,火曜日
    , "ID_holidayCKBox3":  False              #checkbox",,水曜日
    , "ID_holidayCKBox4":  False              #checkbox",,木曜日
    , "ID_holidayCKBox5":  False              #checkbox",,金曜日
    , "ID_holidayCKBox6":  False              #checkbox",,土曜日
    , "ID_holidayCKBox7":  False              #checkbox",,日曜日
    , "ID_holidayCKBox8":  False              #checkbox",,祝日
    , "ID_shukFtskRadioBtn0":  False          #radio",,指定しない
    , "ID_shukFtskRadioBtn1":  False          #radio",,毎週
    , "ID_shukFtskRadioBtn2":  False          #radio",,その他
    , "ID_hakenUkeoinCKBox1":  False          #checkbox",,派遣
    , "ID_hakenUkeoinCKBox2":  False          #checkbox",,請負
    , "ID_hakenUkeoinCKBox3":  False          #checkbox",,派遣・請負を含まない
    , "ID_kanyuHknCKBox1":  False             #checkbox",,雇用保険
    , "ID_kanyuHknCKBox2":  False             #checkbox",,労災保険
    , "ID_kanyuHknCKBox3":  False             #checkbox",,健康保険
    , "ID_kanyuHknCKBox4":  False             #checkbox",,厚生年金
    , "ID_kanyuHknCKBox5":  False             #checkbox",,公務災害補償
    , "ID_kanyuHknCKBox6":  False             #checkbox",,財形
    , "ID_kanyuHknCKBox7":  False             #checkbox",,企業年金
    , "ID_kanyuHknCKBox8":  False             #checkbox",,退職金制度
    , "ID_kanyuHknCKBox9":  False             #checkbox",,退職金共済
    , "ID_keiyakuKsnNoKnsiAriCKBox1":  False  #checkbox",,あり
    , "ID_knsiAriCKBox1":  False              #checkbox",,原則更新
    , "ID_knsiAriCKBox2":  False              #checkbox",,条件あり
    , "ID_tnseiRadioBtn0":  False             #radio",,指定しない
    , "ID_tnseiRadioBtn1":  False             #radio",,あり
    , "ID_tnseiCmbBox":  []                      #select歳以上(60-70)
    , "ID_tnseiRadioBtn2":  False             #radio",,なし
    , "ID_nyukyoKaCKBox1":  False             #checkbox",,単身用あり
    , "ID_nyukyoKaCKBox2":  False             #checkbox",,世帯用あり
    , "ID_riyoKanoNaTjsAriCKBox1":  False     #checkbox",,あり
    , "ID_jgshMeiIn":  ""                     #text",
    , "ID_nozokuCKBox1":  False                   #checkbox",,のぞく
    , "ID_jginSuRadioBtn0":  False                #radio",,指定しない
    , "ID_jginSuRadioBtn1":  False                #radio",,10人以上
    , "ID_jginSuRadioBtn2":  False                #radio",,100人以上
    , "ID_jginSuRadioBtn3":  False                #radio",,300人以上
    , "ID_jginSuRadioBtn4":  False                #radio",,1000人以上
    , "ID_kiboSuruSngBrui1In":  ""                #text",
    , "ID_kiboSuruSngBrui2In":  ""                #text",
    , "ID_kiboSuruSngBrui3In":  ""                #text",
    , "ID_grkiFumonCKBox1":  False                #checkbox",,不問
    , "ID_hynaKikntFumonCKBox1":  False           #checkbox",,不問
    , "ID_hynaMenkyoSkkuFumonCKBox1":  False  #checkbox",,不問
    , "ID_jdsMenkyoCKBox1":  False                #checkbox",,必須
    , "ID_jdsMenkyoCKBox2":  False                #checkbox",,あれば尚可
    , "ID_jdsMenkyoCKBox4":  False                #checkbox",,必須・あれば尚可をのぞく
    , "ID_jdsMenkyoCKBox3":  False                #checkbox",,AT限定可
    , "ID_menkyoSkku1In":  ""                 #text",
    , "ID_menkyoSkkuNo1CKBox1":  False            #checkbox",,のぞく
    , "ID_menkyoSkku2In":  ""                 #text",
    , "ID_menkyoSkkuNo2CKBox1":  False            #checkbox",,のぞく
    , "ID_menkyoSkku3In":  ""                 #text",
    , "ID_menkyoSkkuNo3CKBox1":  False            #checkbox",,のぞく
    , "ID_sonotaCKBox1":  False                   #checkbox",,書類選考なし
    , "ID_sonotaCKBox2":  False                   #checkbox",,正社員登用あり
    , "ID_sonotaCKBox3":  False                   #checkbox",,マイカー通勤可
    , "ID_sonotaCKBox4":  True                    #checkbox",,転勤の可能性なし
    , "ID_sonotaCKBox5":  False                   #checkbox",,在宅勤務
    , "ID_sonotaCKBox6":  False                   #checkbox",,駅近(最寄り駅から徒歩10分以内)
    , "ID_sonotaCKBox7":  False                   #checkbox",,屋内の受動喫煙対策あり
    , "ID_sonotaCKBox8":  False                   #checkbox",,トライアル雇用併用求人
    , "ID_sonotaCKBox9":  False                   #checkbox",,UIJターン歓迎求人
    }

◆使えるようにするには

本アプリではブラウザとして、ChromeFirefox に対応しています。
対応のブラウザをインストールしていることが前提になります。

  1. アプリと設定ファイルを取得します⤵
  2. Webドライバを取得し、パス ブラウザを設定ファイルに設定します⤵
  3. 検索条件を設定します⤴

◇アプリと設定ファイルの取得

アプリと設定ファイルを含んだzipファイルを下記からダウンロードします。
ダウンロードしたzipファイルを解凍すると次のファイルができます。
任意のひとつのフォルダに2つのファイルを保存します。

  1. プログラム: Scraping4HW.exe
  2. 設定ファイル: settings.py

使い方は「普段の使い方」を参照してください。

◇ブラウザの指定

使用するブラウザを指定します。
※Web ドライバーを手動で取得していた時(ver 1.0.1)の設定はそのままで動作します。

設定ファイル settings.pyexecutable_path に次のどちらかを設定します。

  • Chrome の場合:chromedriver.exe
  • Firefox の場合:geckodriver.exe

※すべて小文字で記述します。

   例
        executable_path = "chromedriver.exe"
        または
        executable_path = "geckodriver.exe"

ご注意 本アプリは、上記の設定を見て Chrome 用または Firefox 用の Web ドライバーを自動で取得します。
Chrome ブラウザは頻繁にバージョンアップされ、そのバージョンに合った Web ドライバーが必要になりますが、それも自動で取得します。
Web ドライバーは、ユーザーのホーム\.wdm フォルダに保存されます。

◇Webドライバの取得と設定

削除:2023-02-20

削除しました(参考のために残してあります)

◎Webドライバの取得

本アプリでは、ブラウザとしてFirefoxを使用しています。
本アプリではブラウザとして、ChromeFirefoxに対応しています。
お使いのブラウザに合わせてWebドライバを取得します。
Chrome用Webドライバ(実際にはchromedriver)、または
Firefox用Webドライバ(実際にはgeckodriver)をダウンロードして解凍します。
取得先は、以下です。

お手数ですが… Webドライバが再配布可能なのかどうか、良く理解できなかったので、別途ダウンロードをお願いします。

◎Webドライバの保存場所の設定

アプリにWebドライバの場所を教えます。
解凍したWebドライバのフルパスを設定します。 設定は、設定ファイルsettings.pyに以下を設定します。
設定ファイルの2行目の executable_path に Webドライバ(chromedriverまたはgeckodriver) の絶対パスを記述します

   例
        executable_path = "C:\MyProgram\chromedriver.exe"
        または
        executable_path = "C:\MyProgram\geckodriver.exe"

※アプリはこの設定でお使いのブラウザを判断します

◆オプション

公開直前にオプションを用意しました。 オプションはコマンドライン引数として指定します。
コマンドプロンプトを起動して使用してください。

  • 使用方法:Scraping4HW.exe [a] [b]
    abまたは両方を指定します。
    例:Scraping4HW.exe a
  • 引数
    • aCSVファイルを起動
      CSVファイルをプログラムと関連付けしておいてください。
    • b:ブラウザを表示
      スクレイピング中のブラウザ動作を表示します。
      動きを見たい場合やエラーが出た場合にご利用ください。

この設定をコマンドライン引数なしで使用したい場合、設定ファイル settings.py を修正してオプションの設定値を True にしてください。
settings.pyFalse のオプションは、コマンドライン引数で変えることができます。

# コマンドライン引数
flag_a = False       # CSVファイルを起動
flag_b = False       # ブラウザを表示

◆免責事項

ご利用に際しては、『免責事項』をご確認ください。

初めに手動での検索結果と、本アプリでの検索結果が同じになることを確認することをお勧めします。

すべての条件を指定しての動作確認は行っておりません。
お気づきの点がございましたら『お問い合わせ』からお問い合わせください。
ただし、回答をお約束するものではありません。お急ぎの場合は手動で検索してください。

◆更新情報

  • 1.1.0:2023/08/22
  • 1.0.2:2023/02/20
    • Web ドライバーの自動取得に対応
  • 1.0.1:2021/07/04
    • Firefox ブラウザに加え Chrome ブラウザの対応
    • 職種の選択が間に合わない問題を修正

◆参考

投稿: 、更新:

  1. 検索条件の設定に慣れないうちは、コマンドプロンプトから実行することを勧めます。エラーが出た場合にメッセージを確認できるためです。
  2. 設定ファイルsettings.pyはテキストファイルです。メモ帳などで修正できます。