【发布时间】:2012-09-22 19:13:14
【问题描述】:
标签: python character-encoding python-3.x web-scraping beautifulsoup
标签: python character-encoding python-3.x web-scraping beautifulsoup
通读Beautiful Soup documentation,看起来有两种不错的方法。
最好的解决方案可能是不自己解码 HTML 文档,只将原始字节字符串提供给 Beautiful Soup。它将找出正确的编码,并自动解码文档(使用其包含的Unicode Dammit 库)。它会找到并解释相关的 HTML 元标记(如果有),或者分析文档的内容并进行猜测。这肯定可以解决您的直接情况,即使对于没有元标记的文档,它也可能在大多数情况下都能正确处理。不过,扫描文档可能有点慢,所以如果性能是一个重要问题,您可能更喜欢下一个选项。
下一个最佳解决方案可能是将您自己的知识应用于该问题。如果您要抓取的页面始终编码为 UTF-8,则无论服务器说什么,您都可以简单地始终使用它。这当然取决于页面编码是否一致,这可能是也可能不是这种情况(例如,具有一些 UTF-8 页面和一些 Latin-1 页面的网站)。如果您只抓取单个页面(或单一类型的页面,在动态站点上),您可能总是会找到相同的编码,所以这可以很好地工作。这种方法的优点是它的简单性(在较小程度上是速度),但它是以灵活性和健壮性为代价的。如果网站更改其使用的编码,您的脚本可能会中断。
【讨论】:
这可能与 BeautifulSoup not reading documents correctly 重复,即由 BS 4.0.2 中的 bug 引起。
该错误已在 4.0.3 中修复。您可能需要检查
的输出>>> import bs4
>>> bs4.__version__
如果是 4.0.2,请将 BeautifulSoup 升级到更高版本。
【讨论】: