Goutte Scraper通过Page Object解析

时间:2015-03-18 20:13:32

标签: symfony web-scraping web-crawler guzzle goutte

对我来说这是一种学习经历,但使用Symfony和Goutte。我已经能够登录安全网站然后返回页面。

echo $crawler->html(); 

我现在要做的是解析对象$crawler。令我困惑的是Goutte似乎没有表现出如何做到这一点。我想很多人一直使用Guzzle和Goutte,但是我不能和use Guzzle\Client;一起做use Goutte\Client;声明。

我想要做的就是解析$crawler对象,找到html源代码中的某些内容。 (注意:此特定页面不使用id或类,因此我无法filter('#stuff')filter('.stuff')。)

有人可以帮我解释如何使用Goutte解析我得到的对象吗?

(编辑:我想指定,我正在尝试搜索字符串或其他东西。我可以将$crawler对象转换为纯文本源代码,然后只需执行preg_match或什么?)

1 个答案:

答案 0 :(得分:2)

$ crawler是Symfony DomCrawler Component的一个实例;实际上是DOMElement个对象的集合。

抓取工具通过使用XPath查询为filtering individual nodes提供了相当多的功能

$crawler = $crawler->filterXPath('descendant-or-self::body/p');

或使用CSS选择器。

$crawler = $crawler->filter('body > p');

通过使用其中任何一种,可以使用HTML实体而不是属性来过滤文档。有关CSS选择器的更多信息可以在here找到(这是Google搜索中的第一个链接)。

2.3中添加了输出爬虫对象的内部HTML的功能,可以通过以下方式完成:

在Symfony 2.3中添加了DomCrawler :: html()方法,它将“以HTML格式返回列表的第一个节点”。

$html = $crawler->html();

应该注意的是,当您执行过滤器时,会返回一个新的爬虫对象,其中包含DOMElements列表,这可能会导致一些意外结果(至少这是我所经历过的)。

编辑:在回复您的评论时,完全可以根据新条件进行过滤(参考下面的评论)。

您使用CSS选择器,如:

  

[属性=值]

所以你的代码看起来像是:

$crawler = $crawler->filter('a[href=' . $value . ']');

访问节点值可以像使用DOMCrawler Supplied Functions一样简单,也可以访问底层的DOMNode / NodeList / DOMElement元素。

在幕后,DomCrawler Component使用了CSS Selector Component