17

我正在尝试使用 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=\"Tip('<centerclass = \ \ 'title _ video \ \' > < b > G iuseppelabbateogm ? nonvorremmonuoviuccel lichiamatilontre <

4

3 回答 3

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

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

如果您想了解有关最初在此处提交的错误的更多信息:

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

希望这可以帮助,

海登

于 2013-07-25T15:17:13.550 回答
9

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

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

您还可以指定html5解析器:

soup = BeautifulSoup(prova, 'html5')

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

sudo apt-get install python-html5lib

xml可以使用解析器 ( ) ,但您可能会看到多值属性的soup = BeautifulSoup(prova, 'xml')一些差异,例如.class="foo bar"

于 2014-02-16T16:05:47.870 回答
0

我遇到了同样的问题,改编码后就可以了

                with open(src, "r", encoding="UTF-16") as file:
                    html = file.read()
                    html = BeautifulSoup(html)
于 2021-08-27T03:29:50.613 回答