はじめに
私は水族館が好きで、色々とあって全国の水族館の情報をスクレイピングしてみました。今回は、その方法をまとめました。
全国の水族館の情報をスクレイピングしてみた
スクレイピングするページ
今回利用したページは以下です。一部載っていない水族館もありますが、そこは気にせず取得していきます。
上記のページに記載されている情報は転載を禁止されています。
スクレイピングの流れ
今回のゴールは、前述したページより水族館の名前、ホームページのURL、住所を取得することを試みます。前述したページには各水族館の説明があるページのリンクが記載されているだけなので、元のページから各水族館のURLを取得し、水族館の説明のページをスクレイピングしていきたいと思います。
今回はPythonを使ってスクレイピングを行います。
実際のコード
# 必要なライブラリ
import requests
from lxml import html
from bs4 import BeautifulSoup
# 水族館一覧のページのURL
url = 'http://www.web-aquarium.net/'
# ページのHTMLを取得する
res = requests.get(url)
res.encoding = res.apparent_encoding
raw_html = res.text
soup = BeautifulSoup(raw_html, "html.parser")
# 水族館のURLリストを作成する
# aタグのみを取得して、URLを作成していく
import re
raw_aquarium_list = soup.find_all("a", href=re.compile("aquarium/aq_"))
aquarium_list_url = ['http://www.web-aquarium.net/' + data.attrs['href'] for data in raw_aquarium_list]
# 水族館の情報リストを作成する
# 元ページのHTMLを取得した時と同じ方法でHTMLを取得していく
import time
aquarium_list = []
for url in aquarium_list_url:
res = requests.get(url)
res.encoding = res.apparent_encoding
raw_html = res.text
soup = BeautifulSoup(raw_html, "html.parser")
data = soup.find_all(id="data")
name = soup.find(id="aqua_name").text
if data == []:
continue
aquarium_list.append([name, data[1].text.replace('\n', '').replace('\t', ''), data[2].text])
time.sleep(1)
さいごに
スクレイピングしてみると日本には水族館がたくさんあるなと思いました。今回は水族館一覧の情報をスクレイピングしてみましたが、スクレイピングするときは色々と注意することもあります。そこには注意して行いましょう。