使用Python从Blob URL下载文件

时间:2016-09-15 18:00:21

标签: python download blob urllib

我希望我的Python脚本从此Frankfurt stock exchange webpage下载主数据(下载,XLSX) Excel文件。

何时使用urrlibwget检索它,结果是URL指向 Blob ,下载的文件只有289个字节且无法读取。

  

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

我完全不熟悉Blob并且有这些问题:

  • 文件"可以在Blob"之后使用Python成功检索?

  • 如果是这样,是否有必要发现" true" Blob背后的URL - 如果有这样的事情 - 以及如何?我担心的是,上面的链接不会是静态的,但实际上经常会发生变化。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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())