以下のhtmlのコード部分だけをphpを使って、スクレイピングしたいです。


具体的には下のo行目からz+p行目までをスクレイピングしたいです。

正規表現を記述してみたのですが、phpでうまく動作しません。
どのように正規表現を、変更すればいいでしょうか?


---------------------------------------------------------
o、p、x、y、z、は任意の2以上の自然数とします。
「hoge」は任意の文字列とします。

・・・・・・・・
o行目:<span class="i">「hoge」

・・・・・・・・

x行目:<span class="「hoge」">「hoge」</span>

・・・・・・・・

y行目:<span style="「hoge」">「hoge」</span><span class="「hoge」">「hoge」</span>

・・・・・・・・

z行目:<span class="「hoge」">「hoge」
・・・・・・・・
z+1行目:</span>
・・・・・・・・

z+p行目:「hoge」</span>
・・・・・・・・
--------------------------------------------------------
自分が記述した正規表現は以下の通りです。

'{<span class="i">(.*)((<span(.*)</span>)*)(.*)</span>}s'


わかりにくいものになってすいません。
回答をお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/11/22 11:20:03

回答1件)

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

<span class="i">内のspanの個数が決まっているのでしたら、次のようにするとマッチする正規表現になります。

#<span class="i">(.*?</span>){5}#s


<span class="i">の中の要素数が定まっていない場合、別の条件が必要になりますが、質問で提示している部分の直後に何か判定に使えるような記述はないのでしょうか?
あるいは、<span class="i">の中に、他に何か決まった要素はないでしょうか?
何もない場合は正規表現は適さないので、きちんと構造化されたHTMLなのでしたら、XPathを利用した方がいいと思います。
XPathを利用するライブラリもいくつかあるようです。

・PHPでのスクレイピングに役立つライブラリ色々
http://phpspot.org/blog/archives/2008/03/php_94.html

リンク先情報元(PHPでのスクレイピングに役立つライブラリ - (DxD)∞)より

HTMLScraping
HTMLをXML化してDOMやXPathで操作できるクラス。主にHTTP_Request+HTMLParser(XML_HTMLSax3を含む)/Tidy+Cache_Liteという構成で、スクレイピングに必要なものが一通り揃っている。ライセンスはLGPL他。
WebScraper
シンプルな汎用スクレイピングクラス。HTTP_Client+HTMLParser(XML_HTMLSax3を含む)という構成で、XPathで要素を抽出できる。自分好みにカスタマイズするのに最適。ライセンスは修正BSDライセンス他。

id:tsukasa343

回答いただきありがとうございます。

内のspanの個数が決まっているのでしたら、・・・
この部分ですが、残念ながらspanの個数を決まっていません。

の中の要素数が定まっていない場合、別の条件が必要になりますが、質
>問で提示している部分の直後に何か判定に使えるような記述はないのでしょうか?
>あるいは、の中に、他に何か決まった要素はないでしょうか?
こういった特定の記述はなく困っていました。
ご提示いただいたURLを参考にがんばってみます。

2012/11/21 13:51:51

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません