プログラミング | オジサンテクノロジー
Pythonによるスクレイピング
掲載日:2019/04/28
概要
Pythonで任意のWebサイトからデータを取得するスクレイピングの方法を紹介します。今回は、すべての基本となる、ファイルのダウンロード方法について紹介します。
1. ファイルのダウンロード
初めに、全ての基本となるファイルをダウンロードする方法を紹介します。巷の入門書などでは、「wgetを使えば良い。」という紹介を見かけたりしますが、 wgetをデフォルトで使えるのは、Linuxの環境です。
ここでは、windowsの環境でも使えるurllib及びrequestsを用いた方法を紹介します。
1-1. urllibのurlretrieve()関数を用いた方法
urlretrieve()関数を用いると、ファイルのダウンロードを行うことができます。オジサンテクノロジーのRPAのページにおいてある画像ファイルをダウンロードするソースの例を以下に示します。
import urllib.request import os sUrl = "https://www.simple-reading.com/img/trans-patent.png" sDirname = "download/" sFilename = "save-trans-patent.png" os.mkdir(sDirname) urllib.request.urlretrieve(sUrl, sDirname + sFilename)このソースを実行することで、downloadというディレクトリを新たに作成し、 その中に画像ファイルがダウンロードされて保存されます。
1-2. urllibのurlopen()関数を用いた方法
urlopen()関数を用いると、実行環境上のメモリにデータをダウンロードできます。オジサンテクノロジーのRPAのページにおいてある画像ファイルをダウンロードするソースの例を以下に示します。
import urllib.request import os sUrl = "https://www.simple-reading.com/img/trans-patent.png" sDirname = "download/" sFilename = "save-trans-patent.png" bDowndata = urllib.request.urlopen(sUrl).read() os.mkdir(sDirname) with open(sDirname + sFilename, 'wb') as file: file.write(bDowndata)urlretrieve()を用いた場合と同様に、 このソースを実行することで、downloadというディレクトリを新たに作成し、 その中に画像ファイルがダウンロードされて保存されます。
ファイルの保存に手間がかかりますが、 例えばSQLiteなどのデータベースに画像を保存する場合などはurlopen()を使うと便利です。
それ以外に。。。というよりこちらがメインですが、 HTMLをダウンロードして情報をスクレイピングする場合には、ファイルを保存するだけではダメなので、 urlopen()を使用します。
1-3.requestsのget()関数を用いた方法
requestsのget()関数を用いると、より直観的にデータをダウンロードできます。get()を使う場合、urlopen()と同じく、メモリ上にダウンロードされるため、 ファイルの保存にはもうひと手間必要になりますが、HTMLをダウンロードするスクレイピングには適しています。
特に、getやpostといった、HTTP命令を直観的に使えるため、非常に使いやすいです。
オジサンテクノロジーのRPAのページにおいてある画像ファイルをダウンロードするソースの例を以下に示します。
import requests import os sUrl = "https://www.simple-reading.com/img/trans-patent.png" sDirname = "download/" sFilename = "save-trans-patent.png" bDowndata = requests.get(sUrl) os.mkdir(sDirname) with open(sDirname + sFilename, 'wb') as file: file.write(bDowndata.content)urlopen()を用いた場合とほぼ同じですが、requestsをimportし、requestsを使用してデータを取得しています。
urllib.requestとrequestsは名前が非常に似ているため、混同しやすいですが別のパッケージです。
特に、requestsは標準では含まれていないため、使用する場合は下記のコマンドをコマンドプロンプトに打ち込み、 パッケージをインストールする必要があります。
pip install requests好みが色々とあると思いますが、とりあえず動かしたいだけの場合は、urllibを使用しておけば良いと思います。
2. まとめ
今回述べてきたクローリングとスクレイピングについて一度整理します。クローリングとスクレイピング。混同しても大した問題はありませんが、処理は独立して行った方が良いです。
・クローリング:サイトのデータを取得する作業
特定のサイトの内部。もしくは、複数のサイトのurlに次々とアクセスし、HTMLをダウンロードしていきます。
アクセスするurlは、あらかじめリストにしてある場合だけでなく、 アクセスしたurlからリンクをたどる形でも行わられます。
・スクレイピング:クローリングしたデータから、自分が欲しい情報を抜き出す作業
クローリングを行うことで、簡単に大量のデータは入手することができます。
しかし、ただ大量にあるデータはインターネット上に存在したままのデータとなんら変わりがありません。
欲しい情報、必要な情報を抜き出し、表やグラフにまとめることで、 初めて、情報処理が完了したと言えます。
データをまとめるための処理としては、cssセレクタによるデータの抽出や機械学習によるデータ処理などがあります。