2010-09-10 52 views
1

有人能告訴我一些例子導入一個HTML頁面和 使用XPath查找的關鍵字(包括文字)從DIV,P,標題等的DOMDocument的XPath

謝謝休息!

編輯:

在這種情況下,我用我如WebCrawler的,我有一個表格讓網站被抓取和關鍵字至極已在網站頁面被找到。

http://crawler.tmp.remote.nl/example.php 

現在它掃描關鍵字裏面的網頁,我的問題..我需要圍繞創建關鍵字的div區域。

class MyCrawler extends PHPCrawler 
{ 


    function handlePageData(&$page_data) 
    { // CHECK DOMEIN 
    $domain = $_POST['domain']; 
    $keywords = $_POST['keywords']; 
     //$tags = get_meta_tags($page_data["url"]); 
     //$iKeyFound = null; 


$find = $keywords; 
$str = file_get_contents($page_data["url"]); 
if(strpos($str, $find) == true) 
{   
    echo $page_data["referer_url"]. ' - gevonden'; 

    $keywords = $_POST['keywords']; 
    if($page_data["header"]){ 
    echo "<table border='1' >"; 
    echo "<tr><td width='300'>Status:</td><td width='500'> ".strtok($page_data["header"], "\n")."</td></tr>";} 
    else "<table border='1' >"; 

    // PRINT EERSTE LIJN 

    echo "<tr><td>Page requested:</td><td> ".$page_data["url"]."</td></tr>"; 
    // PRINT STATUS WEBSITE 

    // PRINT WEBPAGINA 
    echo "<tr><td>Referer-page:</td><td> ".$page_data["referer_url"]."</td></tr>"; 

    // CONTENT ONTVANGEN? 
    if ($page_data["received"]==true) 
     echo "<tr><td>Content received: </td><td>".$page_data["bytes_received"]/8 . " Kbytes</td></tr></table>"; 
    else 
     echo "<tr><td>Content:</td><td> Not received</td></tr></table>"; 


    $domain = $_POST['domain']; 
    $link = mysql_connect('localhost', 'crawler', '--'); 

    if (!$link) 
    { 
     die('Could not connect: ' . mysql_error()); 
    } 

    mysql_select_db("crawler"); 
    if(empty($page_data["referer_url"])) 
    $page_data["referer_url"] = $page_data["url"]; 

    strip_tags($str, '<p><b>'); 
    $matches = $keywords; 
    //$match = preg_match_all("'/<(*.?)(*.?)>(*.?)'".$keywords."'(*.?)<\/($1)>/'", $str, $matches, PREG_SET_ORDER); 
    //echo $match; 



    mysql_query("INSERT INTO crawler (id, domain, url, keywords, data) VALUES ('', '".$page_data["referer_url"]."', '".$page_data["url"]."', '".$keywords."', '".mysql_real_escape_string($str) . "')"); 



    echo '<br>'; 
    echo "<br><br>"; 
    echo str_pad(" ", 5000); // "Force flush", workaround 
    flush(); 



} 
+0

「keywords」as in < VolkerK 2010-09-10 09:56:09

+0

不,表單輸入:$ _POST ['keywords'], 我已經制作了腳本來查找網站中的關鍵字現在我只需要在div中找到關鍵字的文本。 – Jordy 2010-09-10 09:58:20

+0

「我需要圍繞創建的關鍵字的div區域。」這與昨天提出的問題有什麼不同? – GZipp 2010-09-10 12:46:56

回答

1

XPath表達式來查找包含某些關鍵字可能是<div>元素:

$someKeyword = "foobar"; 
$xPath = "//text()[contains(., '$someKeyword')]/ancestor::div[1] 

要匹配時不區分大小寫,要麼使用translate()

$upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
$lower = strtolower($upper); 
$someKeyword = "foobar"; 
$xPath = "//text()[ 
      contains(
       translate(., '$upper', '$lower'), 
       translate('$someKeyword', '$upper', '$lower') 
      ) 
      ]/ancestor::div[1]"; 

或(這將在搜索方面更容易)在創建一個DOMDocument之前小寫整個HTML字符串,然後簡單地使用第一個XPath表達式。

+0

問題解決了! – Jordy 2010-09-10 12:57:21