2010-09-10 6 views
1

Quelqu'un peut-il me montrer quelques exemples d'importer une page html et utiliser XPath pour trouver les mots-clés, y compris le reste du texte de la div, p, titre, etc.DOMDocument XPath

Merci!

EDIT:

Dans ce cas, j'utiliser mon webcrawler par exemple, j'ai un formulaire pour obtenir le site Web à rampé et les mots-clés wich doit être trouver dans les pages du site. Maintenant, il scanne les pages Web avec les mots-clés à l'intérieur, mon problème .. J'ai besoin de la zone div autour des mots-clés fondés.

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" comme dans ' VolkerK

+0

Non, entrée de formulaire: $ _POST ['keywords'], J'ai déjà créé un script pour rechercher les mots-clés dans les sites Web Maintenant, je n'ai qu'à trouver le texte à l'intérieur du mot-clé. – Jordy

+0

"J'ai besoin de la zone div autour des mots-clés." En quoi est-ce différent de la question que vous avez posée hier: – GZipp

Répondre

1

Une expression XPath pour trouver <div> éléments qui contiennent certains mots-clés pourraient être:

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

Pour correspondre insensible à la casse, utilisez translate():

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

ou (et qui être beaucoup plus facile en termes de recherche) en minuscules la chaîne HTML entière avant de créer un DOMDocument à partir de là, puis simplement utiliser la première expression XPath.

+0

Problème résolu !!!! – Jordy