読者です 読者をやめる 読者になる 読者になる

halka-tech

技術的なことを書きます

シゴトガイドの求人情報をパースする

php

求人情報誌で有名な北海道アルバイト情報社が発行する北海道各地で○○シゴトガイドの求人情報をパースしました.
一冊100円で販売されていますが,ウェブからも求人情報を見ることができます.インターネットはすばらしいですね.
20件ずつ出力されますが,一気に見たいので書きました.
PHP Simple HTML DOM Parser http://sourceforge.net/projects/simplehtmldom/でパースしました.

構造

一覧が表示される訳ですが,

初心者でも安心!楽しい職場です!|画|
コーススタッフ【○○株式会社】 |像|
[応募要項抜粋]

コーススタッフ【○○株式会社】
[応募要項抜粋]

の2パターンがあることが分かったので,これらに対応するように書きました.前者は多分金額がいくらか高いんでしょうね.

流れ

  1. 求人件数を取得する
  2. 求人件数/20でページ数を求める
  3. 1ページずつパースする
    1. 金額が高い方があるとしてエレメントにアクセスする
    2. 普通の方のエレメントにアクセスする
  4. 表示する関数に渡して,識別id,仕事内容,応募要項の抜粋を表示
  5. 繰り返す

処理時間

それ相応の時間がかかります.

ソース

<?php
$b=time();
$GLOBALS['num']=1;

require_once 'simple_html_dom.php';

function br(){
	//echo "\n";
	echo "<br />";
}

function disp($job){
	foreach($job as $jt){
		//仕事内容[会社名]の表示
		echo '<h2>['.$GLOBALS['num'].'] ';
		echo mb_convert_encoding($jt->find('a',0)->innertext,'utf-8','sjis');
		echo '</h2>';
		br();
		//応募要項の表示
		echo '<p>';
		echo mb_convert_encoding($jt->find('p',0)->innertext,'utf-8','sjis');
		echo '</p>';
		br();
		//識別idの抽出と表示
		preg_match("/ahicd=[0-9]+/",$jt->find('a',0)->href,$t);
		preg_match("/[0-9]+/",$t[0],$url);
		echo '<small><a href="http://hakodate.sgnavi.com/job_detail.php?ahicd='.$url[0].'">'.$url[0].'</a></small>';
		br();br();
		$GLOBALS['num']++;
	}
};
//取得先
$address='http://hakodate.sgnavi.com/job_list.php?sidx=%8C%9F%8D%F5%2CF%2C%2C%2C%2C%2CF1%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C1%2CA%2C';
//とりあえず求人件数を取得
$html = file_get_html($address);
$count=$html->find('div[id=result-numhd]',0)->find('strong',0)->innertext;
echo $count;br();
//ページ数の勘定
echo $p_count=ceil($count/20);br();
unset($html);
//各ページのパース
for($i=1;$i<=$p_count;$i++){
	//ページアドレスの生成
	$get_address=$address.'&fin_page='.$i;
	//htmlの取得
	$html = file_get_html($get_address);
	//高い方のエレメントにアクセス
	$job=$html->find('td.cbody');
	disp($job);
	//普通のエレメントにアクセス
	$job=$html->find('div.article');
	disp($job);
	unset($html);
}
$e=time();
echo $e-$b.'[sec]';//かかった時間の表示
?>

取得先について

ウェッブサイトの検索一覧ページのurlそのまま.
函館市内全域ならば
ttp://hakodate.sgnavi.com/job_list.php?sidx=%8C%9F%8D%F5%2CF%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C%2CAb%2C%2C%2C%2C%2C1%2CW%2C&fw=

今後

シゴトガイドがRSSでの出力をしていないので,RSSの出力.