试图刮掉div的全部内容

时间:2010-09-15 07:24:10

标签: php html web-scraping scrape

我有这个项目,我正在努力,并喜欢在touch.facebook.com的iframe中使用facebook的地方添加一个非常小的附近地点列表我可以很容易地使用touch.facebook.com/#/ places_friends.php然后然后加载标题和其他导航栏的类似信息,事件ect栏和我只想要内容。

我很确定通过查看touch.facebook.com/#/places_friends.php来源,我需要加载的是div“内容”无论如何,我是非常新的php而且我很确定是什么我想我想做的就是网络抓取。

为了在stackoverflow上找出问题并且不需要担心身份验证或任何其他我想加载登录页面以查看我是否至少可以让scrapper工作。一旦我有一个工作的拼写代码,我很确定我可以处理其余的。它已经加载了div中的所有内容。我之前见过这个,所以我知道这是可能的。它看起来与你在touch.facebook.com上登录时看到的完全一样,但没有蓝色的facebook logo,这就是我想在这里完成的事情。

所以这是登录页面,我试图加载包含文本框的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 个答案:

答案 0 :(得分: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];
}

此行中存在语法错误我现在删除它只是复制并粘贴并运行此代码

答案 1 :(得分:0)

在其他地方捕获数据并不总是最好的。我建议使用Facebook的API来检索您需要的值。 Facebook决定改变他们的标记时,报废会随时中断。

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

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

答案 2 :(得分: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];
}

答案 3 :(得分:0)

您需要了解您的比较运算符

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

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

}