最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】BeautifulSoup 3.0.6中有bug:不能正确处理包含<!-[if xxx]>和<![endif]->

BeautifulSoup crifan 2561浏览 0评论

【问题】

如果包含:

...
<!–[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]->

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
83 queries in 0.172 seconds, using 22.12MB memory