web-dev-qa-db-ja.com

Webサイトの特定のdivのみをロードできますか?

私が取り組んでいるこのプロジェクトがあり、touch.facebook.comのiframe機能でFacebookの場所を使用して、近くの場所の本当に小さなリストを追加したいと思います。 touch.facebook.com/#places.phpを簡単に使用できますが、その場合はトップバーが読み込まれます。

とにかく、URLを操作して、上部と下部のメニューバーを表示するのではなく、場所のコンテンツのみをロードする方法があります。コードを見ると、div id="content"があるように見えます。 URLを作成して、そのdivのみをロードする方法があるのではないかと考えていましたか?また、touch.facebook.com/#places.php#contentを使用してコンテンツにジャンプするURLを作成しようとしましたが、明らかにその方法でtouch.facebook.comがビルドされ、機能しません。

コンテンツのセクションのみをロードする方法を実際に考えたいと思います。

先に進み、PHPでこのアプローチを試しました。 file_get_contentsの例を読んで、例1に従って、ここにあるものが正しいように見えます。

<?php
$page = file_get_contents('http://touch.facebook.com');
$doc = new DOMDocument();
$doc->loadHTML($page);
$divs = $doc->getElementsByTagName('div');
foreach($divs as $div) {
      if ($div->getAttribute('id') === 'content') {
         echo $div->nodeValue;
    }
}
?>

しかし、完全に空白のページが表示されます。

6
brybam

URLを操作してページの一部のみを取得することはできません。したがって、あなたがしたいのは、選択したサーバー側言語を介してページのコンテンツを取得し、HTMLを解析することです。そこから、探している特定のDIVを取得して、画面に出力できます。不要なコンテンツを削除するためにも使用できます。

PHPを使用すると、 file_get_contents() を使用して解析するファイルを読み取り、 DOMDocument を使用して解析し、必要なDIVを取得できます。

これが基本的な考え方です。これはテストされていませんが、正しい方向を示すはずです。

$page = file_get_contents('http://touch.facebook.com');
$doc = new DOMDocument();
$doc->loadHTML($page);
$divs = $doc->getElementsByTagName('div');
foreach($divs as $div) {
    // Loop through the DIVs looking for one withan id of "content"
    // Then echo out its contents (pardon the pun)
    if ($div->getAttribute('id') === 'content') {
         echo $div->nodeValue;
    }
}
3
John Conde

他の返信ごとに、認証ページを超えて取得したいことを理解しています。

まず、ログインしてから必要なページにアクセスし、最後にDOM反復を処理する必要があります。

リクエストを処理するオプションとしてcurlがあり、ログインします。また、curlを使用してページコンテンツを取得することもできます。

http://php.net/manual/en/book.curl.php

http://devzone.zend.com/article/1081

0
Dave

アクセスしようとしているページには認証が必要です。おそらくサインイン後に必要なデータを見ていました。そのため、プログラムでページをスクレイプしようとすると、ログインページのコンテンツが表示されます。

このスクレイピングアプローチを使用する代わりに、 FacebookのAPI を使用して、必要な情報をプログラムで抽出できるかどうかを確認できます。

関連する注意事項として、 YQL を使用して、公開サイト上のWebページの一部を取得できます。ただし、アクセスしようとしているページには認証が必要なため、場合によっては機能しない可能性があります。

0
mvark