Goutte Scraper 通过页面对象解析

Goutte Scraper Parse through Page Object

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

echo $crawler->html(); 

我现在要做的是解析对象$crawler。让我感到困惑的是 Goutte 似乎并没有展示太多关于如何做到这一点。我认为很多人都将 Guzzle 与 Goutte 一起使用,但我无法将 use Guzzle\Client; 语句与 use Goutte\Client; 一起使用。

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

谁能帮我解释一下如何使用Goutte解析我得到的对象?

(编辑:我想说明,我可能只是想搜索一个字符串或其他东西。我可以将 $crawler 对象转换为纯文本源代码然后只执行 preg_match 什么的?)

$crawler 是 Symfony DomCrawler Component; which is actually set of DOMElement 个对象的实例。

爬虫通过使用 XPath 查询

filtering individual nodes 提供了相当多的功能
$crawler = $crawler->filterXPath('descendant-or-self::body/p');

或使用 CSS 选择器。

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

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

2.3新增爬虫对象内部HTML输出功能,可通过以下方式完成:

Symfony 2.3 添加了 DomCrawler::html() 方法,它将 "return the first node of the list as HTML".

$html = $crawler->html();

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

编辑:针对您的评论,完全可以根据新标准进行过滤(参考下面的评论)。

您使用 CSS 选择器,例如:

[attribute=value]

因此您的代码如下所示:

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

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

幕后DomCrawler Component makes use of the CSS Selector Component