0

我正在使用 Python2.6,并且请求模块和字符编码存在大量问题。

归结为最简单的形式,这是我的代码和产生的错误(包括导致我的问题的实际站点):

import requests

sites = ['www.ddelectricmotors.com', 'www.stearnswood.com']
for domain in site:
 r = requests.get( 'http://' + domain )
 f = open( domain, 'w' )
 f.write( r.text )
 f.close()

DDElectric Motors 的页面加载并保存良好,但 Stearnswood 尝试产生以下错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 13186: ordinal not in range(128)

理想情况下,我宁愿只强制编码为 ascii,因为我将它加载到 scikit-learn 中,这似乎更喜欢 ascii。我只需删除未知字符就可以了。

4

1 回答 1

2

Unix 文件包含字节,并且您的r对象的text属性似乎是一个代码点字符串,因此如果您在 Unix 上,您可以改为f.write(r.text.encode('UTF-8')).

更大的问题是将通过不安全渠道获得的来自互联网的未经净化的数据写入自动化过程中的文件中。要非常小心如何使用该文件。如果您信任该站点,请至少考虑使用 HTTPS。

于 2012-11-20T23:47:03.320 回答