發表於 爬蟲Python問題解答

【Python】去你的多於資訊! BeautifulSoup 去除 tag, element (Delete Tag, Element)

先說結論,這篇文章會介紹到

  • BeautifulSoup 去除多餘 Tag or Element(Delete Tag, Element)

前言:

第一次看到這種問題我自己也很好奇做法,所以我就查了一下關鍵字
然後第一個網頁就找到做法了….
我遇到的問題是這個: PTT Python 版問題

原PO希望在做爬蟲時把一個 Tag 裡面的其他資訊去掉只留下最外層tag的最後幾個字。

第一次遇到需要去除元素的狀況
所以來分享一下我自己會用的做法吧!(順便回復原PO問題XD

問題描述

原PO在爬的網站是這個

目標就是下面用黃色螢光筆標記的文字
這段 HTML code 就放在下面
可以觀察到幾件事情

  1. (彎刀草寇) 是在 div.panel-heading 最後面的文字
  2. 但是 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>
        &lt;span id=&quot;tooltip_3738&quot; class=&quot;label label-info&quot; rel=&quot;tooltip&quot;
            data-original-title=&quot;<img src='https://rd-center.fharr.com/assets/sprite/몬스터/cowraiders3.gif' style='max-height:75px;max-width:60px;' />"
            data-html="true"&gt;魔物模組</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%">人形&nbsp;/&nbsp;火2&nbsp;[小]</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() 就可以得到漂亮的 (彎刀草寇) 囉~

刪除所有 children 之後的樣子

target = page.find("div", {"class":"panel-heading"})
for child in target.findAll():
    child.decompose()

print(target.text.strip())

結尾:

畢竟我學 Python 就是從爬蟲起家的
人生第一個 Case 也是用 Python 爬蟲做的~
看到難題就是想要挑戰一下XD

就這樣啦!如果有什麼問題或是有更好的做法的話都可以在下方討論喔!
或是有想說的什麼話都可以留言跟我說喔!
那就下一篇再見啦!
ㄅㄅ

作者:

一位 熱愛資工領域、喜歡好笑事物、偶爾打打網球 的學生 ! For A Better Me!

發表迴響

Please log in using one of these methods to post your comment:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.