ラベル read_html の投稿を表示しています。 すべての投稿を表示
ラベル read_html の投稿を表示しています。 すべての投稿を表示

2018年7月11日水曜日

ハローワークインターネットサービスから求人情報を取得する(python,pandas,スクレイピング)

私は現在、求職中です。どんな求人があるのか気になるので、ハローワークインターネットサービスから求人情報を取得してみることにしました。

ハローワークインターネットサービス 求人情報基本条件入力
https://www.hellowork.go.jp/servicef/130020.do?action=initDisp&screenId=130020


上記から検索条件を指定して検索すると、職種、雇用形態、賃金などが記載された「求人情報一覧」という表がでてきます。



この表を取得することを目指します。

・インポート
import pandas as pd
from time import sleep

pandasのほか、timesのsleepをインポート。sleepは一時的に処理を止めるときに使います。

・URLを作る
pageno=1

url=("https://www.hellowork.go.jp/servicef/130050.do?"
     "fwListNaviBtn1=1&"
     "fwListNowPage=1&"
     "fwListLeftPage=" + str(pageno) +"&" #ページ番号
     "fwListNaviCount=1&"
     "kyujinShuruiHidden=1&" #フルタイム
     "koyoKeitaiHidden=1&" #正社員
     "todofukenHidden=38&" #愛媛県
     "screenId=130050&"
     "xab_vrbs=detailJokenDispButton,commonNextScreen,detailJokenChangeButton,commonDetailInfo")

情報を取得するURLを作成します。普通に検索しただけではURLが出てこないので、ソースと下記ページを参考に作りました。

ハローワークの一覧を簡易クロールして求人ページのURLを抽出する

今回は「フルタイム」「正社員」「愛媛県」の求人を指定しました。それぞれの数値はソースなどで確認してください。また、URLの前半部分の「13050」とscreenIdは変更することがあるようです。

・表の取得
df_tmp=pd.read_html(url,match="求人番号",header=0)
df=df_tmp[0]

作成したURLからread_htmlで表を取得します。read_htmlの使い方は以前書きました。

プログラミング学習:pandasでweb上の表を取得する。(python)

read_htmlでは、webページ上の表を一つずつリストとして取得します。上記記事ではリスト番号から目的の表を探しましたが、今回は match="求人番号"で"求人番号"という言葉が含まれている表だけを取得しています。header=0で1行目を列名として使います。

df=df_tmp[0]で目的の表を取り出し。match指定していしているので目的の表1つだけがdf_tmpに取得されているはずです(要確認)

・複数ページ取得
tables=pd.DataFrame()

for pageno in range(1,4):
    print(pageno)
    url=("https://www.hellowork.go.jp/servicef/130050.do?"
       "fwListNaviBtn1=1&"
       "fwListNowPage=1&"
       "fwListLeftPage=" + str(pageno) +"&"
       "fwListNaviCount=1&"
       "kyujinShuruiHidden=1&" #フルタイム
       "koyoKeitaiHidden=1&" #正社員
       "todofukenHidden=38&" #愛媛県
       "screenId=130050&"
       "xab_vrbs=detailJokenDispButton,commonNextScreen,detailJokenChangeButton,commonDetailInfo")
    
    df_tmp=pd.read_html(url,match="求人番号",header=0)
    tables=tables.append(df_tmp[0]).reset_index(drop=True)
    
    sleep(1)


1~3ページ目まで取得する例です。各ページの表をtablesにappendで結合します。ページ移行時にsleepで1秒待機しています。

出力(一部)
Unnamed: 0NO求人番号職種雇用形態/賃金(税込)就業時間/休日/週休二日産業沿線/就業場所受理日
0NEW!◎2138010- 23863381一般作業正社員/206,100円~274,800円変形 1ヶ月単位1)08:15~17:00/日他/その他建設業のうち一般土木建築工事業愛媛県伊予郡松前町平成30年7月10日
1NEW!◎2238010- 23866581運転手(大型)正社員/250,000円~400,000円変形 1ヶ月単位1)08:00~17:00/他/その他運輸業,郵便業のうち特定貨物自動車運送業愛媛県松山市平成30年7月10日
2NEW!◎2338010- 23868781介護支援専門員(施設)正社員/165,000円~220,000円変形 1ヶ月単位1)08:30~17:30/他/その他医療,福祉のうち老人福祉・介護事業愛媛県東温市平成30年7月10日
3NEW!◎2438010- 23886881大型車両整備士正社員/287,086円~337,098円1)08:30~17:30/日祝他/その他運輸業,郵便業のうち一般貨物自動車運送業愛媛県東温市平成30年7月10日
4NEW!◎2538010- 23893781看護師・准看護師正社員/190,000円~240,000円変形 1ヶ月単位1)08:45~18:152)08:45~18:303)08:45~12:4...医療,福祉のうち一般診療所愛媛県松山市平成30年7月10日


無事、一覧表の取得が出来ました。これを整理して、ざっくりどんな業種・地域に求人が多いかや賃金の傾向などを見てみたいと思います。


参考:
//SyntaxHighlighter CDNより https://cdnjs.com/libraries/SyntaxHighlighter // 対応言語