我试着用Laravel 4和Symfony DomCrawler来擦拭评论网站的评分。让我们以这个站点为例:http://estorereview.com.au/s/5951/A-Supplements,我想要得到5星的4.8
这是我尝试的部分代码:
<?php
use Symfony\Component\DomCrawler\Crawler;
use Symfony\Component\CssSelector\CssSelector;
function getRatingEstoreReview($url){
$html = getHtmlCurl($url);
$crawler = new Crawler($html);
$crawler = $crawler->filter('span[itemprop="ratingValue"]');
var_dump($crawler);
die("test");
return normalize($crawler,5);
}var_dump返回以下内容:
object(Symfony\Component\DomCrawler\Crawler)[280]
protected 'uri' => null
private 'defaultNamespacePrefix' => string 'default' (length=7)
private 'namespaces' =>
array (size=0)
empty我尝试了其他网站等,但我总是得到一个空的对象。使用$crawler->first访问该值也不起作用。
我做错了什么?谢谢。
编辑:即使我正在过滤"div“,Crawler仍然是空的。PHP简单的HTML解析器工作良好
发布于 2014-09-16 12:09:19
该元素的完整CSS路径是body > div:nth-child(3) > div > div > div.left-container.floatl > div.top > div.top-inner > div.store-rating-container.floatl > div.star-col.floatl.overall-rating-stars > div.rating-text.floatl > div > strong > span。你试过用它作为你的过滤术语吗?
您也可以使用filterXPath(),在这种情况下,您正在寻找/html/body/div[3]/div/div/div[4]/div[1]/div[2]/div[2]/div[1]/div[2]/div/strong/span。
编辑:它看起来不适用于这个特定的页面,但只是想提到一个“抓到”的网页爬行。请记住,对于某些网页,内容将被JavaScript操纵(后加载)。在这种情况下,您要寻找的元素可能根本不会被DomCrawler看到。
更新:
这是我看到的结果。我使用的是古特而不是getHtmlCurl()。
代码:
use Goutte\Client;
use Symfony\Component\DomCrawler\Crawler;
$client = new Client();
$crawler = $client->request('GET', 'http://estorereview.com.au/s/5951/A-Supplements');
var_dump($crawler->filter('span[itemprop="ratingValue"]'));
echo $crawler->filter('span[itemprop="ratingValue"]')->text();
die("<br />test completed");输出:
object(Symfony\Component\DomCrawler\Crawler)[177]
protected 'uri' => string 'http://estorereview.com.au/s/5951/A-Supplements' (length=47)
private 'defaultNamespacePrefix' => string 'default' (length=7)
private 'namespaces' =>
array (size=0)
empty
4.8
test completed所以,这很管用。
https://stackoverflow.com/questions/25845361
复制相似问题