2016-09-15 24 views
1

私はPythonスクリプトをマスターデータ(ダウンロード、XLSX)エクセルファイルFrankfurt stock exchange webpageからダウンロードしたいと思っています。PythonでBlob URLからファイルをダウンロード

urrlibwgetでそれを取得するとき、それはURLがブロブにつながり、ダウンロードしたファイルのみを289バイトと読めないことが判明。

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

私はブロブと完全に不慣れだと、これらの質問を持っている:

  • "ブロブの背後にある" ファイルが正常にパイソンを使用して取得することはできますか?

  • もしそうなら、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

要求とBeautifulSoupをお勧めします、両方の良いLIB。 – 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) 

私は私の答えを更新し

+0

私はこの解決策を考えています。 "blob URL"が変更された場合、より堅牢になりますか? (彼らは?) – Winterflags

+0

もちろん、ページのフレームワークが@ Winterflagsを変更しない場合 – kiviak

+0

はい、ただあなたが好きなパス@ Winterflags – kiviak

関連する問題