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
这对我来说是一种学习经历,但使用的是 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