【问题标题】:Simple HTML DOM - Skip certain element简单的 HTML DOM - 跳过某些元素
【发布时间】:2019-03-12 09:00:37
【问题描述】:

我想忽略<h3> 元素内的<a> 的内容,只获取<h3> 的文本。

<h3>
144.000 TL
<a class="emlak-endeksi-link trackClick trackId_emlak-endeksi-link" id="emlakEndeksiLink">
Emlak Endeksi</a>
</h3>

示例:只想获得 144.000 TL 而忽略 (Emlak Endeksi)

foreach ($html1->find('div.classifiedInfo h3') as $price) {
    $ilanlar['price'] = $price->plaintext;
}

【问题讨论】:

    标签: php web-scraping simple-html-dom


    【解决方案1】:

    不是非常熟悉简单的html dom,但是...通过http://simplehtmldom.sourceforge.net/manual.htm#frag_find_textcomment选择文本节点应该有帮助吗?

    $ilanlar['price'] = $price->find('text', 0)->plaintext;
    

    【讨论】:

    • 非常感谢@jakumi,它对我有用,而且是最短的方法
    【解决方案2】:

    也许删除&lt;a&gt; 标签会有所帮助:

    $str = <<<str
    <h3>
    144.000 TL
    <a class="emlak-endeksi-link trackClick trackId_emlak-endeksi-link" id="emlakEndeksiLink">
    Emlak Endeksi</a>
    </h3>
    str;
    
    $html = str_get_html($str);
    
    // Find first <h3>
    $h3 = $html->find('h3', 0);
    
    // Find first <a> inside the <h3>, or use $h3->find('a') to find all of them
    $a = $h3->find('a', 0);
    
    // Remove <a> tag
    $a->outertext = '';
    
    // Output: "144.000 TL"
    print trim($h3->innertext);
    

    【讨论】:

      【解决方案3】:

      你可以通过正则表达式来做到这一点。

      preg_match_all('\<h3>([^\n]*\n+)+<a([^\n]*\n+)+<\/h3>\', $content, $output);
      echo $output[1];
      

      https://regex101.com/r/qM5Nlk/1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-11
        • 2016-06-05
        • 2014-08-09
        • 2012-01-03
        • 2015-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多