はじめに
以外とphpでのスクレイピング
について書いてあるブログとか
無かったんでちょっと書いてみる
構文はjQueryとだいたい同じ
phpjquery-onefileのダウンロード
以下のサイトからライブラリを
ダウンロードする
https://code.google.com/archive/p/phpquery/downloads
phpQuery-onefile.phpファイルを
これから作るファイル(sample.php)と
同じディレクトリに保存する
├ sample.php └ phpQuery-onefile.php
実際に使ってみる
スクレイピング するサイトは
https://ja.wikipedia.org/wiki/攻殻機動隊
でやってみる
まずは見出し"h1"タグを出してみる
<?php //ライブラリを読み込む require('phpQuery-onefile.php'); //スクレイピングしたいサイトのURL $url = "https://ja.wikipedia.org/wiki/攻殻機動隊"; //$urlのデータを全部取ってくる $html = file_get_contents($url); $doc = phpQuery::newDocument($html); echo $doc["h1"]; ?>
h1 h2 h3 を取り出す
echo $doc["h1, h2, h3"];
以下に基本的な操作を書いてみた
基本的なところ
html要素の指定
html要素の指定をするとき は以下のようにする。
$doc["要素名"];
$doc["h2"]; $doc["a"];
id属性指定
id属性の指定をしたいときは 以下のようにする。
$doc[".id名"];
例
$doc[".wrap"]; $doc[".content"];
classの指定
$doc["#class名"];
例
$doc["#"];
複数の要素や属性に全てマッチ(AND)
$doc["要素名.id名"];
複数の要素や属性にマッチする(OR)
$doc["要素1,要素2,要素3"]; $doc["属性1,属性2"];
find()
下の階層から指定した要素や属性の データを取り出す
eq()
指定したインデックス番号の要素を 取り出すことができる。
たとえば
echo $doc["h2:eq(0)"];
gt()
指定したインデックス番号より大きい要素を取り出す
lt()
指定したインデックス番号より小さい要素を取り出す
not()
セレクタで指定した要素を除外する。インデックス番号での指定は出来ない。
<参考サイト>
https://www.buildinsider.net/web/bookphplib100/070
https://code.google.com/archive/p/phpquery/ https://handywebdesign.net/2017/09/jquery-for-beginner/