【问题标题】:Charset issue when scraping webpage with Python and Requests使用 Python 和请求抓取网页时的字符集问题
【发布时间】:2013-03-11 05:21:11
【问题描述】:

尝试下载中文页面时(根据元标记显示为 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' codec can't encode characters in position 2017-2018: ordinal not in range(128)

【问题讨论】:

    标签: python encoding character-encoding


    【解决方案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'
    

    所以,我猜不要相信字符集标题?

    【讨论】:

      猜你喜欢
      • 2019-07-27
      • 1970-01-01
      • 2020-04-20
      • 2022-01-18
      • 1970-01-01
      • 2018-03-22
      • 2016-02-21
      • 2016-03-14
      • 2019-10-21
      相关资源
      最近更新 更多