我的目标:从网址获取网页来源并计算该网页来源中关键字的所有实例
我是怎么做的:通过urllib2获取pagesource,遍历页面源的每个char并将其与关键字进行比较
我的问题:我的关键字是用utf-8编码的,而页面源是ascii ...我尝试转换时遇到错误。
获取页面来源:
import urllib2
response = urllib2.urlopen(myUrl)
return response.read()
比较页面来源和关键字:
pageSource[i] == keyWord[j]
我需要将其中一个字符串转换为其他字符串的编码。直觉上我觉得utc-8(关键词)的ascii(页面源)将是最好和最简单的,所以:
pageSource = unicode(pageSource)
UnicodeDecodeError: 'ascii' codec can't decode byte __ in position __: ordinal not in range(128)
答案 0 :(得分:2)
尝试处理文字时,请不要将数据保留为字节字符串。尽早解码为Unicode,尽可能晚地编码回字节。
解码下载的网络数据:
import urllib2
response = urllib2.urlopen(myUrl)
# Latin-1 is the default for HTTP text/ responses, adjust as needed
codec = response.info().getparam('charset', 'latin1')
return response.read().decode(codec)
并为您的keyWord
数据执行相同的操作。如果它被编码为UTF-8,则将其解码,或使用Unicode字符串文字。
您可能想要阅读Python和Unicode:
答案 1 :(得分:0)
我假设您的远程"源页面"包含的不仅仅是ASCII,否则您的比较将按原样运行(ASCII现在是UTF-8的子集。即ASCII中的A是0x41,与UTF-8相同)。
您可以更轻松地找到Python Requests库,因为它会根据服务器的标头自动将远程内容解码为Unicode字符串(Unicode字符串编码为中性,因此可以进行比较而无需担心编码)。 / p>
resp = requests.get("http://www.example.com/utf8page.html")
resp.text
>> u'My unicode data €'
然后,您需要解码参考数据:
keyWord[j] = "€".decode("UTF-8")
keyWord[j]
>> u'€'
如果您在源代码中嵌入非ASCII,则需要定义您正在使用的编码。例如,在源代码/脚本的顶部:
# coding=UTF-8