BeautifulSoup返回意想不到的额外空间

时间:2013-07-25 13:45:16

标签: python html text beautifulsoup

我试图用BeautifulSoup从html文档中获取一些文本。在一个非常相关的案例中,它产生了一个奇怪而有趣的结果:在某一点之后,汤在文本中充满了额外的空间(一个空格将每个字母与下一个字母分开)。我试图搜索网络以找到原因,但我只遇到了一些有关相反错误的消息(根本没有空格)。

你有什么建议或提示它为什么会发生,以及如何解决这个问题?

这是我创建的最基本的代码:

from bs4 import BeautifulSoup

import urllib2
html = urllib2.urlopen("http://www.beppegrillo.it")
prova = html.read()
soup = BeautifulSoup(prova)
print soup

这是从结果中取出的一条线,即出现此问题的行:

  

value = \" Giuseppe labbate ogm? non vorremmo nuovi uccelli chiamati lontre \">< input onmouseover = \"提示('< cen terclass = \ \' title _ video \ \'> ;< b> G iuseppelabbateogm?nonvorremmonuoviuccel lichiamatilontre<

2 个答案:

答案 0 :(得分:16)

我相信这是Lxml的HTML解析器的一个错误。 尝试:

from bs4 import BeautifulSoup

import urllib2
html = urllib2.urlopen ("http://www.beppegrillo.it")
prova = html.read()
soup = BeautifulSoup(prova.replace('ISO-8859-1', 'utf-8'))
print soup

这是解决此问题的方法。 我相信这个问题已在lxml 3.0 alpha 2和lxml 2.3.6中修复,因此值得检查是否需要升级到更新版本。

如果您想了解有关该错误的更多信息,请先在此处提交:

https://bugs.launchpad.net/beautifulsoup/+bug/972466

希望这有帮助,

海登

答案 1 :(得分:8)

您可以将解析器指定为html.parser

soup = BeautifulSoup(prova, 'html.parser')

您也可以指定html5解析器:

soup = BeautifulSoup(prova, 'html5')

尚未安装html5解析器吗?从终端安装:

sudo apt-get install python-html5lib

可能会使用xml解析器(soup = BeautifulSoup(prova, 'xml')),但您可能会在multi-valued attributes class="foo bar"中看到一些差异。