【问题标题】:Character encoding issues when scraping a site with BeautifulSoup使用 BeautifulSoup 抓取网站时的字符编码问题
【发布时间】:2012-09-22 19:13:14
【问题描述】:

标签: python character-encoding python-3.x web-scraping beautifulsoup


【解决方案1】:

通读Beautiful Soup documentation,看起来有两种不错的方法。

  1. 最好的解决方案可能是不自己解码 HTML 文档,只将原始字节字符串提供给 Beautiful Soup。它将找出正确的编码,并自动解码文档(使用其包含的Unicode Dammit 库)。它会找到并解释相关的 HTML 元标记(如果有),或者分析文档的内容并进行猜测。这肯定可以解决您的直接情况,即使对于没有元标记的文档,它也可能在大多数情况下都能正确处理。不过,扫描文档可能有点慢,所以如果性能是一个重要问题,您可能更喜欢下一个选项。

  2. 下一个最佳解决方案可能是将您自己的知识应用于该问题。如果您要抓取的页面始终编码为 UTF-8,则无论服务器说什么,您都可以简单地始终使用它。这当然取决于页面编码是否一致,这可能是也可能不是这种情况(例如,具有一些 UTF-8 页面和一些 Latin-1 页面的网站)。如果您只抓取单个页面(或单一类型的页面,在动态站点上),您可能总是会找到相同的编码,所以这可以很好地工作。这种方法的优点是它的简单性(在较小程度上是速度),但它是以灵活性和健壮性为代价的。如果网站更改其使用的编码,您的脚本可能会中断。

【讨论】:

  • 谢谢。这解决了手动检查每个站点进行编码的问题,但仍然没有解决这个问题。自动 BS4 解码器给我的输出是这样的:goo.gl/GbLzf
  • 你能用你正在使用的代码更新问题吗?我不确定文件是如何被严重破坏的。
  • 你也可以看看scriptcult.com/subcategory_176/…来感受一下Dammit的正确使用
【解决方案2】:

这可能与 BeautifulSoup not reading documents correctly 重复,即由 BS 4.0.2 中的 bug 引起。

该错误已在 4.0.3 中修复。您可能需要检查

的输出
>>> import bs4
>>> bs4.__version__

如果是 4.0.2,请将 BeautifulSoup 升级到更高版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 2019-09-17
    • 1970-01-01
    • 2019-12-15
    • 2020-12-22
    相关资源
    最近更新 更多