如何使用Scrapy保存PDF文件?

时间:2014-11-22 11:00:42

标签: python pdf scrapy

我是Python新手,使用Scrapy时遇到问题。我需要从URL下载一些PDF文件(URL指向PDF,但其中没有.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。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:-1)

首先,您找到了需要下载的URL的Xpath。

将这些链接保存到一个列表中。

导入名为Urllib { import urllib }

的python模块名称

使用关键字urllib.urlretrieve下载PDF文件。

例,

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)