2014-11-22 94 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)