首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Goutte刮刀通过Page对象解析

Goutte刮刀通过Page对象解析
EN

Stack Overflow用户
提问于 2015-03-18 20:13:31
回答 1查看 1.1K关注 0票数 0

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

代码语言:javascript
复制
echo $crawler->html(); 

我现在要做的是通过对象$crawler进行解析。令我困惑的是,Goutte似乎对如何做这件事并没有表现出什么看法。我想很多人都和Goutte一起使用了口香糖,但是我不能和use Goutte\Client;一起做一个use Goutte\Client;语句。

我所要做的就是通过$crawler对象进行解析,以在html源代码中找到某些内容。(注意:这个特定的页面不使用id或类,因此我不能执行filter('#stuff')filter('.stuff')。)

有人能帮我解释一下如何使用Goutte来解析我得到的对象吗?

(编辑:我想说明一下,我也许只是在搜索一个字符串或什么的。我是否可以将$crawler对象转换为纯文本源代码,然后只执行preg_match之类的操作?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-18 22:22:57

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

爬虫通过使用过滤单个节点查询为XPath提供了相当多的功能。

代码语言:javascript
复制
$crawler = $crawler->filterXPath('descendant-or-self::body/p');

或者使用CSS选择器。

代码语言:javascript
复制
$crawler = $crawler->filter('body > p');

通过使用这两种方法,都可以使用HTML实体而不是属性过滤文档。有关CSS选择器的更多信息可以找到这里 (这是Google搜索的第一个链接)。

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

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

代码语言:javascript
复制
$html = $crawler->html();

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

编辑:作为对您的评论的回应,完全可以根据新的标准进行过滤(请参阅下面的注释)。

您可以使用CSS选择器,例如:

attribute=value

因此,您的代码看起来应该是:

代码语言:javascript
复制
$crawler = $crawler->filter('a[href=' . $value . ']');

访问节点值可以像使用DOMCrawler提供的函数或访问底层DOMNode / NodeList / DOMElement元素一样简单。

在幕后,DomCrawler组件使用CSS选择器组件

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

https://stackoverflow.com/questions/29131793

复制
相关文章

相似问题

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