Заставляя BeautifulSoup игнорировать содержимое внутри тегов скрипта - PullRequest
1 голос
/ 14 ноября 2009

Я пытался заставить 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 (); \". Кажется, попытаться разобрать XML, который генерируется JavaScript внутри блока скрипта?!?

Есть идеи, как заставить BeautifulSoup игнорировать содержимое тегов скрипта?

Я видел другое предложение использовать lxml, но не могу, так как он должен работать в Google AppEngine.

Ответы [ 3 ]

1 голос
/ 14 ноября 2009

Возвращение к BeautifulSoup 3.0.7a решило эту проблему и многие другие html-странности, которые задушил 3.1.0.1.

0 голосов
/ 14 ноября 2009

Это бы сработало, но смысл BeautifulSoup заключается в разборе любого тегового супа, который вы на него бросаете, даже если он ужасно плохо сформирован.

0 голосов
/ 14 ноября 2009

Я сталкивался с такой проблемой раньше, и обычно я заменяю каждое вхождение <script на <!-- и </script> на -->. Таким образом, все теги <script></script> закомментированы.

...