使用mechanize下载网页后,Python会编写奇怪的字符

时间:2014-06-01 07:26:02

标签: python python-2.7 character-encoding mechanize-python

我在下载网页和处理网页时遇到问题。我想做的是:

  • 使用mechanize将网页下载到变量
  • 打印出该网页(在写入文件进行进一步处理之前)
  • 在网页上搜索给定的单词(这将是未来的研究)并计算我找到的数量。

我的问题是字符编码,因为我得到了

<title>csonthãᄅjas termãᄅsek - wikipãᄅdia</title>

而不是

<title>csonthéjas termések - wikipédia</title>

几乎所有重音和'奇怪'字符都存在问题,例如áűóüő ......当我把它写成字符串时,它就可以了。

print 'csonthéjas termések - wikipédia'

Chardet说它有ISO-8859-2字符编码,但是当我更改脚本编码时没有任何改变。当我尝试将网页编码或解码为任何字符集时,我收到错误(“无效的连续字节”或“序数不在范围内(128)”

我尝试了很多编码,不同的浏览器代理,使用chardet检测编码,然后使用该信息,但没有解决我的问题。我知道这是一个简单的问题,但我找不到正确的答案。我使用的是Windows 8.1和Python 2.7.6

我的代码如下(我试图尽可能简单地切割):

#!/usr/bin/python
# -*- coding: ISO-8859-2 -*-

def url_get(url_input): #Get the webpage
    "Get the webpage"
    import mechanize
    url = url_input
    br = mechanize.Browser()
    br.set_handle_equiv(True)
    br.set_handle_redirect(True)
    br.set_handle_referer(True)
    br.set_handle_robots(False)
    #User-agent','Mozilla/1.22 (compatible; MSIE 10.0; Windows 3.1)
    br.addheaders = [('user-agent', '   Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3'),
('accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')]
    result = br.open(url).read().lower()
    print result

    import chardet    
    rawdata = result
    detection = chardet.detect(rawdata)
    charenc = detection['encoding']
    print charenc

    return result

text = url_get('http://hu.wikipedia.org/wiki/Csonth%C3%A9jas_term%C3%A9sek')

print 'csonthéjas termések - wikipédia'

1 个答案:

答案 0 :(得分:0)

该页面显示为UTF-8。拿走text并打印text.decode('utf-8')。当我使用requests模块阅读页面内容时,这对我有用。

您需要删除lower()调用,因为转换为小写可能会破坏UTF-8编码的文本。如果您想转换为小写,请在解码后致电lower()

使用# -*- coding行时,可以设置脚本文件的编码。这对脚本文件读取的数据没有影响。要处理不同编码的文本数据,您需要在读取数据后解码数据。