Django フレームワークを使用して Apache サーバー上で実行されるアプリケーションを開発しています。現在のスクリプトは、ローカル デスクトップ (Django なし) で実行すると正常に動作します。このスクリプトは、すべての画像を Web サイトからデスクトップ上のフォルダーにダウンロードします。ただし、サーバーでスクリプトを実行すると、Djangoによってファイルオブジェクトが作成され、明らかに何かが含まれています(Googleのロゴである必要があります)が、ファイルを開くことができません。また、html ファイルを作成し、画像リンクの場所を更新しましたが、html ファイルは正常に作成されました。どこかでファイルラッパーを使用する必要があると思いますが、よくわかりません。以下は私のコードです、ありがとう!
from django.http import HttpResponse
from bs4 import BeautifulSoup as bsoup
import urlparse
from urllib2 import urlopen
from urllib import urlretrieve
import os
import sys
import zipfile
from django.core.servers.basehttp import FileWrapper
def getdata(request):
out = 'C:\Users\user\Desktop\images'
if request.GET.get('q'):
#url = str(request.GET['q'])
url = "http://google.com"
soup = bsoup(urlopen(url))
parsedURL = list(urlparse.urlparse(url))
for image in soup.findAll("img"):
print "Old Image Path: %(src)s" % image
#Get file name
filename = image["src"].split("/")[-1]
#Get full path name if url has to be parsed
parsedURL[2] = image["src"]
image["src"] = '%s\%s' % (out,filename)
print 'New Path: %s' % image["src"]
# print image
outpath = os.path.join(out, filename)
#retrieve images
if image["src"].lower().startswith("http"):
urlretrieve(image["src"], outpath)
else:
urlretrieve(urlparse.urlunparse(parsedURL), out) #Constructs URL from tuple (parsedURL)
#Create HTML File and writes to it to check output (stored in same directory).
html = soup.prettify("utf-8")
with open("output.html", "wb") as file:
file.write(html)
else:
url = 'You submitted nothing!'
return HttpResponse(url)