【问题标题】:Beautiful Soup decode error美丽的汤解码错误
【发布时间】:2013-09-24 06:23:47
【问题描述】:

我正在工作,我需要使用 Beautiful Soup 解析网站。该站点是http://www.manta.com,但是当我尝试在 HTML 代码的元数据中查看站点的编码时,什么也没有出现。我尝试在本地解析 HTML,下载网页,但遇到一些解码错误:

# manta web page downloaded before
html = open('1.html', 'r')
soup = BeautifulSoup(html, 'lxml')

这会产生以下堆栈跟踪:

Traceback (most recent call last):
  File "E:/Projects/Python/webkit/sample.py", line 10, in <module>
    soup = BeautifulSoup(html, 'lxml')
  File "C:\Python27\lib\site-packages\bs4\__init__.py", line 172, in __init__
    self._feed()
  File "C:\Python27\lib\site-packages\bs4\__init__.py", line 185, in _feed
    self.builder.feed(self.markup)
  File "C:\Python27\lib\site-packages\bs4\builder\_lxml.py", line 195, in feed
    self.parser.close()
  File "parser.pxi", line 1209, in 
    lxml.etree._FeedParser.close(src\lxm\lxml.etree.c:90717)
  File "parsertarget.pxi", line 142, in  
    lxml.etree._TargetParserContext._handleParseResult  (src\lxml\lxml.etree.c:100104)
  File "parsertarget.pxi", line 130, in 
    lxml.etree._TargetParserContext._handleParseResult (src\lxml\lxml.etree.c:99927)
  File "lxml.etree.pyx", line 294, in lxml.etree._ExceptionContext._raise_if_stored 
    (src\lxml\lxml.etree.c:9387)
  File "saxparser.pxi", line 259, in lxml.etree._handleSaxData (src\lxml
    \lxml.etree.c:96065)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 105-106: invalid data

我尝试在 Beautiful Soup 的构造函数中引入编码:

soup = BeautifulSoup(html, 'lxml', from_encoding= "some encoding")

我继续得到同样的错误。

有趣的是,如果我在浏览器中加载页面,然后我将编码更改为 utf-8,例如在 Firefox 中并保存它。这项工作很好。非常感谢任何帮助。谢谢你。

【问题讨论】:

  • 我无法打开 www.manta.com 网址是否正确?
  • 试试这个:link这是我要解析的页面之一
  • 我无法从这里打开它。只针对美国吗? (顺便说一句,如何在评论中制作超链接?)
  • 不,它是一个免费网页,不适合美国,我不知道你为什么不进入
  • 如果你想试试像hidemyass.com这样的网络代理

标签: python html beautifulsoup


【解决方案1】:

用 UTF-8 编码字符串

soup = BeautifulSoup(html.encode('UTF-8'),'lxml')

【讨论】:

  • 我尝试在编码过程中获得另一个编码错误
  • 当我将文件的所有行放在一个字符串中并尝试执行 _ht = _ht.encode('utf-8') 时,我得到:Traceback(最近一次调用最后一次):文件“E:/Projects/Python/webkit/sample.py”,第 15 行,在 _ht = _ht.encode('utf-8') UnicodeDecodeError: 'utf8' codec can't decode byte 0xbb in position 152380:意外的代码字节
  • 我看到你可以通过从 Firefox 中保存来解决问题。您可以尝试重新下载页面,并在保存到文件之前先将其转换为 UTF-8
  • 是的,当然该页面在保存为 utf-8 之前会重新下载。但我不能为我的工作做这件事,我只是为了了解更多信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
  • 2018-05-08
  • 1970-01-01
相关资源
最近更新 更多