我正在尝试从此页面获取评论,评分和日期:
通过从页面获取一些代码我可以得到结果:
但是当我使用file_get_contents
将其应用于整个页面源时,它会给出一组警告,如:
警告:DOMDocument :: loadHTML():htmlParseEntityRef:expecting';'在实体中,行:700:F:\ wamp \ www \ htdocs \ thenwat \ yelp.php。
我使用escapeshellarg
和nl2br
删除了此问题,但没有任何帮助。
以下代码适用于较小的源代码段:https://eval.in/143036
$classname = 'rating-qualifier';
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$results = $xpath->query("//*[@class='" . $classname . "']");
if ($results->length > 0) {
echo $review = $results->item(0)->nodeValue;
}
$classname = 'review_comment ieSucks';
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$results = $xpath->query("//*[@class='" . $classname . "']");
if ($results->length > 0) {
echo $review = $results->item(0)->nodeValue;
}
$meta = $dom->documentElement->getElementsByTagName("meta");
echo $meta->item(0)->getAttribute('content');
答案 0 :(得分:1)
DOMDocument非常适合格式良好的文档,但并非所有HTML页面都是格式良好的。请改用简单HTML DOM http://sourceforge.net/projects/simplehtmldom/。我创建了一个工作解决方案,可以提取您请求的数据。
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL ^ E_NOTICE);
/************************************************
* *
* 2014.04.28 *
* Developed by Ben McFarlin at Qeala Labs *
* www.qeala.com *
* *
************************************************/
include_once('simple_html_dom.php');
function yelp($url){
print("$url\n");
$root = new stdClass();
$items = array();
$html = file_get_html($url);
if($html){
$containers = $html->find('div.review-list div.review div.review-wrapper');
foreach($containers as $container){
$comments = $container->find('div.review-content p.review_comment');
$item = new stdClass();
foreach($comments as $comment){
$comment_html = $comment->innertext();
$item->comment = $comment_html;
}
$metas = $container->find('div.review-content meta');
foreach($metas as $meta){
$itemprop = $meta->itemprop;
$content = $meta->content;
if($itemprop == 'ratingValue') $key = 'rating';
else $key = 'date';
$item->$key = $content;
}
$items[] = $item;
}
}
$root->items = $items;
if($html){
$html->clear();
unset($html);
}
return $root;
}
$url = 'http://www.yelp.com/biz/franchino-san-francisco?start=80';
$root = yelp($url);
var_dump($root);
?>
我安装了带Firebug扩展的FireFox。在查看网页时,我右键单击要捕获的数据,然后选择 使用FireBug检查元素。 将打开调试窗口,其中已选择HTML元素。我右键单击该元素并选择 复制CSS路径。 这将为元素提供完整的CSS选择器。通常情况下它过于具体,可以简化为几个元素。然后我查看HTML结构(已在调试窗口中打开)以确定我可以消除的内容。在那一点上,它只是了解CSS选择器的问题。希望有所帮助。这可能需要一些练习,但你会发现这种技术对于任何类型的HTML / CSS工作都是非常宝贵的。