2014-01-30 8 views
4

BeautifulSoup을 사용하여 HTML을 구문 분석합니다. 결국 body 태그가 없지만 body 콘텐츠를 얻으려고합니다. 하지만 BeautifulSoup은 html, headbody 태그를 추가합니다. I 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

body 태그 사이에 모든 것을 가져 오는 것을 의미합니까? 이 경우

당신은 사용할 수 있습니다

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 for soup.body.findChildren()])'과 같은 것을 사용해야합니까, 아니면 더 좋은 방법이 있습니까? –

+0

나는 당신의 길을 꽤 잘 찾는다. – Azwr

+3

findChildren을 사용하여 몇 가지 문제가 발생했습니다. 중복 된 레이어가 중첩되어 각 레이어가 포함 된 레이어에 추가 되었기 때문에 중복되는 부분이 나타납니다. 어떤 중복이나 기괴함없이 본문에서 내용을 가져 오려면'pagefilling = '' '.join (['% s '% x for soup.body.contents])' – kpie

관련 문제