2013-06-29 1 views
3

RSS 피드의 일부 HTML 조각을 구문 분석하는 데 lxml을 사용하고 있는데이를 효율적으로 수행하기 위해 create_parent='div'을 사용합니다. 나중에 HTML을 출력 할 때 내 HTML 레이아웃으로 div가 포함되기 때문에 부모 div가 포함되는 것을 원하지 않습니다. div에서 완전히 unnessecary입니다.Python lxml, HTML을 출력하기 전에 부모 요소를 제거하기 (fragment_fromstring 사용)

코드 지금 같이

from lxml.html import fragment_fromstring 

html = fragment_fromstring(html_string, create_parent = 'div') 

for tag in html.xpath('//*[@class]'): 
    tag.attrib.pop('class') 
for tag in html.xpath('//*[@id]'): 
    tag.attrib.pop('id') 

return lxml.html.tostring(html) 

TL; DR :이 출력 될 때 어떻게 권취 DIV 제거합니까?

+1

아마도 이것은 답입니다. "lxml.etree.tostring (html_doc.xpath ('*'[0])'에서 자식을 넘겨서 wrapping div를 제거하십시오. 경고 : 테스트되지 않은 코드. 15 년 동안 파이썬 lxml 만 사용했습니다. 해당 코드 변경에 대한 테스트를 수행하는 사람은 답안을 작성해야합니다. – Phlip

답변

2

하위 요소를 추출하십시오.

return '\n'.join(lxml.html.tostring(x) for x in html.iterchildren()) 
+0

하지만 텍스트 노드를 추출하지 않습니다 –

+0

@Hemant_Negi, 'html.text_content(). strip()'같은 것을 원합니까? – falsetru

+0

요소 안에있는 모든 내용을 원합니다. html 노드를 텍스트로 포함 할 수 있습니다. 나는 이것이 텍스트만을 반환한다고 생각한다. –