1

我是 PHP 的相对初学者,我正在尝试开发的网络爬虫脚本存在问题。该脚本旨在抓取一个VBulletin 论坛页面,然后解析页面上的超链接以查找包含特定“id”元素的超链接(即仅指向论坛上发布的消息线程的链接)。每个所需链接都包含一个以“thread_title_[Thread # here]”开头的“id”元素。我想出了使用 STRPOS 作为过滤器来检查收集到的链接中的每个“id”元素并检查它们是否包含片段“thread_title”的想法。不幸的是,我的努力似乎没有结果。

我将粘贴下面的代码摘录......冒着被标记为完全菜鸟的风险。;) 希望我没有做一些非常愚蠢的事情。谢谢您的帮助

   $d = new domdocument();

   $d->loadHTMLfile("forum3.html");

    $links = $d->getElementsByTagName('a');
    echo '<html xmlns="http://www.w3.org/1999/xhtml" encoding="utf-8" lang="ar-sa">';

    foreach ($links as $link)
    {
        $threadTitleExists = $link->getAttribute('id');
        $pos = strpos($threadTitleExists, 'thread_title');  
        $threadTitle = $link->nodeValue;
        if ($link->hasAttribute('id') && ($pos==0))
        {    
             $threadTitle = trim(preg_replace('#/\s*\([^)]*\)/', ' ', $threadTitle));
             echo "Thread number: " . $threadTitleExists . "<br>Thread title: " . $threadTitle . "<p>";
        }

         else 
         {

             continue;

         }

    }
4

1 回答 1

1

换行

if ($link->hasAttribute('id') && $pos != false)

if ($link->hasAttribute('id') && $pos !== false)

如果 haystack 以 needle 开头,则strpos()返回 0,当使用松散类型的比较运算符时,它的计算结果为 false。手册页(链接)上有一条警告,请改用===运算符。

于 2012-05-21T18:15:24.600 回答