2

我有一个我正在处理的项目,我想在 touch.facebook.com 的 iframe 中使用 facebooks 地点添加一个非常小的附近地点列表,我可以轻松地使用 touch.facebook.com/#/places_friends.php但随后会加载标题和其他导航栏,例如消息、事件等栏,我只想要内容。

通过查看 touch.facebook.com/#/places_friends.php 源,我很确定,我需要加载的只是 div“内容”无论如何,我对 php 非常陌生,我很确定我的想法正在尝试做的就是所谓的网页抓取。

为了在stackoverflow上弄清楚事情并且不需要担心身份验证或任何事情,我想加载登录页面,看看我是否至少可以让刮板工作。一旦我有一个有效的抓取代码,我很确定我可以处理剩下的。它已经加载了 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

您需要了解比较运算符

===用于严格比较,您应该使用==

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

}
于 2010-10-24T18:29:07.453 回答
0

抓取并不总是在其他地方捕获数据的最佳方法。我建议使用 Facebook 的 API 来检索您需要的值。 每当 Facebook 决定更改其标记时,抓取就会中断。

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

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

于 2010-09-15T07:35:30.420 回答
0

我假设您不能使用 facebook 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 回答