2016-07-31 2 views
1

Я учусь, как разобрать и манипулировать htmlbeautiful soup с помощью так:BeautifulSoup не удалит элемент я

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' ') 

Результат содержит <i> теги и я не могу понять, как удалить их. Как это можно сделать и почему единственный тег не должен быть удален указанным выше кодом?

+0

Можете ли вы поделиться HTML? Код должен работать нормально, как и –

ответ

1

Вопрос на самом деле тот факт, вы используете устаревшие Beautifulsoup3, установить bs4 и все будет работать нормально:

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

Проблема решена. Спасибо! – goose

+0

Нет, пожалуйста. В стороне, если вы знаете, как xpaths/css, тогда lxml будет более эффективным, чем использование bs4. –

+0

Спасибо, что посмотрю. Только что погрузился в Python за последний месяц, поэтому подозреваю, что у меня есть много модулей, чтобы раскрыть это, и это станет частью «штапельной диеты». – goose

Смежные вопросы