使用simple_html_dom解析页面时,从列表中删除特定的li元素

时间:2014-06-01 20:18:52

标签: php arrays simple-html-dom

我用simple_html_dom拉一些页面,在页面上有一个我需要提取的ul li元素列表,但问题是这些基本上是视频标签,它与我不喜欢的其他元素组合在一起#39; t需要。

以下是原始网页来源的示例:

<ul id="video-tags">
            <li>Uploader: </li>
    <li class="profile_name"><a href="/profiles/sarasubmit">Sarasubmit</a>.</li>
            <li><em>Tagged: </em></li>
                    <li><a href="/tags/makeup">makeup</a>, </li>
                            <li><a href="/tags/cosmetic">cosmetic</a>, </li>
                            <li><a href="/tags/liner">liner</a>, </li>
                            <li><a href="/tags/fresh">fresh</a>, </li>
                            <li><a href="/tags/girls">girls</a>, </li>
                            <li><a href="/tags/fashion">fashion</a>, </li>
                    <li>more <a href="/tags/"><strong>tags</strong></a>.</li>
  </ul>

所以当我拉页面时,我尝试使用它来获取标签。

 $get_tags = $video_page_url->find('ul[id="video-tags"]', 0);

$post_tags_arr = array();
foreach($get_tags->find('a') as $tag) {
$post_tags_arr[] = $tag->plaintext;
}
$post_tags = implode(', ', $post_tags_arr);

这样我就可以获得li内的所有元素和输出文本,但由于配置文件名称也是链接,而且更多标签也是链接,我也得到了2,所以我最终得到了这个。

sarasubmit, makeup, cosmetic, liner, fresh, girls, fashion, tags

有没有办法可以删除标签并删除其他元素,所以我最终会这样:

 makeup, cosmetic, liner, fresh, girls, fashion,

编辑:就是说,用户名不是固定的,因此根据上传视频的人而改变,而且有些视频根本没有标签,有些视频会有更多或更少的标签。事情是动态的。

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

foreach($get_tags->find('li[!class] a') as $tag) {
    if($tag->plaintext != 'tags') $post_tags_arr[] = $tag->plaintext;
}

而不是:

foreach($get_tags->find('a') as $tag)
    $post_tags_arr[] = $tag->plaintext;
}

更新:我已经过测试:

$htmlStr = '<ul id="video-tags">
    <li>Uploader: </li>
    <li class="profile_name"><a href="/profiles/sarasubmit">Sarasubmit</a>.</li>
    <li><em>Tagged: </em></li>
    <li><a href="/tags/makeup">makeup</a>, </li>
    <li><a href="/tags/cosmetic">cosmetic</a>, </li>
    <li><a href="/tags/liner">liner</a>, </li>
    <li><a href="/tags/fresh">fresh</a>, </li>
    <li><a href="/tags/girls">girls</a>, </li>
    <li><a href="/tags/fashion">fashion</a>, </li>
    <li>more <a href="/tags/"><strong>tags</strong></a>.</li>
</ul>';

$html = str_get_html($htmlStr);
foreach($html->find('li[!class] a') as $tag) {
    if($tag->plaintext != 'tags') $post_tags_arr[] = $tag->plaintext;
}
print_r($post_tags_arr);

输出:

Array
(
    [0] => makeup
    [1] => cosmetic
    [2] => liner
    [3] => fresh
    [4] => girls
    [5] => fashion
)

所以,试试这个:

$html = file_get_html($url);
foreach($html->find('li[!class] a') as $tag) {
    if($tag->plaintext != 'tags') $post_tags_arr[] = $tag->plaintext;
}

Check the manual