代码之家  ›  专栏  ›  技术社区  ›  Kiran Kuppa

在python 3.1中将html解析器与httpresponse结合使用

  •  0
  • Kiran Kuppa  · 技术社区  · 15 年前

    HttpResponse对象的响应数据类型为字节。

    conn = http.client.HTTPConnection(www.yahoo.com)
    conn.request("GET","/")
    response = conn.getresponse();
    data = response.read()
    type(data)
    

    数据类型为字节。

    我想将响应与python 3.1的内置html解析器一起使用。但是我发现htmlparser.feed()需要一个字符串(str类型)。并且此方法不接受数据作为参数。为了避免这个问题,我使用data.decode()继续解析。

    问题:

    1. 有没有更好的方法来完成 这个?
    2. 为什么http 响应不返回字符串?

    我想原因是这样的:服务器的响应可以在任何字符集中。因此,库不能假定它是ascii。但是,python中的字符串是unicode。http库也可以返回一个字符串。html标记肯定是ascii格式的。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Rushyo    15 年前

    为什么http响应 不返回字符串?

    你自己钉的。http响应不一定是字符串。

    例如,它可以是一个图像,即使它是一个字符串,它也不知道编码。 如果您知道编码(或者有一个编码检测库),那么很容易将一系列字节转换为字符串。实际上,在基于c的语言中,字节类型通常与字符类型同义。

    html标记肯定是ascii格式的。

    如果html标记总是ascii,那么xhtml(建议以utf-8的形式提供)将有严重的问题!

    另外,http!= HTML。