2016-09-15 409 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