2014-01-30 3 views
4

Я разобрал HTML с BeautifulSoup. В конце я хотел бы получить содержимое body, но без тегов body. Но BeautifulSoup добавляет html, head и body теги. Предлагается я this googlegrops discussion один из возможных решений:BeautifulSoup - как мне получить содержимое тела

>>> from bs4 import BeautifulSoup as Soup 
>>> soup = Soup('<p>Some paragraph</p>') 
>>> soup.body.hidden = True 
>>> soup.body.prettify() 
u' <p>\n Some paragraph\n </p>' 

Это решение хак. Должен быть лучший и очевидный способ сделать это.

ответ

10

Вы имеете в виду получить все между телами тела?

В этом случае вы можете использовать:

import urllib2 
from bs4 import BeautifulSoup 
page = urllib2.urlopen('some_site').read() 
soup = BeautifulSoup(page) 
body = soup.find('body') 
the_contents_of_body_without_body_tags = body.findChildren() 
+0

Спасибо! Когда у меня есть два абзаца, я должен использовать что-то вроде '. '.join (['% s '% x для x в файле soup.body.findChildren()]), или есть лучший способ? –

+0

Я нахожу ваш путь довольно хорошим. – Azwr

+3

У меня возникли проблемы с использованием findChildren, где некоторые вещи выглядели избыточно, поскольку они были вложены в несколько слоев и были добавлены для каждого содержащего слоя. Чтобы получить содержимое из тела, как оно есть в оригинале без какой-либо избыточности или странности, я использовал 'pagefilling = '. .join (['% s '% x для x в soup.body.contents])' – kpie

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