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


Remove specific li element from list when parsing page with simple_html_dom

我正在用simple_html_dom拉一些页面,在一个页面上有一个我需要拉的ul li元素列表,但问题是这些基本上是视频标签,与我不需要的其他元素相结合。

下面是一个原始页面源代码的例子:

<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和输出文本中的所有a元素,但由于配置文件名称也是link,更多的标签也是link,我也得到了那个2,所以我最终得到了这个。

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

有没有一种方法可以让我去掉标签并删除其他元素,这样我就能像这样结束:

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

编辑:只是提一下,用户名不是恒定的,所以它会根据上传视频的人而变化,而且有些视频根本没有标签,有些标签或多或少。所以一切都是动态的

您可以尝试这样做:

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

查看手册