2016-08-18 6 views
1

Ich habe einen <twitterwidget> auf einem page, die entfernt werden muss (Text nicht in Tweets benötigen). Ich versuchteBeautifulSoup: Löschen eines Widgets

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

Aber es hilft nicht, den Text aus Tweets immer noch da. Auch habe ich versucht, getrennte p mit Tweets zu löschen:

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

Aber es ist nur eine Teillösung - einiger Müll aus twitterwidget noch bleibt .. Wie würde ich dieses Widget einmal loszuwerden und für alle?

Antwort

1

extrahieren Sie einfach die twitterwidget Element selbst, und es wird sie vollständig alle seine Nachkommen einschließlich entfernen:

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) 

Ausgang:

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

Das Problem ist, es es nicht finden können. Es gibt ein '' -Tag auf der Seite, aber wenn ich versuche, es mit 'ctrl + f' oder' findAll' zu finden, ist es nicht sichtbar. Der einzige Weg, um es zu sehen, ist, markieren Sie den Twitter-Text und sehen Sie sich seine Eltern ... – parsecer

+1

@ parsecer, es wird dynamisch mit js so erstellt, es sei denn, Sie verwenden etwas, das js ausführen kann, um die Quelle zu erhalten, wird es nicht sein Dort. Wie bekommen Sie die Quelle? –

+0

Ab sofort - primitiv - mit dem Code-Viewer des Web-Browsers. – parsecer

Verwandte Themen