使用Python和请求抓取网页时出现Charset问题

时间:2013-03-11 05:21:12

标签: python encoding character-encoding

尝试下载中文页面时(根据meta标签显示为gb2312)。我得到了胡言乱语的符号,例如ê×××(ò)中文字符应该是在我运行下面的代码并在gEdit中以gb2312格式打开文件之后。

以下是相关网页的源代码:https://gist.github.com/anonymous/27663069655db7fd7a19 - 实际网站仅供教育机构使用。

我的代码:

r = requests.post("http://example.com", data=payload, cookies=cookies)
f = open('myfile.txt', 'w')
f.write(r.text.encode('gb2312',errors="ignore"))
f.close()

页面标题:

  

{'content-length':'6164','x-powered-by':'ASP.NET','date':'Mon,11 Mar 2013 05:11:24 GMT','cache-control ':'private','content-type':'text / html','server':'Microsoft-IIS / 6.0'}

如果我尝试解码而不是编码,我在Python中会遇到这个错误:

f.write(r.text.decode('gb2312',errors="ignore"))
     

UnicodeEncodeError:'ascii'编解码器无法对2017-2018位置的字符进行编码:序数不在范围内(128)

1 个答案:

答案 0 :(得分:1)

djc@enrai http $ python
Python 2.7.3 (default, Jun 18 2012, 09:39:59)
[GCC 4.5.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib
>>> rsp = urllib.urlopen('https://gist.github.com/anonymous/27663069655db7fd7a19/raw/836a5c55d0f87a2fa5edcc9a14097c945452f520/chinese.html').read()
>>> import chardet
>>> chardet.detect(rsp)
{'confidence': 0.99, 'encoding': 'utf-8'}
>>> rsp.decode('utf-8')
u'\n<HTML><HEAD>(snip)</BODY></HTML>\n'

所以,不要相信charset标题,我猜?