• ベストアンサー

正規表現で抜き出した特定の文字列をDBに格納する

外部Webページのソースから正規表現を用いて特定の文字列を抜き出したいと思っています。外部Webページのソースは以下の通りです。 <td>  <div class="s-box left">   <a href="URL"><img src="" alt="" width="" height="" border="" class="book" /></a>   <h3><a href="URL">書名</a></h3>   <h4>著者:文字列<br />定価(税込):500円</h4>  </div>  <div class="s-box center">   <a href="URL"><img src="" alt="" width="" height="" border="" class="book" /></a>   <h3><a href="URL">書名</a></h3>   <h4>著者:文字列<br />定価(税込):710円</h4>  </div>  <div class="s-box right">   <a href="URL"><img src="" alt="" width="" height="" border="" class="book" /></a>   <h3><a href="URL">書名</a></h3>   <h4>著者:文字列<br />定価(税込):730円</h4>  </div> </td> 上記のようなソースからdiv classごとに、 書名 著者:文字列 定価(税込):---円 という具合に抜き出したく思っていまが、正規表現がわからずプログラムが組めません。また、その抜き出した文字列をDB(MySQL)に自動的に格納するためにはどうしたらよいか。どなたかご教授頂けないでしょうか。宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>div classごとに、  のところが、具体的にどうしたいのかわかりにくいですが 構造が普遍的であればこんな感じで拾えそうですね <? $html=<<<eof <td> <div class="s-box left"> <a href="URL"><img src="" alt="" width="" height="" border="" class="book" /></a> <h3><a href="URL">書名</a></h3> <h4>著者:文字列<br />定価(税込):500円</h4> </div> <div class="s-box center"> <a href="URL"><img src="" alt="" width="" height="" border="" class="book" /></a> <h3><a href="URL">書名</a></h3> <h4>著者:文字列<br />定価(税込):710円</h4> </div> <div class="s-box right"> <a href="URL"><img src="" alt="" width="" height="" border="" class="book" /></a> <h3><a href="URL">書名</a></h3> <h4>著者:文字列<br />定価(税込):730円</h4> </div> </td> eof; $pattern="/<div class=\"(.*?)\".*?>.*?<h3><a .*?>(.*?)<\/a>.*?<\/h3>.*?<h4>(.*?)<br \/>(.*?)<\/h4>.*?<\/div>/mis"; preg_match_all($pattern,$html,$matches,PREG_SET_ORDER); print_r( $matches); ?>

coco218-8
質問者

お礼

replyありがとうございます。 とても参考になりました。別々に抜き出すことができましたので、DBへの格納については、もう少し調べるなりして自力で頑張ってみます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

http://simplehtmldom.sourceforge.net/manual.htm 正規表現でスクレイピングするのも良いですが、上記URLのようなライブラリもありますので、一度利用してみてはいかがでしょうか。 jQueryのように利用できます。 <?php $html = file_get_html('http://example.com'); $ret = $html->find('div[class=s-box]'); foreach($ret as $child){ //処理 } ?>

coco218-8
質問者

お礼

replyありがとうございます。 上記のようなDOMが存在することを知りませんでした。使ったことがないので、勉強の一環としてそちらも試してみます。使用方法のサンプルまで挙げて頂きありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A