2016-09-15 408 views
1

我希望讓我的Python腳本從此Frankfurt stock exchange webpage下載主數據(下載,XLSX) Excel文件。使用Python從Blob URL下載文件

當與urrlibwget檢索它,原來的URL導致斑點和下載的文件只有289個字節,無法讀取。

http://www.xetra.com/blob/1193366/b2f210876702b8e08e40b8ecb769a02e/data/All-tradable-ETFs-ETCs-and-ETNs.xlsx

我與斑點完全陌生的,並且有下列問題:

  • 可以將文件 「斑點後面」 成功地使用Python檢索?

  • 如果是這樣,是否有必要揭示Blob背後的「真實」URL - 如果有這樣的事情 - 以及如何?我的關注點在於,上面的鏈接不是靜態的,而是經常變化。

回答

1

這289字節長的東西可能是一個用於403 forbidden頁面的HTML代碼。發生這種情況是因爲服務器很聰明,如果代碼沒有指定用戶代理,則會拒絕服務器。

的Python 3

# python3 
import urllib.request as request 

url = 'http://www.xetra.com/blob/1193366/b2f210876702b8e08e40b8ecb769a02e/data/All-tradable-ETFs-ETCs-and-ETNs.xlsx' 
# fake user agent of Safari 
fake_useragent = 'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25' 
r = request.Request(url, headers={'User-Agent': fake_useragent}) 
f = request.urlopen(r) 

# print or write 
print(f.read()) 

的Python 2

# python2 
import urllib2 

url = 'http://www.xetra.com/blob/1193366/b2f210876702b8e08e40b8ecb769a02e/data/All-tradable-ETFs-ETCs-and-ETNs.xlsx' 
# fake user agent of safari 
fake_useragent = 'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25' 

r = urllib2.Request(url, headers={'User-Agent': fake_useragent}) 
f = urllib2.urlopen(r) 

print(f.read()) 
+1

我我的答案更新。 – Jeon

+0

感謝您的回答。我需要能夠將文件下載到磁盤(最好能夠覆蓋),而不是「讀取」它。 – Winterflags

+0

這是一個例子。一旦你'f.read()',你可以把它寫入另一個文件。重點是使用假代理來檢索excel文件。之後,它就像文件操作一樣。 – Jeon

2
from bs4 import BeautifulSoup 
import requests 
import re 

url='http://www.xetra.com/xetra-en/instruments/etf-exchange-traded-funds/list-of-tradable-etfs' 
html=requests.get(url) 
page=BeautifulSoup(html.content) 
reg=re.compile('Master data') 
find=page.find('span',text=reg) #find the file url 
file_url='http://www.xetra.com'+find.parent['href'] 
file=requests.get(file_url) 
with open(r'C:\\Users\user\Downloads\file.xlsx','wb') as ff: 
    ff.write(file.content) 

建議請求和BeautifulSoup,既有良好的lib

+0

我正在考慮這個解決方案。如果「blob URL」發生變化,它會更強大嗎? (他們呢?) – Winterflags

+0

當然如果框架的頁面沒有改變@ Winterflags – kiviak

+0

是的,只是你喜歡的一條路徑// @ Winterflags – kiviak