PHPでwebスクレイピング

スポンサーリンク

はじめに

以外と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"];

?>

f:id:shangtian:20180624151441p:plain

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/

http://www.jquerystudy.info/reference/selectors/index.html