2011-11-13 4 views
26

내가 div 인 페이지가 있다고 가정 해 보겠습니다. soup.find()으로 쉽게 해당 div를 얻을 수 있습니다.BeautifulSoup innerhtml?

결과가 생겼으니, div의 전체 innerhtml을 인쇄하고 싶습니다. 즉, 모든 HTML 태그와 텍스트를 모두 포함하는 문자열이 필요합니다. 정확하게 문자열과 같습니다. obj.innerHTML으로 자바 스크립트를 사용하십시오. 이것이 가능한가?

innerhtml = "".join([str(x) for x in div_element.contents]) 

답변

11

하나는 같은 사용 일 수 있습니다. 아마도 누군가 문서를 업데이트해야합니까?

+1

유니 코드 (x는) –

+1

안전 할 수있는이와 몇 가지 다른 문제가 있습니다. 첫째, 문자열 요소 내에서 html 엔티티 (예 :보다 크거나 작음)를 이스케이프 처리하지 않습니다. 두 번째로 주석 내용은 쓰지만 주석 태그 자체는 쓰지 않습니다. – ChrisD

+0

@ChrisD 주석에 이것을 사용하지 않는 다른 이유 추가 : 비 ASCII 문자가 포함 된 내용에 UnicodeDecodeError가 발생합니다. – Anthon

29

대략적인 DOMs innerHTML method을 수행 문서화되지 않은 기능이 있습니다 :이 지금까지 내 모든 테스트 케이스를 통과

def innerHTML(element): 
    return element.decode_contents(formatter="html") 

옵션의

+4

일부 문자가 HTML 엔터티로 변환됩니다. 그래도 기본 포맷터 ('None')로 잘 작동합니다. – Tgr

+1

정답입니다. @ peewhy의 대답은 ChrisD가 설명한 이유 때문에 작동하지 않습니다. – dbkaplun

+2

이 모양이 약간 다른 args'(encoding = DEFAULT_OUTPUT_ENCODING, prettyPrint = False, indentLevel = 0)를 사용하여'renderContents'로 이름이 바뀌 었습니다. ' – highvolt

1

어때요? unicode(x) 어때요? 나를 위해 일하는 것 같습니다.

편집 : 이것은 내부 HTML이 아닌 외부 HTML을 제공합니다. 당신은 단지 텍스트 (HTML 태그)를해야하는 경우

+0

이것은 내용뿐만 아니라 외부 요소를 포함하는 div를 반환합니다. – Arany

+0

네 말이 맞아. 이것으로 다른 사람에게 도움이 될 수 있습니다. –

-1

, 당신은 .text를 사용할 수 있습니다

soup.select("div").text