使用 Python 从 Blob URL 下载文件
Download file from Blob URL with Python
我希望我的 Python 脚本从此 Frankfurt stock exchange webpage 下载 主数据(下载,XLSX) Excel 文件。
当用 urrlib
和 wget
检索它时,结果 URL 导致 Blob 并且文件已下载只有 289 字节且不可读。
我完全不熟悉 Blob,有以下问题:
可以使用Python成功检索文件"behind the Blob"吗?
如果是这样,是否有必要揭开 Blob 背后的 "true" URL——如果有这样的东西——如何揭开?我在这里担心的是上面的 link 不会是静态的,但实际上经常变化。
那个 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())
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,都是不错的库
我希望我的 Python 脚本从此 Frankfurt stock exchange webpage 下载 主数据(下载,XLSX) Excel 文件。
当用 urrlib
和 wget
检索它时,结果 URL 导致 Blob 并且文件已下载只有 289 字节且不可读。
我完全不熟悉 Blob,有以下问题:
可以使用Python成功检索文件"behind the Blob"吗?
如果是这样,是否有必要揭开 Blob 背后的 "true" URL——如果有这样的东西——如何揭开?我在这里担心的是上面的 link 不会是静态的,但实际上经常变化。
那个 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())
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,都是不错的库