PHPでWebスクレイピングし、バイトルから求人情報を取得

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

まずはこちら、PHPのWebスクレイピングに必要なphpQueryをダウンロードします。
phpquery

以下は、バイトルの求人情報をWebスプレイピングして取得するサンプルです。ファイル構成や取得間隔、バックグラウンドの実行等について、先に書いたタウンワーク版と同じです。こちらも合わせてご覧ください。

PHPでWebスクレイピングし、タウンワークから情報を取得

<html lang="ja">
	<head>
		<meta charset="UTF-8">
		<title>バイトル求人情報取得</title>
	</head>

	<body>
		<h1>バイトル</h1>
	<?php

		// 例 $base_url = "https://www.baitoru.com/kanto/jlist/tokyo/";
		$base_url = "検索結果のURL";
		$domain = "https://www.baitoru.com";
		$nightwork = "show"; 
	
		require_once("./phpQuery-onefile.php");
		
		// setup(バイトルは1ページ30件)
		$startPage = 1; //開始するページ
		$maxPage = 1; //取得するページ数
		$limit = 3; //取得する求人数
		
		$sleep = 10; //取得間隔
		$posts = [];
		
		// setup 指定する親要素
		$box = "article.list-jobListDetail";
		$child_box ="#contents";			
		$i=1;		
		foreach (range($startPage, $maxPage) as $page) {
				
			// setup 
			if($page==1){
		    	$get_url = $base_url;
			} else {
				$get_url = "{$base_url}page{$page}/";
			}
			
		    $dom = \phpQuery::newDocumentFile($get_url);
		
		    foreach ($dom[$box] as $row) {
		
				sleep($sleep);
										
				// setup 
				$child_url = pq($row)->find('h3 a')->attr('href');
				if(strpos($child_url,$domain) === false){
					$child_url = $domain.$child_url;
				}
				
				$child_job = pq($row)->find('.pt03 dl:first dd ul li')->text();
				$child_salary = pq($row)->find('.pt03 dl:eq(1) dd ul li')->text();
				$child_time = pq($row)->find('.pt03 dl:eq(2) dd ul li')->text();			
				
				// ナイトワーク含む・含まないの設定
				if($nightwork!="show") {
					if(!mb_strpos($child_job,"ナイトワーク", 0, "UTF-8") === false){
						continue;
					}
				}
	
				if($child_url!="") {
					$child_dom = phpQuery::newDocument(file_get_contents($child_url));
								
					foreach ($child_dom[$child_box] as $child_row) {
						// setup group start
						$child_title = pq($child_row)->find('.detail-detailHeader h2')->text();
						$child_companyname = pq($child_row)->find('.detail-companyInfo p:first')->text();
						$child_website = pq($child_row)->find('.detail-companyInfo a.link02')->attr('href');
						$child_tel = pq($child_row)->find('.js-telModule a:first')->attr('data-obo_tel');
						$child_place = pq($child_row)->find('.detail-basicInfo dl.js-da-target ul li:first')->text();					
						
						// trim
						$child_job = trim($child_job);
						$child_salary = trim($child_salary);
						$child_time = trim($child_time);
						
						echo "<div>".$i."</div>";
						echo "<div>タイトル:<br>".$child_title."</div>";
						echo "<div>URL:<br>".$child_url."</div>";	
						echo "<div>職種:<br>".$child_job."</div>";
						echo "<div>給与:<br>".$child_salary."</div>";
						echo "<div>時間:<br>".$child_time."</div>";
						echo "<div>募集元:<br>".$child_companyname."</div>";
						echo "<div>場所:<br>".$child_place."</div>";
						echo "<div>電話番号:<br>".$child_tel."</div>";
						echo "<div>Webサイト:<br>".$child_website."</div>";	
						echo "<hr>";
							
						$i++;
						if($limit){
							if($i>$limit){ break 3; }
						}
					}
				}
		    }
		}
	
	?>		
	</body>

</html>

便利なWebスクレイピングですが、ご利用は自己責任でお願いします!