首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony DomCrawler空对象

Symfony DomCrawler空对象
EN

Stack Overflow用户
提问于 2014-09-15 09:57:43
回答 1查看 2K关注 0票数 0

我试着用Laravel 4和Symfony DomCrawler来擦拭评论网站的评分。让我们以这个站点为例:http://estorereview.com.au/s/5951/A-Supplements,我想要得到5星的4.8

这是我尝试的部分代码:

代码语言:javascript
复制
<?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返回以下内容:

代码语言:javascript
复制
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解析器工作良好

EN

回答 1

Stack Overflow用户

发布于 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()

代码:

代码语言:javascript
复制
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");

输出:

代码语言:javascript
复制
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

所以,这很管用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25845361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档