1

私はPHPの比較的初心者であり、開発しようとしているWebスクレイパースクリプトに問題があります。このスクリプトは、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)

strpos()は、干し草の山が針で始まる場合は0を返します。これは、緩く型付けされた比較演算子を使用するとfalseと評価されます。===代わりに演算子を使用するようにマニュアルページ(リンク)に警告があります。

于 2012-05-21T18:15:24.600 に答える