ファイル拡張子のないファイルをスクレイピングでダウンロードする方法【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歳。埼玉出身・東京在住。
エンジニア × ブロガー × 個人事業主

学生時代に、IT企業でフルリモートのインターンとして働く。家で働けることに感動し、エンジニアを目指す。IT業界に進む大学生を増やしたい!

MBTI:INFJ
好き:海・音楽・お寿司・ハーゲンダッツ・猫

コメント

コメントする

目次