对我来说这是一种学习经历,但使用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
或什么?)
答案 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元素。