>>> s = '<div> < 20 </div>'
>>> import lxml.html
>>> tree = lxml.html.fromstring(s)
>>> lxml.etree.tostring(tree)
'<div> </div>'
아무도이 문제에 대한 대안을 알고 있습니까?lxml은 '보다 작음'문자가 포함 된 텍스트를 자릅니다.
>>> s = '<div> < 20 </div>'
>>> import lxml.html
>>> tree = lxml.html.fromstring(s)
>>> lxml.etree.tostring(tree)
'<div> </div>'
아무도이 문제에 대한 대안을 알고 있습니까?lxml은 '보다 작음'문자가 포함 된 텍스트를 자릅니다.
HTML 입력이 깨졌습니다. <
왼쪽 꺾쇠 괄호는 <
으로 인코딩되어야합니다. lxml
documentation에서 깨진 HTML 구문 분석 :
깨진 HTML을 구문 분석하기위한 지원은 전적으로 libxml2의 복구 알고리즘에 달려 있습니다. 파서가 처리 할 수없는 문서가 너무 많이 파손 된 경우 lxml의 잘못이 아닙니다. 결과 트리에 원본 문서의 모든 데이터가 포함된다는 보장이 없습니다. 구문 분석을 계속하기 위해 고심 할 때 구문 분석기는 심각하게 손상된 부분을 제거해야 할 수 있습니다. 특히 잘못 배치 된 메타 태그로 인해 이러한 문제가 발생하여 인코딩 문제가 발생할 수 있습니다.
즉, 그러한 문서에서 얻을 수있는 것을 취하십시오. lxml
은 깨진 HTML을 처리하는 방법을 달리 구성 할 수 없습니다.
수있는 건다른 HTML 파서를 사용하는 것입니다. 대신 BeautifulSoup을 시도해보십시오. 깨진 HTML 처리 기능으로 원하는 문서를 제공 할 수있는 다른 버전의 문서를 제공 할 수 있습니다. BeautifulSoup은 lxml
및 html5lib
을 포함하여 다른 파서 백엔드를 다시 사용할 수 있으므로 유연성이 향상됩니다.
html5lib
파서는 당신에게 (A <
탈출로 변환)을 <
문자 준다 :
>>> BeautifulSoup("<div> < 20 </div>", "html5lib")
<html><head></head><body><div> < 20 </div></body></html>
우, 잠시 동안 많은 html 자료를 작성하지 않았으며, '<'의 끝에 세미콜론을 잊어 버렸습니다. – Volatility
대답은 훌륭합니다. html5lib에서 BS 사용에 대한 귀하의 제안은 문제를 해결합니다. 고맙습니다. 사람들은 downvote - 나는 그들이 문제를 이해하지 않는 것 같아요. – Viacheslav
이미'lxml'을 사용하고 있기 때문에 w3c의 권장 구문 분석 방법 (이론적으로 브라우저가 사용하는 것)을 따르는 [html5parser] (http://lxml.de/html5parser.html)). – mlissner
<
은 실제로 <
이어야합니다. <
은 html의 '예약 된 문자'와 비슷합니다. 그렇다면 그것은 작동합니다.
고마워요.하지만 '<'로 명시 적으로 작동해야합니다. – Viacheslav
원하는 것은 여기서 특별한 관심이 없습니다. 마크 업은 올바른 형식이 아닙니다. XML 구문 분석기는 휴지통 마크 업을 수정해야 할 필요가 없습니다. 마크 업을 먼저 수정하십시오 * –
네거티브 톤은 부적합합니다. 나는 3 부 HTML 페이지를 긁어 모으고 그것을 그대로 분석해야한다. 내가 제시 한 예는 그 문제를 보여주기위한 것입니다. – Viacheslav
이 깨진 HTML이다,하지만 lxml이 정상적으로 그것을 처리 할 수없는 연민이다. 이 html 형식은 매우 일반적입니다. – speedplane