【问题标题】:Weird issue with Simple HTML DOM and extracting the data through a nested loop简单 HTML DOM 和通过嵌套循环提取数据的奇怪问题
【发布时间】:2011-08-08 21:57:55
【问题描述】:

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

基本上,我试图从我们的网站上抓取一些用户详细信息,这些信息在网站 REST api 中不可用,因此我必须手动完成。我已经编译了一个带有用户 ID 的文本文件,用于通过 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。如果我删除文本文件的最后一行,它会加载新的最后一行(它之前拒绝这样做)。

有什么想法吗??提前致谢。

【问题讨论】:

    标签: php html file parsing dom


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      • 2016-08-03
      相关资源
      最近更新 更多