ファイル拡張子のないファイルをスクレイピングでダウンロードする方法【python】

当ページのリンクには広告が含まれています。
ファイル拡張子のないファイルをスクレイピングでダウンロードする方法【python】

こんにちは、はるです。

ファイル拡張子のないファイルをスクレイピングでダウンロードするにはどうやるの?

こんな悩みを解決していきます。 

Pythonクローリング&スクレイピングという参考書に載っていた厚生労働省の有効求人倍率データを、スクレイピングでダウンロードしてみようと思いました。

しかし、ファイル拡張子のないファイルで404エラーになり、ダウンロードできず。

2時間ぐらい調べていたら解決したので、まとめていきます。

動作環境

googlecolaboratory

目次

ファイル拡張子のないファイルをスクレイピングでダウンロードするには

2つのやり方があります。

  • urllib.request.urlopenを使う(推奨)
  • urllib.request.urlretrieveを使う

1つずつ解説していきます。

urllib.request.urlopenを使う(推奨)

手順は以下のとおりです。

  1. urllib.requestのインポート
  2. urlをもってくる
  3. 名前を付けて保存

urllib.requestのインポート

urllib.requestを読み込みます。

import urllib.request

urlをもってくる

ダウンロードURLをもってきます。

url = 'https://www.e-stat.go.jp/stat-search/file-download?statInfId=000032059507&fileKind=0'

名前を付けて保存

with open wでファイルに書き込みをします。

urllib.request.urlopen()の値はバイナリ値なので、「w」の後ろに「b」を追加してください。

「b」を入れないと、保存はできますが、うまくエクセルに表示されません。

私自身「b」を追加することを知らず、2時間ほど時間を失いました笑

# urlの処理
dl = urllib.request.urlopen(url).read()

# ファイルへの保存
save_name = "第3表.xlsx"
with open(save_name, "wb") as f:
    f.write(dl)

ソースコード

# urlopen
import urllib.request

url = 'https://www.e-stat.go.jp/stat-search/file-download?statInfId=000032059507&fileKind=0'                           
 
# urlの処理
dl = urllib.request.urlopen(url).read()

# ファイルへの保存
save_name = "第3表.xlsx"
with open(save_name, "wb") as f:
    f.write(dl)

urllib.request.urlretrieveを使う

urlopenよりもカンタンにできます。

さいご、urllib.request.urlretrieveurlsave_nameを渡せば、できてしまいます。

# urlretrieve
import urllib.request

url = 'https://www.e-stat.go.jp/stat-search/file-download?statInfId=000032059507&fileKind=0'
                         
# ファイルへの保存
save_name = "第3表.xlsx"  
urllib.request.urlretrieve(url, save_name)

しかし推奨しない理由

公式ドキュメントには、廃止されるかもしれないと書かれているから。

レガシーインターフェース
以下の関数およびクラスは、Python 2 のモジュール urllib (urllib2 ではありません) から移植されたものです。これらは将来的に廃止されるかもしれません。

参考:python公式ドキュメント – レガシーインターフェース

補足

urlの一部を変数化することで、同じようなURLを持ってくるときに変数の中身だけ変えればいいので、楽になるかもしれません。

statInfId = '000032059507'
fileKind = '0'
url = 'https://www.e-stat.go.jp/stat-search/file-download?statInfId=000032059507&fileKind=0'

以上です。

ご覧いただきありがとうございました!

参考記事

ファイル拡張子のないファイルをスクレイピングでダウンロードする方法【python】

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

23歳。埼玉出身・東京在住。
エンジニア × ブロガー × 個人事業主

意識高い系だったけど、落ち着いた人。
今この瞬間を楽しもうと決めました。
のんびりエンジニアとして働きつつ、小説書いたり仮想通貨トレードをしたり、好きなことを取り組んでいます。

MBTI:INFJ
好き:海・音楽・妄想・人

コメント

コメントする

目次