다음 테스트는 파일을 읽고 lxml.html을 사용하여 페이지에 대한 DOM/그래프의 리프 노드를 생성합니다.lxml 요소를 elementtree로 변환
그러나 "문자열"에서 입력을 얻는 방법을 알아 내려고합니다. 사용하면 "ElementTree"가 아닌 "Element"가 생성되므로
lxml.html.fromstring(s)
이 작동하지 않습니다.
그래서 요소를 ElementTree로 변환하는 방법을 알아 내려고하고 있습니다.
생각
테스트 코드 :
import lxml.html
from lxml import etree # trying this to see if needed
# to convert from element to elementtree
#cmd='cat osu_test.txt'
cmd='cat o2.txt'
proc=subprocess.Popen(cmd, shell=True,stdout=subprocess.PIPE)
s=proc.communicate()[0].strip()
# s contains HTML not XML text
#doc = lxml.html.parse(s)
doc = lxml.html.parse('osu_test.txt')
doc1 = lxml.html.fromstring(s)
for node in doc.iter():
if len(node) == 0:
print "aaa ",node.tag, doc.getpath(node)
#print "aaa ",node.tag
nt = etree.ElementTree(doc1) <<<<< doesn't work.. so what will??
for node in nt.iter():
if len(node) == 0:
print "aaa ",node.tag, doc.getpath(node)
#print "aaa ",node.tag
============================== =
갱신 :::
압바스에 의해 제안 추가 변경 (XML 대신 HTML을 구문 분석). 다음 잘못한다있어 :
doc1 = etree.fromstring(s)
File "lxml.etree.pyx", line 2532, in lxml.etree.fromstring (src/lxml/lxml.etree.c:48621)
File "parser.pxi", line 1545, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:72232)
File "parser.pxi", line 1424, in lxml.etree._parseDoc (src/lxml/lxml.etree.c:71093)
File "parser.pxi", line 938, in lxml.etree._BaseParser._parseDoc (src/lxml/lxml.etree.c:67862)
File "parser.pxi", line 539, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:64244)
File "parser.pxi", line 625, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:65165)
File "parser.pxi", line 565, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:64508)
lxml.etree.XMLSyntaxError: Entity 'nbsp' not defined, line 48, column 220
UPDATE ::: 테스트 작업을 얻기 위해 관리
. 왜 그랬는지 정확히 모르겠습니다. 피 볶음밥을 가진 사람이 설명을하기를 원한다면,이 말은 미래의 사람들에게 도움이 될 것입니다.
from cStringIO import StringIO
from lxml.html import parse
doc1 = parse(StringIO(s))
for node in doc1.iter():
if len(node) == 0:
print "aaa ", node.tag, doc1.getpath(node)
IT는있는 StringIO 모듈/클래스는 구문 분석 패키지는 가서 테스트 HTML에 대한 입력 문자열을 처리하는 데 필요한 것을 만족 IO 기능을 구현 것으로 보인다. ... 캐스팅은 아마도 다른 언어로 제공하는 것과 유사한
감사
XML 파서가 HTML에서 ' '에 반대한다 : – Abbas
안녕하세요, 압바스.네가하는 말에 동의하지 않는다. 테스트 파일의 html은 이제 위에서 제공된 솔루션을 구현할 때 구문 분석에서 StringIO를 사용하여 작동합니다. –
이제는 HTML 파서 (lxml.html)와 StringIO를 사용하고 있기 때문입니다. etree. etree는 HTML을 구문 분석하려고하지만 HTML ( ) 용으로 인코딩 된 문자 때문에 실패합니다. 엘리먼트 트리를 문자열로 전달하여 엘리 트리를에 트리로부터 가져 오는 요구 사항에 기반한 솔루션을 제안했을 때 왜 당신이 나와 동의하지 않는지 모르겠습니다. 나중에 솔루션을 변경했지만 내 솔루션은 원래 요구 사항에 대해 여전히 유효합니다. – Abbas