私は BeautifulSoup (3.1.0.1) を取得して、タグ内で html を生成する JavaScript を多く含む html ページを解析しようとしています。フラグメントの例は次のようになります。
<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=**\"**menuOver_3821();\" の周りの「不正な開始タグ」について不満を言っています。スクリプトブロック内でjavascriptによって生成されたxmlを解析しようとしているようです?!?
BeautifulSoup がスクリプト タグの内容を無視するようにする方法はありますか?
lxml を使用する他の提案を見たことがありますが、Google AppEngine で実行する必要があるため使用できません。