簡體   English   中英

使用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元素並輸出文本,但是由於配置文件名稱也是鏈接,而更多標簽也是鏈接,因此我也得到了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;
}

檢查手冊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM