나는 BeautifulSoup (3.1.0.1)에서 html 내부 태그를 생성하는 많은 자바 스크립트가있는 html 페이지를 구문 분석하려고했습니다. 한 예 조각은 다음과 같습니다BeautifulSoup가 스크립트 태그 내에서 내용을 무시하게 만들기
<html><head><body><div>
<script type='text/javascript'>
if(ii > 0) {
html += '<span id="hoverMenuPosSepId" class="hoverMenuPosSep">|</span>'
}
html +=
'<div class="hoverMenuPos" id="hoverMenuPosId" onMouseOver=\"menuOver_3821();\" ' +
'onMouseOut=\"menuOut_3821();\">';
if (children[ii].uri == location.pathname) {
html += '<a class="hiHover" href="' + children[ii].uri + '" ' + onClick + '>';
} else {
html += '<a class="hover" href="' + children[ii].uri + '" ' + onClick + '>';
}
html += children[ii].name + '</a></div>';
}
}
hp = document.getElementById("hoverpopup_3821");
hp.style.top = (parseInt(hoveritem.offsetTop) + parseInt(hoveritem.offsetHeight)) + "px";
hp.style.visibility = "Visible";
hp.innerHTML = html;
}
return false;
}
function menuOut_3821() {
timeOn_3821 = setTimeout("showSelected_3821()", 1000)
}
var timeOn_3821 = null;
function menuOver_3821() {
clearTimeout(timeOn_3821)
}
function showSelected_3821() {
showChildrenMenu_3821(
document.getElementById("flatMenuItemAnchor" + selectedPageId), selectedPageId);
}
</script>
</body>
</html>
BeautifulSoup로이 처리 할 수있을 것 같지 않고 onMouseover와 주위에 "잘못된 시작 태그"에 대해 complaning됩니다
= ** \ "** menuOver_3821(); \ "입니다. 스크립트 블록 내에서 javascript에 의해 생성 된 XML 구문 분석을 시도하는 것 같습니다!?
BeautifulSoup을 만드는 방법에 대한 아이디어는 스크립트 태그 콘텐츠를 무시합니까?
lxml을 사용하는 다른 제안을 보았지만 Google AppEngine에서 실행해야하므로 사용할 수 없습니다.
아마도이 버그가 발생했습니다. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=516824 – unutbu
포인터를 보내 주셔서 감사합니다! BeautifulSoup 3.0.7a로 되 돌리면 문제가 해결되고 3.1.0.1에서 숨 막혀있는 다른 dodgy html 비트를 처리 할 수있었습니다. – alphageek