在Python 3.1中使用HTML解析器和HTTP响应
HTTPResponse对象返回的数据是字节类型(bytes)。
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()来继续进行解析。
问题:
- 有没有更好的方法来实现这个?
- 为什么HTTP响应不直接返回字符串呢?
我猜原因是这样的:服务器的响应可能使用了任何字符集,所以库不能假设它一定是ASCII字符集。但是在Python中,字符串是Unicode格式的。HTTP库其实也可以返回字符串。HTML标签肯定是ASCII格式的。
1 个回答
2
有没有什么原因导致HTTP响应不返回字符串呢?
你自己已经说得很对了。HTTP响应不一定是字符串。
比如,它可以是一个图片。即使它是字符串,也无法确定编码方式。如果你知道编码方式(或者有一个可以检测编码的工具),那么把一串字节转换成字符串就很简单了。实际上,在基于C语言的编程中,字节类型和字符类型常常是可以互换使用的。
HTML标签肯定是用ASCII编码的。
但如果HTML标签总是用ASCII编码的话,XHTML(推荐使用UTF-8编码来传输)就会遇到严重的问题!
另外,HTTP和HTML是两回事。