1
我是PHP的相對初學者,我正在嘗試開發一個Web刮板腳本。該腳本旨在獲取VBulletin論壇頁面,然後解析頁面上的超鏈接以查找包含特定「id」元素的鏈接(即僅指向發佈在論壇上的消息線索的鏈接)。每個所需的鏈接都包含一個以「thread_title_ [Thread#here]」開頭的「id」元素。我提出了使用STRPOS作爲過濾器來檢查收集到的鏈接中的每個「id」元素並檢查它們是否包含片段「thread_title」的想法。不幸的是,我的努力似乎沒有結果。PHP與GetElementById,getAttribute和StrPos有關的問題
我將粘貼下面的代碼摘錄......以被標記爲完整noobie的風險。 ;)希望我不做一些非常愚蠢的事情。感謝您的幫助
$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;
}
}
謝謝,這有助於很多...但我仍然沒有通過nodeValue獲取超鏈接錨文本。它一直顯示空白。有任何想法嗎? – user1408397
var_dump($ link-> nodeValue)產生了什麼?如果它不是空的,我會看看你正在申請的正則表達式'$ threadTitle' – Crisp
是的......它絕對不是空的......我看到了錨文本的一些零碎。再次感謝 - 我要再看一眼,看看我能否理清問題。 – user1408397