Simple HTML DOM的奇怪问题,并通过嵌套循环提取数据

时间:2011-08-04 09:33:01

标签: php html file parsing dom

如果这是一个新手问题我道歉,但我无法弄清楚为什么这不起作用 - 我在搜索时似乎找不到任何关于它的信息。

基本上,我试图从我们的网站上抓取一些用户细节,这些细节不能从网站REST api中获得,所以我必须手动完成。我编写了一个带有userid的文本文件,用于通过Simple HTML Dom从每个用户获取所需的详细信息。

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

$file = fopen("userids2.txt", "r") ;
while(!feof($file)) {
    $userid = fgetss($file) ;
    $url = 'http://<our URL>/user/'.$userid ;
    echo $url ; 
    webscraper($url) ;

}

fclose($file) ;
?>

以下是functions.php的内容:

   <?php
function webscraper($loopurl) {
    $html = new simple_html_dom();
    $html->load_file($loopurl);
    $test = $html->getElementsById('ctl00_ContentPlaceHolderDefault_UserViewUC_tabContainer_tabProfile_userProfile_ddWork') ;

    foreach ($test as $element) {
        echo $element ;
    }
}
?>

使用的特定文本文件包含4个用户ID,我知道它包含我想要的信息。当我运行脚本时,它只会给我文本文件中最后一行的url输出。它打印出的URL很好,但是拒绝为前三个条目加载远程html。如果我删除了文本文件的最后一行,则会加载新的最后一行(之前它拒绝这样做)。

任何想法?提前谢谢。

1 个答案:

答案 0 :(得分:0)

Doh ..我发现了问题所在。除了最后一个条目外,文本文件中的所有条目都有一个“不可见”的行尾字符。这就是它拒绝工作的原因。检索行时添加修剪可解决问题:

 $userid = trim(fgetss($file)); 

我可能应该知道这一点,但至少下次我不会犯这个错误: - )。