对我来说,这是一次学习的经历,但是使用Symfony和Goutte。我已经能够登录到一个安全的网站,然后返回一个页面。
echo $crawler->html(); 我现在要做的是通过对象$crawler进行解析。令我困惑的是,Goutte似乎对如何做这件事并没有表现出什么看法。我想很多人都和Goutte一起使用了口香糖,但是我不能和use Goutte\Client;一起做一个use Goutte\Client;语句。
我所要做的就是通过$crawler对象进行解析,以在html源代码中找到某些内容。(注意:这个特定的页面不使用id或类,因此我不能执行filter('#stuff')或filter('.stuff')。)
有人能帮我解释一下如何使用Goutte来解析我得到的对象吗?
(编辑:我想说明一下,我也许只是在搜索一个字符串或什么的。我是否可以将$crawler对象转换为纯文本源代码,然后只执行preg_match之类的操作?)
发布于 2015-03-18 22:22:57
$crawler是Symfony DomCrawler组件的一个实例;它实际上是DOMElement对象的集合。
爬虫通过使用过滤单个节点查询为XPath提供了相当多的功能。
$crawler = $crawler->filterXPath('descendant-or-self::body/p');或者使用CSS选择器。
$crawler = $crawler->filter('body > p');通过使用这两种方法,都可以使用HTML实体而不是属性过滤文档。有关CSS选择器的更多信息可以找到这里 (这是Google搜索的第一个链接)。
在2.3中添加了输出爬虫对象内部HTML的功能,可以通过以下方式完成:
DomCrawler::html()方法是在Symfony 2.3中添加的,它将“将列表的第一个节点作为HTML返回”。
$html = $crawler->html();应该注意的是,当您执行一个过滤器时,将返回一个新的爬虫对象,其中包含一个DOMElements列表,这可能会导致一些意想不到的结果(至少这就是我所经历的)。
编辑:作为对您的评论的回应,完全可以根据新的标准进行过滤(请参阅下面的注释)。
您可以使用CSS选择器,例如:
attribute=value
因此,您的代码看起来应该是:
$crawler = $crawler->filter('a[href=' . $value . ']');访问节点值可以像使用DOMCrawler提供的函数或访问底层DOMNode / NodeList / DOMElement元素一样简单。
在幕后,DomCrawler组件使用CSS选择器组件
https://stackoverflow.com/questions/29131793
复制相似问题