【发布时间】:2014-06-01 07:26:02
【问题描述】:
我在下载和处理网页时遇到问题。我想做的是:
- 使用机械化将网页下载到变量中
- 打印出该网页(在写入文件进行进一步处理之前)
- 在网页上搜索给定的单词(这将是未来的研究),然后数一数我找到了多少。
我的问题是字符编码,因为我得到了
<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 字符编码,但是当我更改脚本编码时没有任何变化。当我尝试将网页编码或解码为任何字符集时,我收到一个错误('invalid continuation byte' 或 'ordinal not in range(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'
【问题讨论】:
-
您不需要更改脚本文件的编码,您需要对下载的数据进行解码。
-
谢谢,我以为脚本的编码会影响整个程序而不仅仅是脚本本身。
标签: python python-2.7 character-encoding mechanize-python