2013-04-11 42 views
3

我發現BeautifulSoup 4出現逃避一些字符在內嵌的javascript:如何停止BeautifulSoup逃逸聯JavaScript

>>> print s 
<DOCTYPE html> 
<html> 
<body> 
<h1>Test page</h1> 
<script type="text/javascript"> 
//<!-- 
if (4 > 3 && 3 < 4) { 
     console.log("js working"); 
} 
//--> 
</script> 
</body> 
</html> 
>>> import bs4 
>>> soup = bs4.BeautifulSoup(s, 'html5lib') 
>>> print soup 
<html><head></head><body><doctype html=""> 


<h1>Test page</h1> 
<script type="text/javascript"> 
//&lt;!-- 
if (4 &gt; 3 &amp;&amp; 3 &lt; 4) { 
     console.log("js working"); 
} 
//--&gt; 
</script> 

</doctype></body></html> 
>>> print soup.prettify() 
<html> 
<head> 
</head> 
<body> 
    <doctype html=""> 
    <h1> 
    Test page 
    </h1> 
    <script type="text/javascript"> 
    //&lt;!-- 
if (4 &gt; 3 &amp;&amp; 3 &lt; 4) { 
     console.log("js working"); 
} 
//--&gt; 
    </script> 
    </doctype> 
</body> 
</html> 

在情況下,它在上面的丟失,關鍵的問題是:

if (4 > 3 && 3 < 4) 

被轉換成:

if (4 &gt; 3 &amp;&amp; 3 &lt; 4) 

不工作特別好...

我試過prettify()方法中包含的格式化程序,但沒有成功。

那麼任何想法如何阻止JavaScript被轉義?或者在輸出之前如何使用它?

+0

請注意,它應該是'<! - //',而不是'/ <! - '。雖然對輸出沒有影響。 – 2013-04-11 10:12:28

+0

''註釋在Javascript中實際上是無用的,因爲Javascript可以使用'',''''和'>'字符。你應該真正使用'<![CDATA ['和']]>'來恰當地'轉義'