対象サイトのhtmlを取得・解析したい

このQ&Aのポイント
  • 対象サイトのhtmlを取得し解析・一部情報を抽出する機能を作っていますが、抽出したい情報が入っていないため困っています。
  • firebugで対象サイトのhtmlを確認すると抽出したい情報は表示されていますが、ブラウザでソースを表示すると隠蔽されています。
  • 抽出したい情報の箇所は動的に生成されているものであり、file_get_contentsで読み込んでいるのが原因かもしれません。別の方法で情報を抽出する方法があれば教えてください。
回答を見る
  • ベストアンサー

対象サイトのhtmlを取得・解析したい

お世話になります。 早速ですがご質問させて頂きます。 対象サイトのhtmlを取得し解析・一部情報を抽出する機能を作っています。 以下の方法で取得を行ったのですが、抽出したい情報が入っていなく(隠蔽されている??)困っています。 firebugで対象サイトのhtmlを確認すると抽出したい情報はきちんと表示されていますが、 ブラウザでソースを表示すると隠蔽?されています。 ◆表示比較 ・firebug <p class="●●">(抽出したい情報)</p> ・ブラウザでソース表示する <td id="●●">-</td> ▼プログラム $html = file_get_contents ("http://対象サイト"); $domDocument = new DOMDocument (); $domDocument->loadHTML($html); $xmlString = $domDocument->saveXML (); $xmlObject = simplexml_load_string($xmlString); そもそも抽出したい情報の箇所は動的に生成されているものでfile_get~で読みにいっているものは動的に出力される前のものを読み込んでいるのが原因でこのような結果になっているのでしょうか? 上記の方法以外でもうまいやり方があればぜひご教授頂きたいです! 宜しくお願い致します! 環境: MacOSX 10.6.8 PHP 5.1.2 Firebug 1.11.4 Firefox 22.0

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
回答No.1

>そもそも抽出したい情報の箇所は動的に生成されているものでfile_get~で読みにいっているものは動的に出力される前のものを読み込んでいるのが原因でこのような結果になっているのでしょうか? の部分が、Javascriptなどによって後から動的に生成されているということであれば、 >そもそも抽出したい情報の箇所は動的に生成されているものでfile_get~で読みにいっているものは動的に出力される前のものを読み込んでいるのが原因でこのような結果になっているのでしょうか? 質問者様のこちらの認識で間違いないかと思います。 Javascriptなどのレンダリングが完了した後のHTMLを取得するということになると、 PHPを用いてというのはおそらく難しく、 VBなどの言語を使って、ブラウザの動作(Javascriptの実行完了までの動作)を実行した後、 ソースコードを取得するようなアプリケーションを作成する必要があるのかなと思います。 (VB等にはあまり詳しくなく具体例が出せないのが心苦しいのですが・・・) 以上です。ご参考になれば幸いです!

takachipo
質問者

お礼

ご回答有り難うございます! なるほど。。 レンダリング後のHTMLを読み込めればいいんですね。 少し糸口が掴めたような気がします! 有り難うございます!

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5071/13248)
回答No.2

firebugではhtmlを見られるがブラウザでソースを表示すると見えないのは、HTML上には何も書かれておらずブラウザでJavaScriptを実行して書き足しているという事です。 従って、その部分の情報を得るにはJavaScriptを実行する必要ああります。

takachipo
質問者

お礼

ご回答有り難うございます! javascript部分で出力しているんですね。 やはりphpでは難しそうですね。。 色々試してみようと思います!

