Python
スクレイピング
機械学習
python3

【Python】Webスクレイピング urllib.request / urlopen() でダウンロード

More than 1 year has passed since last update.

はじめに

Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみようを一通り勉強させていただき、自分なりに工夫したアウトプットと学習ログを残しておこうと考えたため、本稿を記述しています。

Web上の情報を取得する方法

Pythonでは、Webサイトにあるデータを取得するためにurllibライブラリを使います。このライブラリを使うと、HTTPやFTPを利用してデータをダウンロードすることができます。

urllibは「URLを扱うモジュールを集めたパッケージ」で、その中でもurlib.requestモジュールは「Webサイトにあるデータにアクセスする機能を提供」します。認証やリダイレクト、Cookieなど、インターネットで使われるさまざまなリクエストや処理に対応しています。

urllib.requestを使ったダウンロード

Webサイトから直接ファイルをダウンロードするには、urllib.requestモジュールにあるurlretrieve()関数を利用します。

以下は、Web上にアップロードされているPNGファイルを「test.png」という任意の名前でファイルに保存するという例です。

#ライブラリの読み込み --- (*1)
import urllib.request

#URLと保存パスを指定 --- (*2)
url = "https://goo.gl/1kw79Y"
savename = "test.png"

#ダウンロード --- (*3)
urllib.request.urlretrieve(url, savename)
print("保存しました")

Pythoでライブラリを利用するためには、import文を利用してライブラリを取り込む必要があります。

プログラムでは(*1)の部分でurllib.requestモジュールを取り込んでいます。「urllib.request」のように「.」で区切ってモジュールを指定していますが、これは「urllibパッケージの配下にあるrequestモジュールである」という意味になります。

プログラムの(*2)の部分で、ファイルをダウンロードしています。urlretrieve()の第1引数にURLを、第2引数に保存先のファイルパスを指定しています。

urlopen()を使ってファイルに保存する方法

上記はrequest.urlretrive()関数を使ってファイルに保存しましたが、下記はrequest.urlopen()を使う方法です。

request.urlopen()を使うと、直接ファイルに保存するのではなくデータがPythonのメモリ上に取得されます。

import urllib.request

#URLと保存パスを指定
url = "https://goo.gl/1kw79Y"
savename = "test.png"

#ダウンロード --- (*1)
nem = urllib.request.urlopen(url).read()

#ファイルへ保存 --- (*2)
with open(savename, mode="wb") as f:
   f.write(png)
   print("保存しました") 

(*1)の部分では、urlopen()関数でPNGファイルのURLリソースを開きます。そのあとread()メソッドでデータを読み取ります。

(*2)では、ファイルを開くopen()関数を使ってファイルを開きます。このとき、ファイルの読み書きモードを表すmodeを「wb」にしてファイルを開きます。「w」は書き込みモード、「b」はバイナリーモードを意味します。

最後に、write()メソッドでダウンロードしたバイナリーデータをファイルに保存しています。