我正在编写Django应用程序,它将获取特定URL的所有图像并将其保存在数据库中。
但是我没有在Django中使用ImageField。
Settings.py
MEDIA_ROOT = os.path.join(PWD, "../downloads/") # URL that handles the media served from MEDIA_ROOT. Make sure to use a # trailing slash. # Examples: "http://example.com/media/", "htp://media.example.com/" MEDIA_URL = '/downloads/'
models.py
class images_data(models.Model): image_id =models.IntegerField() source_id = models.IntegerField() image=models.ImageField(upload_to='images',null=True, blank=True) text_ind=models.NullBooleanField() prob=models.FloatField()
download_img.py
def spider(site): PWD = os.path.dirname(os.path.realpath(__file__ )) #site="http://en.wikipedia.org/wiki/Pune" hdr= {'User-Agent': 'Mozilla/5.0'} outfolder=os.path.join(PWD, "../downloads") #outfolder="/home/mayank/Desktop/dreamport/downloads" print "MAYANK:"+outfolder req = urllib2.Request(site,headers=hdr) page = urllib2.urlopen(req) soup =bs(page) tag_image=soup.findAll("img") count=1; for image in tag_image: print "Image: %(src)s" % image filename = image["src"].split("/")[-1] outpath = os.path.join(outfolder, filename) urlretrieve('http:'+image["src"], outpath) im = img(image_id=count,source_id=1,image=outpath,text_ind=None,prob=0) im.save() count=count+1
我正在像这样的一个视图内调用download_imgs.py
if form.is_valid(): url = form.cleaned_data['url'] spider(url)
Django Documentation总是一个很好的起点
class ModelWithImage(models.Model): image = models.ImageField( upload_to='images', )
更新
因此,此脚本有效。
import requests import tempfile from django.core import files # List of images to download image_urls = [ 'http://i.thegrindstone.com/wp-content/uploads/2013/01/how-to-get-awesome-back.jpg', ] for image_url in image_urls: # Steam the image from the url request = requests.get(image_url, stream=True) # Was the request OK? if request.status_code != requests.codes.ok: # Nope, error handling, skip file etc etc etc continue # Get the filename from the url, used for saving later file_name = image_url.split('/')[-1] # Create a temporary file lf = tempfile.NamedTemporaryFile() # Read the streamed image in sections for block in request.iter_content(1024 * 8): # If no more file then stop if not block: break # Write image block to temporary file lf.write(block) # Create the model you want to save the image to image = Image() # Save the temporary image to the model# # This saves the model so be sure that is it valid image.image.save(file_name, files.File(lf))