2016-07-31 10 views
1

Ich lerne, wie html zu analysieren und zu manipulieren beautiful soup mit etwa so:BeautifulSoup nicht ich Element entfernen

from lxml.html import parse 
import urllib2 
from urllib2 import urlopen 
from BeautifulSoup import BeautifulSoup 

url = 'some-url-here' 
req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"}) 
parsed = urllib2.urlopen(req) 
soup = BeautifulSoup(parsed) 

for elem in soup.findAll(['script', 'style', 'i']): 
    elem.extract() 

for main_body in soup.findAll("div", {"role" : "main"}): 
    print main_body.getText(separator=u' ') 

Das Ergebnis enthält <i> Tags und ich kann nicht herausfinden, wie sie zu entfernen. Wie kann dies erreicht werden und warum wird das einzige Tag nicht durch den obigen Code entfernt?

+0

können Sie die HTML teilen? Der Code sollte gut funktionieren, wie –

Antwort

1

Die Frage ist eigentlich die Tatsache, dass Sie die veraltete Beautifulsoup3 verwenden, installieren bs4 und alles wird gut funktionieren:

In [10]: import urllib2 
In [11]: from bs4 import BeautifulSoup # bs4 

In [12]: url = 'https://www.gwr.com/' 

In [13]: req = urllib2.Request(url, headers={'User-Agent': "Magic Browser"}) 

In [14]: parsed = urllib2.urlopen(req) 

In [15]: soup = BeautifulSoup(parsed,"html.parser") 

In [16]: tags = soup.find_all(['script','style','i']) 

In [17]: print(len(tags)) 
25 

In [18]: for elem in tags: 
    ....:   elem.extract() 
    ....:  

In [19]: assert len(soup.find_all(['script','style','i'])) == 0 

In [20]: 
+0

Problem gelöst ist. Vielen Dank! – goose

+0

Kein Problem, gern geschehen. Abgesehen davon, wenn Sie wissen, wie xpaths/css dann lxml wäre effizienter als mit bs4. –

+0

Danke, ich werde es überprüfen. Ich bin gerade erst in den letzten Monaten zu Python eingetaucht, da ich vermute, dass ich eine Menge Module entdecken kann, die Teil der "Hauptnahrung" werden. – goose