我用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,
编辑:就是说,用户名不是固定的,因此根据上传视频的人而改变,而且有些视频根本没有标签,有些视频会有更多或更少的标签。事情是动态的。
答案 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;
}