我试图用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<
答案 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"
中看到一些差异。