如何使用Goutte / Domcrawler组合2个提取数据的文本节点

时间:2016-01-28 03:19:04

标签: php goutte domcrawler

我一直在试图弄清楚如何将两段提取的文本组合成一个结果(数组)。在这种情况下,各种书籍的标题和副标题。

<td class="item_info">
  <span class="item_title">Carrots Like Peas</span>
  <em class="item_subtitle">- And Other Fun Facts</em>
</td>

我能得到的最接近的是:

$holds = $crawler->filter('span.item_title,em.item_subtitle');

我已设法输出以下内容:

$holds->each(function ($node) {
    echo '<pre>';
    print $node->text();
    echo '</pre>';
});

结果

<pre>Carrots Like Peas</pre>
<pre>- And Other Fun Facts</pre>

另一个问题是并非所有的书都有字幕,所以我需要避免将两个标题组合在一起。 我如何将这两者合并为一个结果(或数组)?

2 个答案:

答案 0 :(得分:0)

根据Goutte Documentation,Goutte使用Symfony DomCrawler组件。有关向DomCrawler对象添加内容的信息,请访问Symfony DomCrawler - Adding Content

答案 1 :(得分:0)

在我的情况下,我采取了一种迂回的方式来达到我想要的地方。我将DOM中的一个级别退回到$items_out = $crawler->filter('td.item_info')->each(function (Crawler $node, $i) { return $node->text(); }); 标记并抓取所有内容并将其转储到数组中。

我意识到DomCrawler的文档中有示例代码将文本节点放入数组中。

td

我试图避免捕获foreach ($items_out as &$items) { $items = substr($items,0, strpos($items,' - by')); } 因为作者也包含在这些单元格中。经过更多的挖掘,我能够从数组中删除作者:

# anonymizer options
request_header_access From deny all
request_header_access Server deny all
request_header_access Link deny all
request_header_access Via deny all
request_header_access X-Forwarded-For deny all

我花了五天时间把它全部整理好了。现在进入下一个问题!