Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法打开在Django中创建的文件对象_Python_Django_Apache_Beautifulsoup - Fatal编程技术网

Python 无法打开在Django中创建的文件对象

Python 无法打开在Django中创建的文件对象,python,django,apache,beautifulsoup,Python,Django,Apache,Beautifulsoup,我正在用Django框架开发一个在Apache服务器上运行的应用程序。我当前的脚本在本地桌面(没有Django)上运行时工作正常。该脚本将所有图像从网站下载到桌面上的文件夹中。然而,当我在服务器上运行脚本时,Django刚刚创建了一个文件对象,其中显然包含一些内容(应该是google的徽标),但是,我无法打开该文件。我还创建了一个html文件,更新了图像链接位置,但是html文件创建得很好,我假设是因为它都是文本,也许?我相信我可能需要在某个地方使用文件包装器,但我不确定。感谢您的帮助,以下是我

我正在用Django框架开发一个在Apache服务器上运行的应用程序。我当前的脚本在本地桌面(没有Django)上运行时工作正常。该脚本将所有图像从网站下载到桌面上的文件夹中。然而,当我在服务器上运行脚本时,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)

我的问题与在桌面上存储文件有关。我将文件存储在DJango workspace文件夹中,更改了路径,它对我起到了作用。

共享的补充说明可能会有所帮助:在文件的属性下,windows列出了属性A,这意味着windows根据我的理解将其识别为存档文件。这里涉及多个因素。首先,我不确定谷歌是否会提供标准页面。谷歌可能为不同的用户代理提供不同的服务。你还说这些都是存档的,我不确定,但你应该看到内容标题,你可能可以找到编码,应该是gzip或其他东西,我只是用谷歌,因为它在页面上只包含一个要解析的图像。我尝试使用7-zip打开该文件,但收到一条错误消息,表示无法将该文件作为存档打开。我不是windows方面的专家,但您可以通过查看文件头来检查该文件的类型。在linux上,libmagic可以做到这一点。如果我在Notepad++中查看该文件,您可以查看该文件,第一行是%PNG,这似乎是正确的,因为google徽标是一个PNG文件。但是,当我使用Django将图像下载到本地桌面时,windows无法识别该文件。如果没有Djano的加入,脚本工作得很好。