【问题】
如果包含:
... <!–[if lte IE 6]> ... <![endif]–> ...
字样,即其中包含
<!-[if xxx]>
和对应的
<![endif]->
则解析出错,解析的结果,具体错成啥样,取决于上述特殊字符串,所处于的位置。
比如我这里,就是处于位置靠前的,导致BeautifulSoup解析出来的结果,
通过
soup.findAll(“head”)
不是获得对应的head,而是获取了整个的网页的内容,导致后续的
soup.find(id=’xxx’)
soup.find(attrs={“class”:”xxx”})
等,都无法正常工作,都找不到对应的id和class了。
【解决过程】
1.对于soup.find(id=’xxx’)不工作,折腾了很长时间,最后才发现,是上述错误的。
2.后来通过手动将上述特定的字符串去掉:
processedHtml = processedHtml.replace(“<!–[if lte IE 6]>”, “”);
processedHtml = processedHtml.replace(“<![endif]–>”, “”);
然后BeautifulSoup就可以正常解析了,然后接着soup.find(id=’xxx’)等,就可以正常工作了。
【总结】
后来才想起来,之前就遇到过类似的问题:
【已解决】BeautifulSoup的CData无法处理<!–之类的javascript的comment
但之前是CData中的,而此处已经是之前的解决办法中所提到的,把BeautifulSoup-3.0.4.py换成BeautifulSoup-3.0.6.py了,并且试了,两个版本,都会出现上述的解析错误。
所以,看起来,至少是3.0.6之前的版本,估计都存在此bug。
也猜测,估计后来的版本,解决了类似问题了,但是更高的版本的BeautifulSoup,需要安装,很麻烦,所以懒得换了,就像上述中手动删除一下,暂时凑合着继续用3.0.6的版本的吧。
转载请注明:在路上 » 【已解决】BeautifulSoup 3.0.6中有bug:不能正确处理包含<!-[if xxx]>和<![endif]->