2016-08-18 42 views
1

我有一個<twitterwidget>page需要刪除(不需要在推文中的文本)。 我試圖BeautifulSoup:刪除一個小部件

for script in soup(["script", "style"]): 
     script.extract() 

但它沒有幫助,從微博文本仍然存在。 我也試着刪除單獨p與鳴叫:

for s in soup('p'): 
    try: 
     if s["lang"]=="en": 
     s.extract() 
    except: 
     pass 

但它只能解決部分問題 - 從twitterwidget一些垃圾仍然有.. 我將如何擺脫小部件的一勞永逸?

回答

1

只需提取的twitterwidget元素本身,它會刪除它完全包括其所有後代:

from bs4 import BeautifulSoup 

html = """<div>foobar</div> <twitterwidget class="twitter-tweet twitter-tweet-rendered" id="twitter-widget-0" data-tweet-id="763961058490933248" style="position: static; visibility: visible; display: block; transform: rotate(0deg); max-width: 100%; width: 500px; min-width: 220px; margin-top: 10px; margin-bottom: 10px;"></twitterwidget>""" 
soup = BeautifulSoup(html) 

soup.find("twitterwidget").extract() 
print(soup) 

輸出:

<html><body><div>foobar</div> </body></html> 
+0

的問題是,它無法找到它。在頁面上有一個''標記,但是當我嘗試使用'ctrl + f'或使用'findAll'找到它時,它不可見。看到它的唯一方法是突出Twitter的文本,並看看它的父... – parsecer

+1

@parsecer,它是動態創建使用js,所以除非你使用的東西,可以運行js獲取源,它不會是那裏。你如何獲得源代碼? –

+0

截至目前 - 基本上 - 使用網絡瀏覽器的代碼查看器。 – parsecer