【发布时间】:2015-03-17 21:26:07
【问题描述】:
我正在尝试在 Macbook Air(OS X) 上使用 Python 3.4.2 创建 HTML 解析器:
明文.py:
from html.parser import HTMLParser
import urllib.request, formatter, sys
website = urllib.request.urlopen("http://www.profmcmillan.com")
data = website.read()
website.close()
format = formatter.AbstractFormatter(formatter.DumbWriter(sys.stdout))
ptext = HTMLParser(format)
ptext.feed(data)
ptext.close()
但我收到以下错误:
Traceback (most recent call last):
File "/Users/deannarobertazzi/Documents/plaintext.py", line 9, in <module>
ptext.feed(data)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/html/parser.py", line 164, in feed
self.rawdata = self.rawdata + data
TypeError: Can't convert 'bytes' object to str implicitly
我查看了 Python 文档,显然您在 Python 3 中解析 HTML 数据的方式与在 Python 2 中执行此类操作大不相同。我不知道如何修改我的代码以使其适用于 Python 3。谢谢你。
【问题讨论】:
-
data字节串使用什么编码?例如,如果latin-1,ptext.feed(data.decode('latin-1'))就可以工作。它与 Python 2 没有太大区别,您现在必须仔细区分文本(Unicode 字符的字符串)和字节字符串(任意字节的字符串,通常通过各种可能的编解码器对文本进行编码)......这一直是个好主意但现在是强制性的:-)。 -
我将 UTF-8 包含在 ptext.feed(data.decode('UTF-8)) 行中,它起作用了。
标签: python python-3.x html-parsing python-3.4 html-parser