エクセルVBA WEBスクレイピングで求人情報を取得する
求人ボックスの求人情報をエクセルシートに転記する。
ネットでいろんなサイトから求人情報が取得できます。ちまちまクリックして閲覧していたのですが、非常に面倒くさい。Webスクレイピングで情報をまとめて取得したい!と思ったので作ってみました。
今回の作成例
「求人ボックスから求人情報を取得する」
処理内容
1 求人ボックスのサイトを開く。
2 求人情報を取得する。エクセルに情報を転記する。
3 次のページがあれば、次のページへ遷移するボタンをクリック。
4 求人情報を取得する。エクセルに情報を転記する。
5 次のページがなくなったら終了。
1~5までの処理を自動化します。
エクセルシートに情報を転記してそこに検索をして、調べたいという自分の需要です。
具体的には、取得したデータの池袋駅の求人を知りたい、というものです。
何がどうなるか
検索して出てきた情報を…
エクセルシートに転記する。
処理コード
Sub IE_Open() Dim IE As InternetExplorer Dim htdoc As HTMLDocument Dim JobOffer_anchor As Object Dim End_Flg, Next_Flg As Boolean '処理時間の計測----------------------------------------------------------------------------------- Dim startTime As Double Dim endTime As Double Dim processTime As Double startTime = Timer '__________________________________________________________________________________________________ Set IE = CreateObject("internetexplorer.application") 'internetexplrerの可視化 IE.Visible = True '求人ボックスのエクセルVBAで検索 IE.Navigate "https://xn--pckua2a7gp15o89zb.com/Excel-VBA-%E7%B5%8C%E9%A8%93%E8%80%85%E3%81%AE%E4%BB%95%E4%BA%8B-%E6%9D%B1%E4%BA%AC%E9%83%BD" 'ieを開く待ち時間の処理 Do While IE.Busy Or IE.ReadyState < READYSTATE_COMPLETE 'Debug.Print IE.Busy & ":" & IE.ReadyState DoEvents Loop r = 0 '情報の書き込み先セル行 'ループ処理。End_Flgがtrueになるまで。------------------------------------------------------------- End_Flg = False: Next_Flg = False Do Until End_Flg = True '開いたIEドキュメントをSetする。 Set htdoc = IE.Document n = 0 'タグの数 'タグ数174以降のSecionタグに求人情報があるので取得。 For Each JobOffer_anchor In htdoc.DocumentElement.all n = n + 1 If n > 174 Then If JobOffer_anchor.tagName = "SECTION" Then 'Debug.Print zaiko_anchor.innerText r = r + 1 Range("a" & r) = JobOffer_anchor.innerText End If End If Next JobOffer_anchor '次のページへをクリックする。 For Each JobOffer_anchor In htdoc.getElementsByTagName("A") If InStr(JobOffer_anchor.className, "c-icon c-icon-other c-navBtn c-navBtn-next p-paging_btn_in ver3") > 0 Then JobOffer_anchor.Click 'ieを開く処理後のスリープ処理(クリックを効かせるため) Application.Wait Now + TimeValue("00:00:02") 'ieを開く待ち時間の処理 Do While IE.Busy Or IE.ReadyState < READYSTATE_COMPLETE 'Debug.Print IE.Busy & ":" & IE.ReadyState DoEvents Loop ms = IE.LocationURL '取得済のIEデータを初期化。 Next_Flg = True Set htdoc = Nothing Exit For ElseIf InStr(JobOffer_anchor.className, "c-icon c-icon-other c-navBtn c-navBtn-prev p-paging_btn_in ver3") > 0 Then End_Flg = True End If Next 'すべての要素を検索しても、次ページがない場合はループを抜ける。 If Next_Flg = False Then: End_Flg = True Loop '処理時間の計測----------------------------------------------------------------------------------- endTime = Timer processTime = endTime - startTime MsgBox "end 処理時間=" & processTime '__________________________________________________________________________________________________ End Sub
使用手順
上記のモジュール「IE_OPEN」を実行。求人ボックス(エクセルVBA 東京都で検索したサイト)をIEで開く。
以上。
次のページがなくなるまで、処理をする。
エクセルシートに求人データが転記される。
池袋で検索!
コード作成での気づき
1 タグ数174以降に求人情報が入っている。
*これに気づくためには、HTMLDocumentをすべてシートに書き出して分析する必要があります。
以下に、すべてのHTMLDocumentをシートに書き出すモジュールを記載しておきます。
すべてのHTMLDocumentをシートに書き出すコード
Sub make_Ichiran() Dim IE As InternetExplorer Dim htdoc As HTMLDocument Dim n As Long Dim objTAG As Object On Error Resume Next n = 0 'サイトにアクセス---------------------------------------------------------------------------------- Set IE = CreateObject("internetexplorer.application") 'internetexplrerの可視化 IE.Visible = True '求人ボックスのエクセルVBAで検索 IE.Navigate "https://xn--pckua2a7gp15o89zb.com/Excel-VBA-%E7%B5%8C%E9%A8%93%E8%80%85%E3%81%AE%E4%BB%95%E4%BA%8B-%E6%9D%B1%E4%BA%AC%E9%83%BD" 'ieを開く待ち時間の処理 Do While IE.Busy Or IE.ReadyState < READYSTATE_COMPLETE 'Debug.Print IE.Busy & ":" & IE.ReadyState DoEvents Loop Set htdoc = IE.Document '__________________________________________________________________________________________________ For Each objTAG In htdoc.DocumentElement.all n = n + 1 Cells(n + 2, 1) = IE.Name Cells(n + 2, 4) = "'" & TypeName(objTAG) Cells(n + 2, 5) = "'" & objTAG.tagName Cells(n + 2, 6) = n Cells(n + 2, 7) = objTAG.Name Cells(n + 2, 8) = "'" & Left(objTAG.innerText, 256) Cells(n + 2, 9) = "'" & Left(objTAG.innerHTML, 256) Cells(n + 2, 10) = "'" & Left(objTAG.outerHTML, 256) Next MsgBox "end" End Sub
2 SECTONタグに求人情報のまとめたものがある。
3 次のページをクリックした後に、2秒処理待ちを加えないと次のデータに更新されない。
まとめ
以上になります。ネット情報のちまちま検索から卒業できそうな兆しが見えました。
DB上にするには、もう少し処理に工夫が必要ですがそこまでは求めていなかったのでSECTONをそのまま転記しました。
WEBスクレイピングは、サイトごとに分析をしてから、処理方法を決める必要があるので作るまでは時間がかかりますが、作った後はすごい楽です。