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

hug*_*ete 16 html python 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
Run Code Online (Sandbox Code Playgroud)

这是从结果中得到的一条线,这个问题开始出现的那一行:

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

Hay*_*den 17

我相信这是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
Run Code Online (Sandbox Code Playgroud)

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

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

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

希望这可以帮助,

海登


Far*_*and 8

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

soup = BeautifulSoup(prova, 'html.parser')
Run Code Online (Sandbox Code Playgroud)

您还可以指定html5解析器:

soup = BeautifulSoup(prova, 'html5')
Run Code Online (Sandbox Code Playgroud)

还没安装html5解析器吗?从终端安装:

sudo apt-get install python-html5lib
Run Code Online (Sandbox Code Playgroud)

xml分析器可用于(soup = BeautifulSoup(prova, 'xml')),但你可能会看到一些差异,多值属性喜欢class="foo bar".