【问题标题】:How to combine the text node of 2 pieces of extracted data using Goutte/Domcrawler如何使用 Goutte/Domcrawler 组合 2 条提取数据的文本节点
【发布时间】:2016-05-05 06:49:09
【问题描述】:

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

<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>

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

【问题讨论】:

    标签: php goutte domcrawler


    【解决方案1】:

    就我而言,我采取了迂回的方式到达我想去的地方。我在 DOM 中后退一层到 td 标记并抓取所有内容并将其转储到数组中。

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

    $items_out = $crawler->filter('td.item_info')->each(function (Crawler $node, $i) {
        return $node->text();   
    });
    

    我试图避免捕获td,因为作者的也包含在这些单元格中。经过更多的挖掘,我能够使用以下内容从数组中删除作者:

    foreach ($items_out as &$items) {
        $items = substr($items,0, strpos($items,' - by'));
    }
    

    我只花了五天时间就搞定了。现在进入下一个问题!

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2017-10-04
        • 2015-06-25
        • 2019-12-23
        • 2015-08-10
        • 1970-01-01
        • 2011-11-02
        • 2018-06-13
        • 2016-06-07
        • 1970-01-01
        相关资源
        最近更新 更多