本文へ移動
Webstudio YAS
  • About
  • Price
  • Work
  • Blog
  • Contact
  • About
  • Price
  • Work
  • Blog
  • Contact
  1. ホーム
  2. Blog
  3. PHPでウェブスクレイピング

公開日: 2019.05.30

PHPでウェブスクレイピング

PHPでウェブスクレイピング

目次

  • サンプルコード
  • 解説
  • 要素の指定方法

他サイトから取得したHTMLソースから目的のテキストなどを取り出したい時、ソースを文字列として扱うよりもDOMとして操作すると簡単に取り出せる事がわかりました。

HTMLソースの取得は別記事(PHPでサイトのソースを取得する)を参照してもらうことにして、スクレイピングについて書いていきます。

サンプルコード

例えば、ページのタイトルを取得する場合

//phpQueryの読み込み
require_once("./phpQuery-onefile.php");

//ソースをDOM操作可能な形に変換
$html_dom = phpQuery::newDocument( $html_source );

//スクレイピング
$scraped_str = $html_dom["title"]->text();

echo( $scraped_str );

※$html_sourceにHTMLソースが入っているものとします。

解説

phpQueryの読み込み

require_once("./phpQuery-onefile.php");

スクレイピングするには、「phpQuery」というライブラリを使います。
下記よりダウンロードしてrequire_onceなどで読み込みます。

phpQueryのダウンロード
https://code.google.com/archive/p/phpquery/downloads

ソースをDOM操作可能な形に変換

$html_dom = phpQuery::newDocument( $html_source );

HTMLソースを「phpQuery」に渡して、変換したものを受け取っています。

エラーが出る場合は、以下の記事参照
phpQueryで「Array and string offset access syntax with curly braces is deprecated」

スクレイピング

$scraped_str = $html_dom["title"]->text();

変換後は、要素を配列のように扱うことができます。
サンプルコードでは、title要素を取得しています。
text()は、その要素内にあるテキストを取得する場合に使用します。

要素の指定方法

ID名で抜き出し(#menuというIDの場合)

$scraped_str = $html_dom["#menu"]->text();

class名で抜き出し(.mainというclassの場合)

$scraped_str = $html_dom[".main"]->text();

同じclass名が複数ある場合

対象が複数ある場合はすべて取得してしまうので、class名の後に:eq(0)とすると何番目のclassか指定できます。ちなみに1番目が0、2番目が1となります。

$scraped_str = $html_dom[".main:eq(0)"]->text();

リンク先のアドレスの取得

$scraped_str = $html_dom[".main"]->find("a")->attr("href");

または

$scraped_str = $html_dom[".main > a"]->attr('href');

画像のアドレスの取得

$scraped_str = $html_dom[".main"]->find("img")->attr("src");

複数の要素を指定

imgとa要素の両方

$scraped_str = $html_dom["img, a"];

子要素の指定

ul要素の中のli要素

$scraped_str = $html_dom["ul li"];

その他

他にも様々な指定方法があるようです。

公式サイトのオプション一覧
https://code.google.com/archive/p/phpquery/wikis/Selectors.wiki

タグ

  • PHP
  • phpQuery
  • ウェブスクレイピング

関連記事

2023.01.28

ファイル・画像をアップロードする最低限のサンプルコード(コピペ用テンプレ)

ファイル・画像をアップロードする最低限のサンプルコード(コピペ用テンプレ)

2019.06.04

【PHP】includeしたプログラム等をすぐに出力させないでバッファリングしておく方法(ob_start)

【PHP】includeしたプログラム等をすぐに出力させないでバッファリングしておく方法(ob_start)

2019.05.30

PHPでサイトのHTMLソースを取得する

PHPでサイトのHTMLソースを取得する
Webstudio YAS
  • About
  • Price
  • Work
  • Blog
  • Contact
YAS プロフィール画像

長野県長野市在住
WEBエンジニア YAS

LINKS

  • X
  • Instagram
  • GitHub
Design
  • スタンダード
  • 和モダン
  • エンジニア
  • 信州ナチュラル
プライバシーポリシー

@ Webstudio YAS