2010-08-27 3 views
3

Я новичок в python, и я использую BeautifulSoup для анализа веб-сайта, а затем для извлечения данных. У меня есть следующий код:Удаление тегов из HTML с использованием BeautifulSoup

for line in raw_data: #raw_data is the parsed html separated into smaller blocks 
    d = {} 
    d['name'] = line.find('div', {'class':'torrentname'}).find('a') 
    print d['name'] 

<a href="/ubuntu-9-10-desktop-i386-t3144211.html"> 
<strong class="red">Ubuntu</strong> 9.10 desktop (i386)</a> 

Обычно я был бы в состоянии экстракт «Ubuntu 9,10 рабочего стола (i386)», написав:

d['name'] = line.find('div', {'class':'torrentname'}).find('a').string 

, но из-за сильных HTML-теги не возвращает None. Есть ли способ извлечь сильные теги, а затем использовать .string или есть лучший способ? Я попытался использовать функцию extractSys(), но я не мог заставить его работать.

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

+0

связаны: http://stackoverflow.com/questions/598817/python-html-removal/599080 # 599080 – jfs

ответ

3

Используйте свойство ".text":

d['name'] = line.find('div', {'class':'torrentname'}).find('a').text 

Или объединение на FindAll (текст = True):

anchor = line.find('div', {'class':'torrentname'}).find('a') 
d['name'] = ''.join(anchor.findAll(text=True)) 
+0

Это не работает. Он не сохраняет пробелы в следующем примере: Ubuntu Linux. Он выходит как UbuntuLinux. – FlowofSoul

+0

Я обновил ответ с дополнительной опцией. –

+0

Большое спасибо, что отлично работает! Не могли бы вы объяснить, как работает вторая строка кода? – FlowofSoul

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