本日はPHPスクレイピングについて。
PHPに関しては昔、正規表現でごりごりやってましたね。これを使えば何でもできるんで一番早いです。
が・・保守性、可読性ともによくはないので、今回はHTMLパーサーを使った方法をメモリます。
PHPのスクレイピングはRubyにも負けず劣らずたくさんありますが、一番簡単なのが下記の方法でしょう。
1 2 3 4 |
$html = file_get_contents ( ここに取得したいHTMLのURLを入れる ); $dom = @DomDocument::loadHTML ( $html ); $xml = simplexml_import_dom ( $dom ); $dataList = $xml->xpath ( xpathでの要素の指定 ); |
上記のように書き,「xpathでの要素の指定」のところにxpathの記法で要素を指定してあげればOKです。
単純にidとかで指定する場合はxpath(“//div[@id=”sample_id”]’)とかで簡単なんですが、classの場合には複数のクラスがある場合が普通です。
例えば
1 |
<li class="hoge foo bar">sample</li> |
といったクラスがあったときに
1 |
$dataList = $xml->xpath ( '//li[@class="hoge"]' ); |
とやっても取得できません。
1 |
$dataList = $xml->xpath ( '//li[contains(@class,"hoge")]' ); |
のようにかかないとダメなのです。
あとは$dataListをループで回し、取得してあげればOKです。配列にしてしまうのが一番簡単でしょう。
参考リンク