備忘録

なんとなく暇なときにでも....

PHPでライブラリなどを使用せずに、WEBページをスクレイピングする

Simple HTML DOM Parser や Goutteなどがありますが、ライブラリなどを使用した際の保守性などを考えて、ネイティブのPHPだけでスクレイピングを行ってみます。

一応、githubにあげておりますので、詳しくはそちらから! github.com
HTMLを整形できるらしいDOMDocumentクラスを使用しました。(PHP5から追加されたクラスのようです。今回はPHP7を使用しているので、このクラスを使用します。)
まずは、DOMDocumentをインストールします。

[php] DOMDocumentでClass not foundのエラーが出た場合 | 迷走男子!!

使い方は簡単でした。

$html = file_get_contents('http://hogehoge/');
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xml = simplexml_import_dom($dom);//解析したXML文字列をオブジェクトに変換します。
var_dump($xml);

object(SimpleXMLElement)#2 (4) {
  ["@attributes"]=>
  array(2) {
    ["dir"]=>
    string(3) "ltr"
    ["lang"]=>
    string(2) "ja"
  }
  ["comment"]=>
  object(SimpleXMLElement)#3 (0) {
  }
....

のように$xmlは、このままオブジェクトのままなので、私には扱いづらかったので、配列形式に変換します。

qiita.com

$json = json_encode($xml);
$scraped_data = json_decode($json,true);

これで$scraped_dataは、配列形式に変換されました。

var_dump($scraped_data);

array (4) {
  ["@attributes"]=>
  array(2) {
    ["dir"]=>
    string(3) "ltr"
    ["lang"]=>
    string(2) "ja"
  }

これでだいぶ扱いやすくなったので、必要な情報を抽出して、DBに格納していきます。
PDOを使用します。以下のサイトなどを参考にしつつ実装しました。

labo-iwasaki.com

PHPでデータベースに接続するときのまとめ - Qiita

qiita.com

PDO selectでデータを取得、fetchAll、queryメソッド | PHP入門~bituse~

www.flatflag.nir87.com

www.flatflag.nir87.com

www.flatflag.nir87.com




参考

PHPでHTMLをパースして解析する簡単な方法 | 三度の飯とエレクトロン

tech.recruit-mp.co.jp

PDO_MYSQLをインストールする方法 - [PHP + PHP] ぺんたん info