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
希望这可以帮助,
海登
您可以将解析器指定为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".