代码之家  ›  专栏  ›  技术社区  ›  Jordy

文档XPath

  •  1
  • Jordy  · 技术社区  · 16 年前

    有人能给我举几个例子来导入一个html页面和

    谢谢您!

    在这种情况下,我使用我的webcrawler为例,我有一个表格,让网站被爬网和关键字,其中必须找到网页的网站。

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

    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();
    
    
    
    }
    
    1 回复  |  直到 16 年前
        1
  •  0
  •   Tomalak    16 年前

    要查找的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]";
    

    或者(在搜索方面要容易得多)在用整个HTML字符串创建DOMDocument之前将其小写,然后只使用第一个XPath表达式。