【问题标题】:Node of Dom Parser to get title from a html page从 html 页面获取标题的 Dom Parser 节点
【发布时间】:2012-09-26 14:54:20
【问题描述】:

这是html页面:

<div class="gs_ri">
   <h3 class="gs_rt">
     <span class="gs_ctc">
     <span class="gs_ct1">[BOOK]</span>
     <span class="gs_ct2">[B]</span></span>
     <a href="http://example.com" onmousedown="">Title</a></h3>
<div class="gs_a">A</div>
<div class="gs_rs">B</div>
<div class="gs_fl"><a href="">C</a> <a href="">D</a> <a href=""</a></div></div></div>  
<div class="gs_r"><div class="gs_ggs gs_fl"><button type="button" id="gs_ggsB2" class="gs_btnFI gs_in_ib gs_btn_half">
     <span class="gs_wr"><span class="gs_bg"></span>
     <span class="gs_lbl"></span>
     <span class="gs_ico"></span></span></button>
<div class="gs_md_wp" id="gs_ggsW2"><a href="http://example.pdf" onmousedown=""

我对确定节点有点困惑。

我想得到http://example.comTitle

我认为有两种方法可以得到它们:

它是&lt;span&gt; 的兄弟:

 foreach($html->find('span[class=gs_ctc2] ') as $link){
    $link = $link->next_sibling();
    echo $link->plaintext;
    echo $link->href;
}

但它不起作用。

第二个,我以&lt;h3 class="gs_rt"&gt;为父母,所以它是最后一个孩子的兄弟

foreach($html->find('h3[class=gs_rt] a') as $link){
    $link = $link->last_child()->next_sibling();
    echo $link->plaintext;
    echo $link->href;
}

它也不起作用。我认为我还不了解 abot 节点 dom 树。

【问题讨论】:

    标签: php parsing dom simple-html-dom


    【解决方案1】:

    您不必选择兄弟姐妹。

    使用h3[class=gs_rt] a,您已经定位到相应的&lt;a&gt; 标记。所以只需从那里提取所需的值。但是,您可以按如下方式简化该选择器:

    foreach($html->find('h3.gs_rt a') as $link){
        echo $link->plaintext;
        echo $link->href;
    }
    

    编辑

    关于评论,我认为你想要的是这样的东西,但我不确定,你上面的代码很乱(请使用适当的缩进!)

    foreach($html->find('h3.gs_rt') as $block){
        $link = $block->find( 'a' );
        echo $link->plaintext;
        echo $link->href;
    
        $otherLink = $block->find( 'div[class=gs_md_wp] a' );
        // do stuff with that $otherLink
    }
    

    【讨论】:

    • 对不起,我还有一个问题,先生。我在上面添加了html页面。我可以通过find('div[class=gs_md_wp]') as $docLink $link = $docLink-&gt;first_child(); 获得http://example.pdf(在最后一行)如果我想将它与您的代码分组。如何确定节点?应该是 ->
    • foreach($html-&gt;find('h3.gs_rt a') as $link){ foreach($link-&gt;parent()-&gt;parent()-&gt;parent()-&gt;find('div[class=gs_md_wp]') as $docLink) ?在此先感谢:)
    • @rosen_ 我不确定 Simple Html DOM,但编辑后的代码应该可以工作,如果它像大多数 DOM 解析器一样工作。
    【解决方案2】:

    将id添加到href

    <a id="myid" href="http://example.com" onmousedown="javascript:get_title('#myid')">Title</a></h3>
    
    function get_title(i){
    var h =$(i).attr('href');  
    var t =$(i).text(); 
     alert('the link is (' + h + ' ) and the title is (' + t + ' )');
            }
    

    【讨论】:

    • 谢谢,但我更喜欢使用简单的 html dom 解析器,先生 :)
    猜你喜欢
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    相关资源
    最近更新 更多