LoginSignup
5
5

More than 5 years have passed since last update.

HTMLをスクレイピングする際、複数行にわたるタグ(要素)をPHPの処理で正規表現を用いて置換する

Last updated at Posted at 2017-01-20

どういう時にこの方法を使用したのか

既存のWebページからヘッダーとフッター以外のメインコンテンツ部分をごっそり抜き出して、
タグを正規表現で置換処理をしてから新しくhtmlを書き出す、という作業を行う際に、
タグ(要素)をまるごと('<div class="aaa">~~~</div>'の範囲)置換したいというときに使いました。

正規表現&置換

※$textDataにはスクレイピングで取得した要素が入っているという想定です

html_change.php

$textData = '
 <p class="AAA">
 たとえば<br />
 こんな感じに<br />
 複数行にわたる要素まるごと<br />
 取得できるので<br />
 別の要素を入れたりできてすごい便利<br />
 というかもっと早く知りたかった。
 </p>
';

$textData = preg_replace('/<p class="AAA">[\s\S]*?<\/p>/', '<div class="CCC">$0</div>'."\n", $textData);
//$0にはクラスの中の文(<p class="AAA">~</p>)が入る
//ちなみに閉じタグ部分の/は上記みたいなエスケープが必要

echo $textData;

★実行結果

html_change.php
<div class="CCC">
<p class="AAA">
 たとえば<br />
 こんな感じに<br />
 複数行にわたる要素まるごと<br />
 取得できるので<br />
 別の要素を入れたりできてすごい便利<br />
 というかもっと早く知りたかった。
 </p>
</div>

これで要素を追加したり削除したり別の要素に置換できたりします。
よかったよかった

正規表現チェッカーでの実行結果

scraping.html
<p class="AAA">
たとえば<br />
こんな感じに<br />
複数行にわたる要素まるごと<br />
取得できるので<br />
別の要素を入れたりできてすごい便利<br />
というかもっと早く知りたかった。
</p>

WS000002.JPG

参考サイト

正規表現で改行を含む複数行でマッチングさせたい: 脱力系備忘録BloG

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5