PHPでHTMLファイルを解析して配列へ...

このQ&Aのポイント
  • PHPを使用して、外部から取得したHTMLファイルを解析し、MySQLに格納する方法について考えています。
  • HTMLファイルの記述が一行で書かれているため、strstrとstr_replaceを使用して解析する必要があります。
  • 解析した結果を多次元配列に格納し、カテゴリとタイトルを出現順に保存したいです。
回答を見る
  • ベストアンサー

PHPでHTMLファイルを解析して配列へ・・・

phpを使用して、下記のhtmlファイルを外部から取得して、解析してMySQLに格納したいと考えています。 問題となったのは、全部の記述が一行で書かれているので、strstrで探してstr_replaceで書き換えて・・・ といった作業をどのようにしていいかわかりません。 結果的には、出現順に多次元配列に$hairetu[] = array(categ => 【カテゴリ】, url => 'http://xxxxxxx.xx' , title => 【タイトル】);という形で収めていきたいです。 以下、解析元ファイルの記述例ですが、このような形式で1000件以上はあります。 <font color="#000000">【カテゴリ】</font><br><a href="http://xxxxxxx.xx">【タイトル】</a><br>【リンク先説明・・・】<br><font color="#000000">【カテゴリ2】</font><br><a href="http://xxxxxxx2.xx">【タイトル2】</a><br>【リンク先説明・・・2】<br>...

noname#225112
noname#225112
  • PHP
  • 回答数1
  • ありがとう数2

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

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

きちんとしたパース処理をする手もありますが、しっかりした 法則性があり、この程度の仕分けであれば、以下のようにすればよいでしょう。 (もちろん、場合によってすこし工夫が必要ですが) <? $str=<<<eof <font color="#000000">【カテゴリ】</font><br><a href="http://xxxxxxx.xx">【タイトル】</a><br>【リンク先説明・・・】< br><font color="#000000">【カテゴリ2】</font><br><a href="http://xxxxxxx2.xx">【タイトル2】</a><br>【リンク先説明・・・2】< br> <font color="#000000">【カテゴリ3】</font><br><a href="http://xxxxxxx3.xx">【タイトル3】</a><br>【リンク先説明・・・】< br><font color="#000000">【カテゴリ4】</font><br><a href="http://xxxxxxx4.xx">【タイトル4】</a><br>【リンク先説明・・・2】< br> eof; $pettern='/<font.*?>(.*?)<\/font>.*?<a\s.*?href=\"(.+?)\".*?>(.*?)<\/a>/mis'; preg_match_all($pettern,$str,$matches); $list=Array(1=>"categ",2=>"url",3=>"title"); if(is_array($matches)){ for($i=1;$i<count($matches);$i++){ foreach($matches[$i] as $key=>$val){ $hairetu[$key][$list[$i]]=$val; } } } print "<pre>"; print_r($hairetu); print "</pre>"; ?>

noname#225112
質問者

お礼

なるほど。 法則性があるので、正規表現の上記の方法でなんとか出来ました。 思った通りに動いたので感動しました! ありがとうございます。 もっと勉強します・・・ preg_match_all()あなどれませんね

