2010-02-16 3 views
3

단락이 포함 된 HTML 스 니펫이 있습니다. (나는 p 태그를 의미합니다.) 문자열을 다른 단락으로 분할하고 싶습니다. 예를 들어 :Python : 단락으로 HTML 스 니펫을 분리

''' 
<p class="my_class">Hello!</p> 
<p>What's up?</p> 
<p style="whatever: whatever;">Goodbye!</p> 
''' 

이 될해야 :

['<p class="my_class">Hello!</p>', 
'<p>What's up?</p>' 
'<p style="whatever: whatever;">Goodbye!</p>'] 

은 무엇이 접근하는 좋은 방법이 될 것입니다?

+0

매우 유사하거나 (동일하더라도 동일 함) 여기에서 복제하십시오. http://stackoverflow.com/questions/972749/python-regular-expression-for-multiple-tags 빠른 답변 : use beautifulsoup – ChristopheD

답변

5

문자열에 단락 만 포함되어 있으면 멋지게 만들어진 정규식 및 re.split()으로 벗어날 수 있습니다. 그러나 문자열이 더 복잡한 HTML이거나 항상 유효한 HTML이 아닌 경우 BeautifulSoup 패키지를 살펴볼 수 있습니다.

from BeautifulSoup import BeautifulSoup 

soup = BeautifulSoup(some_html) 

paragraphs = list(unicode(x) for x in soup.findAll('p')) 
+0

정규 표현식이이를위한 잘못된 도구입니다. HTML은 정규 언어가 아니므로 정규 표현식은 본질적으로 HTML을 구문 분석 할 수 없습니다. 게시물의 뒷부분에 표시되는 것처럼 HTML 파서를 사용하면 더욱 쉽고 읽기 쉽고 강력합니다. –

0

BeautifulSoup을 사용하여 HTML을 구문 분석하고 단락을 반복합니다.

+0

BeautifulSoup도 작동하지만 html이 추악하거나 유효하지 않은 경우에만 필요합니다. stdlib etree도 이것을 할 수 있습니다. 나는 그것이 더 강력하기 때문에 lxml을 선호한다. 어느 시점에서 BeautifulSoup을 포함시키는 이야기가있었습니다. 그게 어디로 갔는지 모르겠다. – dubiousjim

+0

'xml.etree'는 질문의 코드가 아닌 XML을 구문 분석 할 수 있습니다. –

+0

나는 HTML을 파싱하는데이 도구를 사용했다고 생각한다. 어쩌면 내가 잘못 생각하는 것일 수도있다. 하지만 이것은 내 기억을 확인하는 것 같습니다 : http://effbot.org/zone/element-index.htm#usage – dubiousjim

0

xml.etree (std lib) 또는 lxml.etree (enhanced)를 사용하면이 작업을 쉽게 수행 할 수 있지만 정확한 구문을 기억하지 못하기 때문에 이에 대한 대답 cred를 얻지는 않습니다. 비슷한 패키지로 계속 믹싱하고 매번 새로 고쳐야합니다.

2

사용 lxml.html 원하는 형태로 HTML을 구문 분석 :

사용은 같이 간다. 이것은 lxml이 여전히 활발하게 개발되고 있고 BeatifulSoup 개발이 느려지는 것을 제외하고는 BeautifulSoup을 추천하는 사람들과 본질적으로 동일한 조언입니다.

관련 문제