2015-08-04 15 views
12

Web'den bir PDF dosyası almak için Python requests lib kullanıyorum. Bu iyi çalışıyor, ama şimdi de orijinal dosya adını istiyorum. Firefox'ta bir PDF dosyasına gidip download'u tıklarsam, pdf'yi kaydetmek için tanımlanmış bir dosya adı zaten vardır. Bu dosya adını nasıl alabilirim? ÖrneğinPython istekleri ile pdf dosya adı nasıl edinilir?

:

import requests 
r = requests.get('http://www.researchgate.net/profile/M_Gotic/publication/260197848_Mater_Sci_Eng_B47_%281997%29_33/links/0c9605301e48beda0f000000.pdf') 
print r.headers['content-type'] # prints 'application/pdf' 

ilginç bir şey için r.headers kontrol, ancak hiçbir dosya adı orada var. Aslında r.filename gibi bir şey umuyordum.

İndirilen PDF dosyasının dosya adını istek kitaplığı ile nasıl alabileceğimi bilen var mı? o her zaman böyle olması durumunda

r.headers['content-disposition'] 

olsa Bilmiyorum:

+0

İlginç - “iyi * açıkçası *' 0c9605301e48beda0f000000.pdf' ”(istekte olduğu gibi) diyecektim ama neyse ki önce bunu test etmeye karar verdim. Ve FireFox bunu "Mater Sci Eng B47 (1997) 33.pdf" olarak kaydetmek istiyor. – usr2564301

+0

Başlıkları nasıl kontrol ediyorsunuz? _is_ dosya adı, content-disposition: satır içi; filename = "Mater Sci Eng B47 (1997) 33.pdf" '. FWIW, birçok PDF'de, bunların hepsinde değil, hepsinde bir [Başlık] (http://stackoverflow.com/q/6367304/4014959) bulunur ve PDF'in ikili biçimde olması durumunda erişilmesi kolay olmayabilir. –

cevap

21

Bir http başlığı content-disposition'da belirtilmiştir. normal ifade (re modülü) üzerinden dize çıkarılan

import re 
d = r.headers['content-disposition'] 
fname = re.findall("filename=(.+)", d) 

Adı: Yani yapardın adını ayıklamak için.

+0

Bunu görmediğim kadar aptalca. Eklenen regex için de teşekkürler .. :-) – kramer65

+0

Dosya adı utf8 olarak kodlanmışsa, bu işe yaramaz. Orada herhangi bir önerin var mı? –

4

Görünüşe göre, bu özel kaynak için o içindedir.

İlgili konular