【问题标题】:BeautifulSoup code works in IPython Notebook but not EclipseBeautifulSoup 代码适用于 IPython Notebook 但不适用于 Eclipse
【发布时间】:2017-04-13 21:47:07
【问题描述】:

以下代码在 Jupyter IPython notebook 中运行时运行良好:

from bs4 import BeautifulSoup
xml_file_path = "<Path to XML file>"
s = BeautifulSoup(open(xml_file_path), "xml")

但在从 Eclipse/PyDev(使用相同的 Python 解释器)运行时创建汤时失败:

Traceback (most recent call last):
  File "~/parser/scratch.py", line 3, in <module>
    s = BeautifulSoup(open(xml_file), "xml")
  File "/anaconda/lib/python3.5/site-packages/bs4/__init__.py", line 175, in __init__
    markup = markup.read()
  File "/anaconda/lib/python3.5/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 1812: ordinal not in range(128)
  • Python 版本:3.5.2 (Anaconda 4.1.1)
  • BeautifulSoup:第 4 版
  • IPython Notebook 版本:4.2.1
  • Eclipse 版本:Mars.2 Release (4.5.2)
  • PyDev 版本:5.1.2.20160623256
  • Mac OS X:El Capitan 10.11.6

更新: 在 Eclipse 中导致问题的文件中的字符是 ,但这在 IPython Notebook 中不会导致问题!如果我从 XML 文件中删除这个字符,那么代码在 Eclipse 中也可以正常工作。我需要更改 Eclipse 中的某些设置,以使代码不会在此(以及可能的其他此类)字符上失败吗?

【问题讨论】:

标签: python eclipse beautifulsoup pydev ipython-notebook


【解决方案1】:

我认为您必须使用 open(xml_file_path, 'rb') 打开 - 并指定编码才能在两者中工作相同(否则您将进行从字节到 unicode 的隐式转换 - 显然它根据您的环境使用不同的编码,因为您在 Eclipse 中有一些东西,而在 IPython 中有另一种东西)。

尝试做:

with open(xml_file_path, 'rb') as stream:
  contents = stream.read()
  contents.decode('utf-8')

只是为了检查您是否真的能够将其解码为 utf-8(即:检查该字符是否为有效的 utf-8 字符)。

【讨论】:

    猜你喜欢
    • 2016-04-27
    • 1970-01-01
    • 2016-03-06
    • 2016-06-28
    • 2018-01-23
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多