2014-11-22 332 views
0

我是Python新手,使用Scrapy时出现问题。我需要从URL下载一些PDF文件(这些URL指向PDF,但其中没有.pdf),并将它们存储在一个目录中。如何使用Scrapy保存PDF文件?

到目前为止,我已填充我的项目有标题(你可以看到我已经通过了标题为我以前的请求,元数据)和身体(这是我从我的最后一个请求的响应身体得到)。

当使用with open功能在我的代码,但是,我总是这样从终端得到一个错误回来:

exceptions.IOError: [Errno 2] No such file or directory: 

这里是我的代码:

def parse_objects: 
    .... 
    item = Item() 
    item['title'] = titles.xpath('text()').extract() 
    item['url'] = titles.xpath('a[@class="title"]/@href').extract() 
    request = Request(item['url'][0], callback = self.parse_urls) 
    request.meta['item'] = item 
    yield request 

def parse_urls(self,response): 
    item = response.meta['item'] 
    item['desc'] = response.body 
    with open(item['title'][1], "w") as f: 
     f.write(response.body) 

我使用item['title'][1],因为标题字段是一个列表,我需要使用第二个名称保存PDF文件。据我所知,当我使用with open并且没有这样的文件时,Python会自动创建一个文件。

我正在使用Python 3.4。

任何人都可以帮忙吗?

+0

后的'url'您在其上运行的蜘蛛。那么我们可以测试你的代码。发布你的'打开'功能也 – 2014-11-22 18:20:55

+0

我发现我的自我解决方案。我试图保存在其标题中包含字符“/”的pdf文件,因此在函数“with open”中这看起来像一个目录。我用下划线(_)更改了反斜杠,并且一切似乎都正常工作。 – bettas 2014-11-23 20:59:14

回答

-1

首先,你必须找到URL的XPath中,你需要下载。

,并保存链接到一个列表。

导入所谓的urllib { import urllib }

使用关键字urllib.urlretrieve下载PDF文件的Python模块名称。

例,

import urllib 

url=[] 

url.append(hxs.select('//a[@class="df"]/@href').extract()) 


for i in range(len(url)): 

     urllib.urlretrieve(url[i],filename='%s'%i)