先說結論,這篇文章會介紹到
- BeautifulSoup 去除多餘 Tag or Element(Delete Tag, Element)
前言:
第一次看到這種問題我自己也很好奇做法,所以我就查了一下關鍵字
然後第一個網頁就找到做法了….
我遇到的問題是這個: PTT Python 版問題
原PO希望在做爬蟲時把一個 Tag 裡面的其他資訊去掉只留下最外層tag的最後幾個字。
第一次遇到需要去除元素的狀況
所以來分享一下我自己會用的做法吧!(順便回復原PO問題XD
問題描述
原PO在爬的網站是這個
目標就是下面用黃色螢光筆標記的文字
這段 HTML code 就放在下面
可以觀察到幾件事情
- (彎刀草寇) 是在 div.panel-heading 最後面的文字
- 但是 div.panel-heading並無其他同一層的文字
這時候就可以考慮把所有 children 刪除抓取文字了

<div class="panel panel-default"> <div class="panel-heading"> <span class="label label-primary">3738</span> <span class="label label-default">Lv.107</span> <span id="tooltip_3738" class="label label-info" rel="tooltip" data-original-title="<img src='https://rd-center.fharr.com/assets/sprite/몬스터/cowraiders3.gif' style='max-height:75px;max-width:60px;' />" data-html="true">魔物模組</span> <span class="label label-success"></span> <a href="https://rd.fharr.com/mob-3738.html">草寇</a> (彎刀草寇) </div> <table class="table table-bordered table-hover"> <tbody> <tr> <td width="20%"><span style="font-weight:bold;">B.exp:</span> 3,614</td> <td width="20%"><span style="font-weight:bold;">J.exp:</span> 3,438</td> <td width="30%"><span style="font-weight:bold;">HP:</span> 14,547</td> <td width="30%">人形 / 火2 [小]</td> </tr> </tbody> </table> </div>
偷懶一下,直接把那段 html 複製下來XD
使用 open 讀取
from bs4 import BeautifulSoup with open("./target.html", "r", encoding="utf-8") as f: content = f.read() page = BeautifulSoup(content, "html.parser")
接者使用 findAll() 把所有的 children 抓出來
並且使用一個一般人不會用的 function
decompose
接下來就會看到這個樣子了~
之後用 strip() 就可以得到漂亮的 (彎刀草寇) 囉~

target = page.find("div", {"class":"panel-heading"}) for child in target.findAll(): child.decompose() print(target.text.strip())
結尾:
畢竟我學 Python 就是從爬蟲起家的
人生第一個 Case 也是用 Python 爬蟲做的~
看到難題就是想要挑戰一下XD
就這樣啦!如果有什麼問題或是有更好的做法的話都可以在下方討論喔!
或是有想說的什麼話都可以留言跟我說喔!
那就下一篇再見啦!
ㄅㄅ