関連するQ&A

  • HTMLの書き直す

    HTMLファイルにある一部分のリンクをハイライトしたいですが(例えば:色変わりなど)、perlでどうしたらいけますか?よろしくお願いします。 例えば:<IMG ALT="dot" WIDTH="15" HEIGHT="18" ALIGN="bottom" SRC="/images/sky-dot.gif"><font size="2"> <a href="interesting/">面白いページ</a></font><br><br> から <IMG ALT="dot" WIDTH="15" HEIGHT="18" ALIGN="bottom" SRC="/images/sky-dot.gif"> <font size="2" color=#666666><a href="interesting/">面白いページ</a></font><br><br>

  • 【PHP】正規表現でHTMLを置換したいのですが・・・

    HTMLのソースを、正規表現で置換をしてから画面に出力したいのですが、どのような正規表現を記述すればいいのか分からず困っています。。。。 下記(befor)の4つのリンクのうち、ファイルの拡張子が、pdf、doc、xlsのファイルだけ「download.php」というPHPのプログラムを通してからダウンロードさせるために、文字列を(after)の様に置換をしたいのですが、なかなかうまくいきません。。。 どなたか、ご指導のほど宜しくお願いいたします。 (befor) $html = '<a href="/files/aaaa.pdf">あ</a><br>' . '<a href="/files/cccc.html">い</a><br>' . '<a href="/files/dddd.doc">う</a><br>' . '<a href="/files/eeee.xls">え</a><br>' ; (after) $html = '<a href=download.php?url=/files/aaaa.pdf>あ</a><br>' . '<a href="/files/cccc.html">い</a><br>' . '<a href=download.php?url=/files/dddd.doc>う</a><br>' . '<a href=download.php?url=/files/eeee.xls>え</a><br>' ;

    • ベストアンサー
    • PHP
  • モバイルサイトを作ってますけど、たまにdreamweaverでソースが

    モバイルサイトを作ってますけど、たまにdreamweaverでソースが黒くなるときがあります。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー <div> <font color="FF7400" size="-1" style="font-size:xx-small" color="#5C410D"> ■ <a href="#">test</a><br /> ■ <a href="#">test</a><br /> ■ <a href="#">test</a> </font> </div> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー <font color="FF7400" size="-1" style="font-size:xx-small" color="#5C410D"> </font> この部分がそうなるのですが、これってdreaweaverの問題ですか? 実際にサイトで確認してみると問題はありませんが、、、

  • HTMLで表を横並びにしたくて、下記のような表を作りました。

    HTMLで表を横並びにしたくて、下記のような表を作りました。 この表をもう一つ右隣に作りたいのですが、どうもうまくいきません。 何を付け足せば横に並んでくれるのでしょうか? <table style= width="500" bgcolor="#007500" cellspacing="1" cellpadding="5"> <tr> <td bgcolor="#e5ffe5" width="120"><font color="#000000"><strong><a href="紹介したURL">ああああ</strong></font></td> <td bgcolor="#ffffff"><font color="#000000"><strong>ああ<br></strong></font></td> </tr> <tr> <td bgcolor="#e5ffe5"><font color="#007500"><strong><a href="紹介したいURL">ああああ</a> </strong></font></td> <td bgcolor="#ffffff"><font color="#000000"><strong>ああ<br></strong></font></td> </tr> <tr> <td bgcolor="#e5ffe5"><font color="#000000"><strong><a href="index.html"></strong></font></td> <td bgcolor="#ffffff"><font color="#000000"><strong>あああああ</strong></font></td> </tr> </table><br> </tr>

  • HTML 超初心者  リンクの載せ方

    HTMLの勉強を昨日始めたばかりの超初心者です。初心者用のカテゴリが無いので、技術者向けなんてカテゴリからの質問で気が引けますが、回答お願い致しますm(__)m 今Udemyというアメリカ人が作った講義動画のサイトで勉強してるんですが、そちらではnotepadを使ってクロームに表示しているんですが、僕がやると文字化けしてしまうので、terapadを使ってエクスプローラーに表示しています。 つまずいた個所はリンクの載せ方の所です。細かく書きます。 index.html contact.html about.htmlというドキュメント?を作ってそれをひとまとめにwebsiteというファイルに収めてそのファイルの中にadminというファイルを作ってそのファイルの中にadmin.htmlというドキュメントを収めています。 index.html contact.html about.htmlそれぞれに <a href="index.html">Homepage</a><br /> <a href="About.html">About</a><br /> <a href="Contact.html">Contact</a><br /> リンクを作る文字列を打ってブラウザで実際にクリックしてリンクを表示させることはできました。 しかし、adminのほうがリンクの文字自体はされるのですが、それをクリックしてもエラーになってしまいます。<a href="Admin files/Admin1.html">Admin1</a>←のように動画にあるままにファイルも指定して文字を打ったんですがダメです。大文字などの打ち間違いも確認しましたが問題ありませんでした。 回答お願いします。

    • ベストアンサー
    • HTML
  • タイトルタグを打ち込んでもブックマークにタイトルがでません

    タイトルタグを打ち込んでもブックマークにタイトルがでません <HTML> <HEAD><TITLE>在りし日</TITLE></HEAD> <body> <CENTER> <br> <br> <FONT SIZE=3><FONT COLOR="#cc0000"> 在りし日 </FONT></FONT> <br> <br> <img src="abc.jpg"><br> <br> <br> <font size=3><font color="#000000"> 初めてのホームページ制作にチャレンジ中です。 <br></font></font> <A HREF="abc.html">next</A> </CENTER></BODY></HTML> 以上のように打ち込んでいます

    • ベストアンサー
    • HTML
  • 表示できないページ

    社内のイントラを作成しています。 以下のソースのページを作成したのですが、 WIN95、IE5.00の端末で開くと「ページが表示できない」 というメッセージがでて、ページが表示できません。 原因として、なにがおかしいのでしょうか? 宜しくお願いします。 << ソース >> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> </HEAD> <BODY BACKGROUND COLOR="white" TEXT="#FF80C0" LINK="#FF80C0" VLINK="#009999"> <CENTER> <P STYLE="BACKGROUND-COLOR:00D9B2;"><FONT SIZE=3 COLOR=#CC0099>便利なリンク集</FONT></P> <BR> <FONT SIZE="4" COLOR=BLACK><B>~便利なリンク集~</B><FONT> <P><BR> </CENTER> <IMG SRC=""CLASS="PARAM1" ALIGN="right" width="100" height="90"> <BR><BR><BR> <CENTER> <TABLE BORDER="0"WIDTH="350">  <TR VALIGN="MIDDLE" ><FONT SIZE=3 COLOR=#000000><A HREF="html"> 情報・通信グループ  ユーザ管理システム (ユーザ向け)</A></FONT></TR>  <TR VALIGN="MIDDLE" ><FONT SIZE=3 COLOR=#000000><A HREF="soum2.html" >事故報告書の作成(SEが対応した事故を対象とする)</A></FONT></TR> <TR VALIGN="MIDDLE" ><FONT SIZE=3 COLOR=#000000><A HREF="doc"> 東京インフラG  所有品の持出しについて </A></FONT></TR><BR> <TR VALIGN="MIDDLE" ><FONT SIZE=3 COLOR=#000000><A HREF="">PG制定要否決裁流れについて</A></FONT></TR> </TABLE> <BR><BR> <FONT SIZE="4" COLOR="RED"><A href=""><B>back</B></A></FONT> </CENTER> </BODY> </HTML>

    • ベストアンサー
    • HTML
  • HTMLについて

    HTML初心者です。いろいろ調べながら下記の画像のテンプレートを作っているのですが、1枠と2枠の頭が揃いません。わかる方教えてください。画像が見づらいかもしれませんが宜しくお願い致します。 <html> <body> <br><center> <font size="6" color="#00000"> <b>タイトル</b> </font> <hr> <br><br> <table width="800" height="500" cellpadding="15" cellspacing="10" BORDER="4" bgcolor="F3F30E"> <tr> <td width="50%" rowspan="4" BGCOLOR="F2F276" ALIGN="left" VALIGN="top"> <font color="#00000" size="4"><b><u> 1 </u></b></font> <br><br> <font size="3" color="#00000"> </font> </td> </tr> <tr> <td width="50%" bgcolor="F2F276" ALIGN="left" VALIGN="top"> <font color="#00000" size="4"><b><u> 2 </b></u></font> <br><br> <font size="3" color="#00000"> </font> </td> </tr> <tr> <td width="50%" bgcolor="F2F276" ALIGN="left" VALIGN="top"> <font color="#00000" size="4"><b><u> 3 </b></u></font> <br><br> <font size="3" color="#00000"> </font> </td </tr> <tr> <td width="50%" bgcolor="F2F276" ALIGN="left" VALIGN="top"> <font color="#00000" size="4"><b><u> 4 </b></u></font> <br><br> <font size="3" color="#00000"> <b></b> </font> </td> </tr> </table> </body> </html>

    • ベストアンサー
    • HTML
  • PHPを使ったアクセス解析を実現したい

    PHPを使ったアクセス解析を実現したいと思ってます。 どの場所のリンクがクリックされたのかを解析するものなのですが、 パラメータをもたないリンクであれば、 <a href="a.php?link=http://foo.com/&param=1">foo</a> のようにして、 paramで場所がわかって、a.php でリンクアドレスにリダイレクションするんですが、 <a href="a.php?link=http://foo.com/b.php?a=1&b=2&param=1"></a> http://foo.com/b.php?a=1&b=2 というリンクの場合には、 b=2 は、a.php のパラメーターと認識されてしまいます。 リンクは、http://foo.com/b.php?a=1&b=2でパラメーターは、 http://foo.com/b.php?a=1&b=2 と param=1 とする方法はありませんでしょうか。 アドバイスのほど、よろしくお願いします。

    • ベストアンサー
    • PHP
  • CSSでの記述についてです。

    CSS初心者で独学でいろいろ試しているのですが、分からないことがあるので質問させてください。 1、スタイルシートの定義を個別にして、文章を書いたページのスタイルを一括で統一する方法を取っています。 2、ページの下の部分に「戻る」「次へ」のリンクを作って、リンクを張りました。 3、同じフォルダ内のページに対してリンクを貼ったとき、「戻る」と「次へ」の間にわずかに間隔があります。(それを保ちたいのです) 4、しかしひとつ階層が上の(フォルダ外)のページに対してリンクを貼ったとき、何故か「戻る」と「次へ」の間の間隔が狭くなってしまいます。 スタイルシートを文書の記述とは別に作って一括で処理しているので、その文書ページの記述に問題があるのだと思うのですが、どこが問題なのか分かりません。参考までに、以下にページの記述を記載します。 ---------------------------------------- <間隔がきちんとある方> <html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <HTML lang="ja"> <head> <LINK rel="stylesheet" type="text/css" href="../stylesheet1.css"> <title>Torikago2</title> </head> <body><br> <p> 文書<br> </p> <br><br>    <a href="torikago1.html">戻る</a>    <a href="torikago3.html" class="01">次へ</a> </font> </body> </html> ------------------------------------------------- <間隔が狭くなる方> <html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <HTML lang="ja"> <head> <LINK rel="stylesheet" type="text/css" href="../stylesheet1.css"> <title>Torikago1</title> </head> <body><br> <p> 文書<br> </p> <br><br> <a href="../toppage.html">戻る</a> <a href="torikago2.html" class="01">次へ</a> </font> </body> </html> ------------------------------------------------ ちなみに、スタイルシート>文書フォルダ となっていて、 間隔の狭くなってしまう方のページもその文書フォルダの中にあります。 スタイルシートのリンクに対しての記述も必要でしょうか? 以下のようなものです。 ------------------------------------------------ a {position:relative; right: -43%; bottom: 40px; background-color:white; opacity: 0.8; padding:10px; margin:0px; text-decoration: none;} a.01 {position:relative; bottom: 10px; background-color:white; opacity: 0.8; padding:10px; margin:0px; text-decoration: none;} どなたか教えて頂けると嬉しいです。