7

我需要关于我正在写的刮刀的帮助。我正在尝试抓取大学排名表,其中一些学校是欧洲大学,名称中有外国字符(例如ä,ü)。我已经以完全相同的方式与外国大学在另一个网站上刮了另一张桌子,一切正常。但是由于某种原因,当前的刮板无法处理外来字符(就解析外来字符而言,两个刮板完全相同)。

这是我正在做的尝试并使事情正常进行的工作:

  1. 在文件的第一行声明编码:

    # -*- coding: utf-8 -*-
    
  2. 从 django.utils.encoding 导入和使用来自 django 框架的智能 unicode import smart_unicode

    school_name = smart_unicode(html_elements[2].text_content(), encoding='utf-8',        
    strings_only=False, errors='strict').encode('utf-8')
    
  3. 当与 smart_unicode 函数链接时,使用 encode 函数,如上所示。我想不出我还能做错什么。在和这些爬虫打交道之前,我对不同的编码真的不是很了解,所以还是有点大开眼界的体验。我已尝试阅读以下内容,但仍然无法解决此问题

我知道在编码中,每个字符都分配有一个数字,可以用十六进制、二进制等表示。不同的编码对于它们支持的语言有不同的能力(例如 ASCII 只支持英语,UTF-8 支持它看起来的一切.但是,我觉得我正在尽一切努力确保正确打印字符。我不知道我的错误在哪里,这让我发疯了。请帮助!

4

3 回答 3

2

从网页中提取信息时,您需要确定其字符编码,类似于浏览器如何执行此类操作(分析 HTTP 标头,解析 HTML 以查找meta标签,以及可能基于实际数据的猜测,例如看起来像某些编码中的BOM)。希望您能找到一个为您执行此操作的库例程。

在任何情况下,您都不应该期望所有网站都是 utf-8 编码的。Iso-8859-1 仍在广泛使用,通常将 iso-8859-1 视为 utf-8 会导致大混乱(​​对于任何非 Ascii 字符)。

于 2012-06-05T12:24:43.527 回答
1

如果您使用requests 库,它将根据 HTTP 标头自动解码内容。获取页面的 HTML 内容非常简单:

>>> import requests
>>> r = requests.get('https://github.com/timeline.json')
>>> r.text
'[{"repository":{"open_issues":0,"url":"https://github.com/...
于 2012-06-05T18:31:02.463 回答
-1
于 2012-06-05T16:55:29.327 回答