我正在尝试下载此页面 - https://itunes.apple.com/ru/app/farm-story/id367107953?mt=8(在俄罗斯对我来说看起来像这样 - http://screencloud.net/v /6a7o)通过python 中的spynner - 它使用一些 javascript 检查,因此在没有完整的浏览器仿真的情况下不会简单地下载它。
我的代码:
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from StringIO import StringIO
import spynner
def log(str, filename_end):
filename = '/tmp/apple_log_%s.html' % filename_end
print 'logged to %s' % filename
f = open(filename, 'w')
f.write(str)
f.close()
debug_stream = StringIO()
browser = spynner.Browser(debug_level=3, debug_stream=debug_stream)
browser.load("https://itunes.apple.com/ru/app/farm-story/id367107953?mt=8")
ret = browser.contents
log(ret, 'noenc')
print 'content length = %s' % len(ret)
browser.close()
del browser
f=open('/tmp/apple_log_debug', 'w')
f.write(debug_stream.getvalue())
f.close()
print 'log stored in /tmp/debug_log'
所以,问题是:无论是苹果,还是 spynner 都无法使用西里尔符号。如果我browser.show()
在加载后尝试,我会看到它们很好,但在代码和日志中它们仍然是错误的编码,如<meta content="ÐолÑÑиÑÑ Farm Story⢠в App Store. ÐÑоÑмоÑÑеÑÑ ÑкÑинÑоÑÑ Ð¸ ÑейÑинги, пÑоÑиÑаÑÑ Ð¾ÑзÑÐ²Ñ Ð¿Ð¾ÐºÑпаÑелей." property="og:description">
.
http://2cyr.com/表示它是一个utf-8
显示为iso-8859-1
...的文本
如您所见-我的请求中没有使用任何标头,但是如果我从chrome的网络调试控制台中获取它们并将其传递给load()
例如方法headers=[('Accept-Encoding', 'utf-8'), ('Accept-Language', 'ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4')]
-我会得到相同的结果。
此外,从同一个网络控制台,您可以看到 chromegzip,deflate,sdch
用作 Accept-Encoding。我也可以尝试,但我无法解码我得到的内容:<html><head></head><body>��}ksÇ�g!���4�I/z�O���/)�(yw���é®i��{�<v���:��ٷ�س-?�b�b�� j�...
即使我从结果的开头和结尾删除了标签。
有什么帮助吗?