合并DOM查询和file_get_contents

时间:2013-08-29 10:42:27

标签: php dom xpath simple-html-dom

我在过去几天对此进行了相当多的研究,我已经在网上找到了各种功能的所有答案,谢谢。

我现在有3个单独的代码,它们都抓住了网页的内容(页面将是电子商务产品页面,评论页面,其中包含产品)以获取不同的信息,但我假设这是非常低效的抓住内容3次!

3位代码执行以下3项操作: 1)获取网页标题 2)从页面获取所有图像 3)找到数字以获得(希望是)该页面上项目的价格。

我很感激帮助将这些组合在一起所以它只需要获取文件内容一次。这是我目前的代码: 第一次:

function getDetails($Url){
    $str = file_get_contents($Url);
    if(strlen($str)>0){
        //preg_match("/\<title\>(.*)\<\/title\>/",$str,$title);
        //The above didnt work well enough (for getting Title when <title id=... > etc) so used the DOM below



            preg_match("/(\£[0-9]+(\.[0-9]{2})?)/",$str,$price); //£ for GBP
            $priceRes = preg_replace("/[^0-9,.]/", "", $price[0]);

            //$pageDeatil[0]=$title;
            $pageDeatil[1]=$priceRes;
            return $pageDeatil;

    }
}

$pageDeatil = getDetails("$newItem_URL");
//$itemTitle = $pageDeatil[0];
$itemPrice = $pageDeatil[1];

第二次:

$doc = new DOMDocument();
@$doc->loadHTMLFile("$newItem_URL");
$xpath = new DOMXPath($doc);
$itemTitle = $xpath->query('//title')->item(0)->nodeValue."\n";

第三次:

include('../../code/simplehtmldom/simple_html_dom.php');
include('../../code/url_to_absolute/url_to_absolute.php');

$html = file_get_html($newItem_URL);
foreach($html->find('img') as $e){

$imgURL =  url_to_absolute($url, $e->src);
    //More code here

}

我似乎无法获取文件,然后在其余部分使用它。任何帮助,将不胜感激!提前谢谢。

1 个答案:

答案 0 :(得分:1)

我更喜欢在抓取网站时使用cURL。你的价格提取代码似乎也不是特别有效,我认为你也应该在那里使用XPath。 函数的返回可以是具有价格,标题和图像数组的对象。

function get_details($url) {
   $ch = curl_init($url);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
   curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

   $html = curl_exec($ch);

   $dom = new DOMDocument();
   @$dom->loadHTML($html);
   $xpath = new DOMXPath($dom);

   $product         = new stdClass;
   $product->title  = $xpath->query('//title')->item(0)->nodeValue;
   $product->price  = // price query goes here
   $product->images = array();

   foreach($xpath->query('//img') as $image) {
      $product->images[] = $image->getAttribute('src');
   }

   return $product;
}