Проблемы в очистке и сохранении файла по eventlet - PullRequest
1 голос
/ 12 апреля 2011

Я могу использовать Evenlet для удаления IMG с веб-сайта, но не смог сохранить их в домашнем каталоге. Ниже приведен код. Кто-нибудь знаком с операцией ввода-вывода в модели тасклетов? Спасибо

import pyquery
import eventlet
from eventlet.green import urllib2

#fetch img urls............ works fine

print "loading page..."
html=urllib2.urlopen("http://www.meinv86.com/meinv/yuanchuangmeinvzipai/").read()
print "Parsing urls..."
d=pyquery.PyQuery(html)
count=0
urls=[]
url=''
for i in d('img'):
 count=count+1
 print i.attrib["src"]
 urls.append(i.attrib["src"])


def fetch(url):
 try:
  print "start feteching %s" %(url)
  urlfile = urllib2.urlopen(url)
  size=int(urlfile.headers['content-length'])
  print 'downloading %s, total file size: %d' %(url,size)
  data = urlfile.read()
  print 'download complete - %s' %(url)

##########################################
#file save just won't work

  f=open("/head2/"+url+".jpg","wb")
  f.write(body)  
  f.close()
  print "file saved"
##########################################  

  return data

 except:
  print "fail to download..."




pool = eventlet.GreenPool()

for body in pool.imap(fetch, urls):
  print "done"

1 Ответ

0 голосов
/ 12 апреля 2011

Убедитесь, что url подходит в качестве имени файла, например ::

import hashlib
import os

def url2filename(url, ext=''):
    return hashlib.md5(url).hexdigest() + ext # anything that removes '\/'

# ...
with open(os.path.join("/head2", url2filename(url, '.jpg')), 'wb') as f:
     f.write(body)
print "file saved"

Примечание: вы, вероятно, не хотите записывать свои файлы в каталог верхнего уровня, такой как '/head2'.

Вы также можете рассмотреть urllib.urlretrieve().

...