関連するQ&A

  • SSLでフォームから変数内容を取得できない

    SSL通信時にフォームから変数内容を取得できません。 非SSL通信時には問題なく取得できます。(同じソース) SSL通信時のフォームの値の受け渡しに何か制限があるのでしょうか。 またそのような設定等があるのでしょうか。 以下はソースです。 <html> <head><title>test</title></head> <body> <?php // 入力内容を表示する echo "<p>入力内容(\$HTTP_GET_VARS):".@$HTTP_GET_VARS["text1"]; // 入力内容を表示する echo "<p>入力内容(\$_GET):".@$_GET["text1"]; ?> <form method="GET" action="<?=$_SERVER["PHP_SELF"]?>"> <table> <tr> <td><input type="text" name="text1"></td> <td><input type="submit" value="送信" name="sub1"></td> </tr> </table> </form> </body> </html>

    • ベストアンサー
    • PHP
  • javascriptを起動した後のウェブページを取得するには

    こんにちは。よろしくお願いいたします。 以下のようなHTMLソースをブラウザで読み込むとhogeと 表示されますが、PHPのfile_get_contentsやPerlのLWPなどを使って ページを取得するとソースそのものが取得されます。PHPやPerlを使って ブラウザから見たソース(以下の例ではhoge)を取得するには どのようにしたらよいのでしょうか? <script type="text/javascript"> window.onload=function (){ document.getElementById("a").innerHTML="hoge"; } </script> <div id="a"></div>

    • ベストアンサー
    • PHP
  • サイト内の一部の情報を取得したい。

    file_get_contentsとpreg_matchを使ってhttp://blogs.yahoo.co.jp/y_j_blogの訪問者履歴の情報(ニックネームとYahoo!ID)を取得したいのですが、上手く行きません。 JavaScriptの中身の情報を取得する方法はないのでしょうか? 具体的なソースコードを教えて頂ければ有り難いです。

    • 締切済み
    • PHP
  • ブラウザから直接HTMLを取得する方法

    IEの「表示」-「ソースの表示」のようなイメージで、現在ブラウザに表示されているHTMLを取得するのには、どのような方法があるでしょうか? MSXML等を利用してWebサーバからHTML(HTTPレスポンス)を取得する方法はネット上で見かけますが、ブラウザから直接HTMLの情報を取得したいのです。 どうぞ、宜しくお願いいたします。

  • マッチ情報を取得

    $yahoo = file_get_contents(http://www.yahoo.co.jp/) で取得したソース情報の中から特定の情報だけを抜き取りたいのですが・・・。 正規表現 preg_match()などを使って欲しい情報があれば、特定の範囲を抜き取りするのかな?と思うのですが・・・。 いまいちやり方がわかっていません。 アドバイスお願いします。

    • 締切済み
    • PHP
  • PHPで取得したHTMLソースと実際のソースの違い

    PHPで、 file_get_contents($uri) などで取得したHTMLソースと、実際にアクセスして表示したソースが違う場合があります。 例えば、ネットオフというサイトが違いました。 http://www.netoff.co.jp/cmdtyallsearch/hdnAllSearchFlg/1/Ctgry/home/LRack/*/SetFlg/?cat=&word=9784864102254 PHPで取得すると、商品結果の情報を取得できなかったのですが、 実際のソース(FireFoxでCtrl+Uでページのソース表示)は表示されています。 こういったページもPHPで取得することは可能なのでしょうか? わかる方よろしくおねがいします。

    • ベストアンサー
    • PHP
  • PHPのタイトルの取得

    こちら(http://wsd.zombie.jp/gw/php_curl_file_get_contents/)のページとこちら(https://www.php.net/manual/ja/funct ion.file-get-contents.php)のページを参考に別ページからタイトルを取得したいと思っているのですが、できませんでした。(上記のサイト様では、ヤフーニュースの取得ができるらしいのですが、表示されませんでした。) webページのタイトルを取得したいです。 index.phpファイル <a href>="ここに下記タイトルを取得"</a> ーサーバー上の別ページー page1.php <title>練習</title> このようにしたいので教えてください。

    • ベストアンサー
    • PHP
  • Javascriptとデータベースの連携

    Javascriptを使ってMysqlなどのデータベースとやり取りをしたいのですが、 Javascriptはソースコードがだれでも見られるためどのように通信内容を隠蔽すべきか悩んでいます。 実際のデータの操作はGETやPOSTでPHPを経由し、JSON等で内容を返すような形を予定しており、 削除・書き込みを行わない読み込み専用のものをつくるつもりです。 レコードのIDをもとに情報を抽出したいのですが、JavascriptソースのIDを書き換えられて別の情報を取得される状況は避けたいと思っています。 取得されうる内容に個人情報等を含むものはなく、高度なセキュリティが要求されるような内容ではありませんが、イタズラを防止しようと考えています。

  • 動的サイトを作ってみたのですが、うまくデータベースからデータが取得できません。。。

    よろしくお願いいたします。 趣味でゲームソフトのデータベースを作っています。 MYSQLを使って動的にデータを表示させるサイトです。 http://www.game-minzoku.jp/meisai.php?titleid=5362 例えばこのようにパラメータをつけてページを展開しているのですが、 この『?title=****』の数字をアドレスバー上で変更してほかのページを表示させようとすると、 該当データがありません。 がと出てしまいます。 これがようやくGoogleにインデックスされ始めてきましたが、自然検索から入ってもこのようなことが起こってしまって困っています。 自分で調べてはみたものの、独学で進めているため、どうやって解決したらよいか分からず困っています。 どなたかお力添えいただけますと幸いです。 問題のページのソースはこちらです。(cssなどの不要と思われる個所はけしてありますが、もし足りない箇所あればおっしゃっていただけますと幸いです) ================================================================ <?php extract($_GET); mysql_connect('****','****','****'); mysql_select_db('****'); mysql_query("set character_set_client=utf8"); mysql_query("set character_set_connection=utf8"); mysql_query("set character_set_results=utf8"); $sql = "select * from game,genre,hanbai,kaihatsu,hard where game.genreid=genre.genreid and game.hardid=hard.hardid and game.hanbaiid=hanbai.hanbaiid and game.kaihatsuid=kaihatsu.kaihatsuid and game.titleid =" . $titleid; $result = mysql_query($sql); $rows = mysql_num_rows($result); $title_name_sql = "select title from game where titleid =" . $titleid ; $res = mysql_query($title_name_sql); $title_name = mysql_result($res,0); echo "<title>"; echo "$title_name | ゲーム民族</title>"; echo "</head><body>"; echo "<a href=index.php>ゲーム民族</a>"; echo "<h1><font size=2>ゲーム民族は"; echo "$title_name"; echo "の詳細を網羅したデータベースのサイトです</font></h1>"; echo "<p><a href=index.php>TOP</a> > $title_name</p>"; echo $title_name の基本情報; if($rows == 0){ echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo "<a href=",$row["url"],">"; echo "<img src=",$row["img"]," alt=",$row["title"],">"; echo "</a>"; echo "<table border=1 height=40 cellpadding=2 cellspacing=2 width=800>"; echo "<tr><td>タイトル</td><td>"; echo $row["title"]; echo "</td></tr>"; echo "<tr><td>発売元</td><td>"; echo "<p><a href=\"maker.php?hanbaiid=",$row["hanbaiid"],"\">", $row["hanbai"] ,"</a></p>\n"; echo "</td></tr>"; echo "<tr><td>開発元</td><td>"; echo "<p><a href=\"developer.php?kaihatsuid=",$row["kaihatsuid"],"\">", $row["kaihatsu"] ,"</a></p>\n"; echo "</td></tr>"; echo "<tr><td>機種</td><td>"; echo $row["hard"]; echo "</td></tr>"; echo "<tr><td>発売日</td><td>"; echo $row["hatsubai"]; echo "</td></tr>"; echo "<tr><td>ジャンル</td><td>"; echo "<p><a href=\"genre.php?genreid=",$row["genreid"],"\">", $row["genre"] ,"</a></p>\n"; echo "</td></tr>"; $sql2= "select * from game,title_creater,creater,roll where game.titleid=title_creater.titleid and title_creater.createrid=creater.createrid and title_creater.rollid=roll.rollid and game.titleid = " . $row["titleid"]; $result2 = mysql_query($sql2); $rows2 = mysql_num_rows($result2); while($row2 = mysql_fetch_array($result2)){ echo "<tr><td>クリエーター</td><td>"; echo $row2["creater"]; echo $row2["roll"]; echo "</td></tr>"; } } } ?> </body></html> ================================================================ 本当に見にくい意味不明のソースで申し訳ありませんが、よろしくお願いいたします!

    • ベストアンサー
    • PHP
  • WEB初心者です。検索対象について教えて欲しいことがあります。

    WEB初心者です。検索対象について教えて欲しいことがあります。 WEBを勉強するにあたって、いろいろなサイトのソースをよく参考にしているのですが <h1></h1>などに日本語文字列が記述されいているにもかかわらずブラウザにその文字列が表示されていないサイトをたまにみかけます。 これはSEO対策なのでしょうか?? 例:下記のサイト http://www.bulbs.co.jp/ このようにブラウザに表示されない理由を教えて頂たいです。 よろしくお願い致します。

    • ベストアンサー
    • HTML

専門家に質問してみよう