나는 QNetworkReply을 통해 이미지를 다운로드 pyqt4에 qtwebkit을 사용하고 있습니다 :QNetworkReply readAll()이 0 바이트를 반환하는 이유는 무엇입니까?
import os
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import QWebPage
class dxBrowser(QWebPage):
def __init__(self,url):
QWebPage.__init__(self)
self._url=url
self.manager=self.networkAccessManager()
self.connect(self.manager,SIGNAL("finished(QNetworkReply *)"),self.onFinished)
def crawl(self):
self.mainFrame().load(QUrl(self._url))
def onFinished(self,networkReply):
if networkReply.rawHeader('Content-Type')=='image/png':
print 'find the image'
l=int(networkReply.rawHeader('Content-Length'))
print l
byteArray=networkReply.readAll()
print byteArray.size()
im=QImage.fromData(byteArray)
if not im.save('test.jpg','jpg'):
print 'image save error'
def main():
app=QApplication(sys.argv)
url='http://www.yiyaows.cn/DrsPath.do?kid=6666686E686E69673334333632303335&username=mylibddrz&spagenum=251&pages=50&fid=7534992&a=95cb07394dbf1d43c1fe61bdf6d4a36d&btime=2011-08-19&etime=2011-09-08&template=bookdsr1&firstdrs=http%3A%2F%2Fbook1.duxiu.com%2FbookDetail.jsp%3FdxNumber%3D000005609810%26d%3DA30222298F3C6715323B5476CB66D650'
dx=dxBrowser(url)
dx.crawl()
sys.exit(app.exec_())
if __name__=='__main__':
main()
비록 내용 길이 제로가 아닌하지만 byteArray.size()가 0이 그래서 이미지를 저장할 수 있습니다. 왜? 누구든지 나를 도와 줄 수 있어요.
편집 : 아마도 내가 알아 냈습니다. qtwebkit은 qnetworkreply, QIODevice의 내용을 검색 할 수 있습니다.이 크기는 readall() 이후 0이 될 것입니다. 브라우저로 qtwebkit이 렌더링을 위해 읽은 것 같습니다.
dxBrowser의 'reply' 속성은 어디에서 왔습니까? – Mat
죄송합니다. 이전 코드가 잘못되었습니다. – Treper