2

私はこのプロジェクトに取り組んでおり、touch.facebook.comから紹介されたiframe内のFacebookの場所を使用して、近くの場所の非常に小さなリストを追加したいと思っています。touch.facebook.com/#/places_friends.phpを簡単に使用できます。しかし、それはヘッダーや他のナビゲーションバーをロードして、メッセージ、イベントなどのバーを表示します。コンテンツが必要なだけです。

touch.facebook.com/#/places_friends.phpソースを見ると、かなり確信しています。ロードする必要があるのはdivの「コンテンツ」だけです。とにかく、私はphpに非常に慣れていないので、自分の考えをかなり確信しています。私がやろうとしているのはウェブスクレイピングと呼ばれています。

スタックオーバーフローについて理解し、認証などについて心配する必要がないようにするために、ログインページを読み込んで、少なくともスクレーパーを機能させることができるかどうかを確認したいと思います。動作するスクレイピングコードができたら、残りを処理できると確信しています。div内のすべてをロードしました。私はこれが以前に行われたのを見たことがあるので、それが可能であることを知っています。そして、touch.facebook.comにログインしようとしたときに表示されるものとまったく同じように見えますが、上部に青いfacebookロゴがなく、それが私がここで達成しようとしていることです。

これがログインページです。実際のログインボタンにログインするためのテキストボックスを含むdivをロードしようとしています。正しく行われていれば、Facebookのヘッダーバーがぼやけていないものが表示されるはずです。

私はもう試した

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

空白のページをロードするだけです。

http://simplehtmldom.sourceforge.net/も使ってみました

例の基本セレクターを次のように変更しました

<?php
include('../simple_html_dom.php');

$html = file_get_html('http://touch.facebook.com/login.php');

foreach($html->find('div#login_form') as $e)
    echo $e->nodeValue;

?>

私も試しました

<?php
$stream = "http://touch.facebook.com/login.php";
$cnt = simplexml_load_file($stream);

$result = $cnt->xpath("/html/body/div[@id=login_form]");

for($i = 0; $i < $i < count($result); $i++){
    echo $result[$i];
}
?>

それもうまくいきませんでした

4

4 に答える 4

1
$stream = "http://touch.facebook.com";
$cnt = simplexml_load_file($stream);

$result = $nct->xpath("/html/body/div[@id=content]");

for ($i = 0; $i < count($result); $i++){
    echo $result[$i];
}

この行に構文エラーがありました。削除しました。このコードをコピーして貼り付けて実行するだけです。

于 2012-07-20T18:48:12.153 に答える
0

フェイスブックAPIは使用できないと思いますが、可能であれば、スクレイピング取引全体から身を守ることができるので、使用することを強くお勧めします。

テキストをスクレイプするには、最高の技術者がxpathを使用しています。touch.facebook.comによって返されるhtmlがxhtmlトランジショナルである場合、xpathを使用する必要があり、サンプルは次のようになります。

$stream = "http://touch.facebook.com";
$cnt = simplexml_load_file($stream);

$result = $nct->xpath("/html/body/div[@id=content]");

for ($i = 0; $i < $i < count($result); $i++){
    echo $result[$i];
}
于 2010-09-15T07:40:30.587 に答える
0

スクレイピングは、他の場所でデータをキャプチャするための最良のアイデアであるとは限りません。FacebookのAPIを使用して、必要な値を取得することをお勧めします。 Facebookがマークアップを変更することを決定したときはいつでも、スクレイピングは壊れます。

http://developers.facebook.com/docs/api

http://github.com/facebook/php-sdk/

于 2010-09-15T07:35:30.420 に答える
0

比較演算子について学ぶ必要があります

===厳密に比較するためのものです、あなたは使用する必要があります==

if ($div->getAttribute('id') == 'login_form')
{

}
于 2010-10-24T18:29:07.453 に答える