機械学習のためのデータ収集技術
Web Scrapingとは、Webサイトから記事情報や画像を抽出する技術のことで、Web Crawler あるいはWeb Spider とも呼ばれます。近年、機械学習に用いる学習データ(例えば犬と猫の画像)を大量に取得する目的で、この技術が必要になることが多くなりました。
WebScrapingは、人間が記事を読む場合と違って、プログラムが短時間に大量のリクエストを行います。通常の Webサーバーが想定する以上の負荷をかけることになるので*1、アクセス頻度などを考えて相手に迷惑をかけないよう、注意が必要です。
Webスクレイピングというキーワードで検索すると、Python を使った方法が多くヒットしますが、作業の目的によっては、いわゆるクローラーを使えば簡単に目的が達成されます。例えば、特定のWebページにリンクされた画像の収集であれば、フリーのWebクローラーツールや、ブラウザの拡張機能を使って、簡単に実現できます。
Pythonでは Scrapy という有名なフレームワークがありますが、フレームワークというのはそれなりに学習コストがかかります。ここでは、古くから使われている、Requests と BeautifulSoup のみを使って、簡単なコードでそれを実現する事例を紹介します。以下が前提となります。
以下、Requests によるページの取得と BeautifulSoup による要素情報の取得の仕方について順に解説します。
Requests は、Webページを取得・解析するためのライブラリです。
$ pip install requests注)Python3系であればコマンドは pip3、2系であれば pip です。
import requests
r = requests.get('https://design.kyusan-u.ac.jp/index.html',verify=False)
print("// HEADER //////////////")
print(r.headers,"\n")
print("// HTML CONTENT ////////")
print(r.content,"\n")$ python sample.py
$ python sample.py > result.txt
Beautiful Soup は、HTMLを指定してその情報を抽出する場合に使用します。
$ pip install beautifulsoup4
import requests
from bs4 import BeautifulSoup
r = requests.get('https://design.kyusan-u.ac.jp/socialdesign/',verify=False)
soup = BeautifulSoup(r.content, "html.parser")
print(soup.find("h1"))$ python sample2.py <h1 id="pageTitle"><a href="・・">SocialDesign</a> </h1>
print(soup.find("h1").text)import requests
from bs4 import BeautifulSoup
r = requests.get('https://design.kyusan-u.ac.jp/socialdesign/',verify=False)
soup = BeautifulSoup(r.content, "html.parser")
for i in soup.find_all("h3"):
print(i.text)