我在过去几天对此进行了相当多的研究,我已经在网上找到了各种功能的所有答案,谢谢。
我现在有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
}
我似乎无法获取文件,然后在其余部分使用它。任何帮助,将不胜感激!提前谢谢。
答案 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;
}