我正在尝试通过python中的spynner下载这个页面- https://itunes.apple.com/ru/app/farm-story/id367107953?mt=8 (对于我来说在俄罗斯是这样的- http://screencloud.net/v/6a7o)它使用了一些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/说它是一个像iso-8859-1一样显示的utf-8文本...
正如你所看到的-我没有在我的请求中使用任何头部,但如果我从chrome的网络调试控制台中获取它们,并将其传递给headers=[('Accept-Encoding', 'utf-8'), ('Accept-Language', 'ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4')]等load()方法-我会得到相同的结果。
此外,在同一个网络控制台中,您可以看到chrome使用gzip,deflate,sdch作为接受编码。我也可以尝试这样做,但是我无法解码我得到的东西:<html><head></head><body>��}ksÇ�g!���4�I/z�O���/)�(yw���é®i��{�<v���:��ٷ�س-?�b�b�� j�...,即使我删除了结果开头和结尾的标签。
有什么帮助吗?
发布于 2015-07-09 23:02:46
基本上,browser.webframe.toHtml()返回一个QTString,在这种情况下,如果res实际上包含unicode non-latin字符,则str()不会提供帮助。如果你想得到一个Python unicode字符串,你需要做的是:
ret = unicode(browser.webframe.toHtml().toUtf8(), encoding="UTF-8")
#if you want to get rid of non-latin text
ret = ret.encode("ascii", errors="replace") # encodes to bytestring如果您怀疑它在Russian中,您可以通过执行以下操作将其解码为俄语多字节oem字符串(sill一个字节字符串
ret = ret.encode("cp1251", errors="replace") # encodes to Win-1251
# or
ret = ret.encode("cp866", errors="replace") # encodes to windows/dos console只有这样,您才能将其保存为ASCII文件。
发布于 2014-11-03 00:12:00
str(browser.webframe.toHtml())救了我
https://stackoverflow.com/questions/26688624
复制相似问题