我知道这类问题已经被打死了。我已经阅读了我能找到的所有内容,我理解了这个问题(或者至少我认为是这样),而我仍然无法弄清楚这里发生了什么。这个问题一再发生,让我疯了。
一个例子是从以下方面刮取联邦假期: https://www.opm.gov/policy-data-oversight/snow-dismissal-procedures/federal-holidays/'
如果我尝试打印表数据文本,sublime chokes(无输出)和powershell给我一个编码错误(不能编码\ 2019 - 这是一个右撇号)。网站上的标题说UTF-8,它请求正确检测并用作编码(requests.get(url).encoding
),所以我有点不知所措。虽然我可以理解powershell失败,因为它使用更窄的unicode标准(cp437 IIRC),我不明白sublime显示没有输出,因为它默认为UTF-8 afaik。
这是一个简单的简单示例,其中base_url是上面列出的主要URL(或者在源页面上的任何后续年份)。 FWIW我几乎只在Windows上遇到这些问题,我必须将它用于工作。
def get_year(url):
source = requests.get(url,proxies=proxies)
doc = html.fromstring(source.text)
td=doc.xpath('//td/text()')
return td
print(get_year(base_url))
答案 0 :(得分:1)
点击这里我做了什么:
import urllib
url = 'https://www.opm.gov/policy-data-oversight/snow-dismissal-procedures/federal-holidays/'
data = urllib.urlopen(url).read()
udata = unicode(data,'utf-8')
编辑开始
关于使用urllib
的投诉后,与requests
相同,但当然没有区别:
source = requests.get(url)
udata = source.text
编辑结束
没有编码错误或任何其他问题。
我搜索了非ASCII字符。索引\xA0
只有一个53513
。
那里没有\2019
个字符!但是,’
会转换为相同的内容。
因此,您使用的某个库似乎已将’
转换为\2019
,但编码错误,从而导致无效的字符串。后来,它在其他地方坠毁了。所有这些都发生在下载后。您应该跟踪下载数据发生的情况,以查看哪个函数执行了此操作。然后看看它的文档说明了什么。
编辑2开始
在完成原始代码之后,我来到了最后一行print(get_year(base_url))
引发异常的地方。
检查,如上所述,似乎lxml
已将’
转换为\2019
,因此我们有:
>>> s = get_year(base_url)[1]
>>> s
u'New Year\u2019s Day'
如果控制台的编码不支持\u2019
字符,则将其打印到控制台会失败。在Windows上,通常就是这种情况。
编辑2结束