Contents
webスクレイピング
webサイトのソースをインターネット経由で引っ張ってきて、HTML構造を分析し、目的の要素を取得すること。
今回は、ejje.weblio.jpからスクレイピングさせていただきます。
準備
言語:Python3
ライブラリ:Beautiful Soup 4 (bs4)
pip install beautifulsoup4
動作
とりあえず、動きを見てみます。
import requests
from bs4 import BeautifulSoup
print("\"0\" If you enter the end.")
while True:
# 入力
spell = input("spell: ")
if spell == "0":
break
# アクセス先URL
url = "https://ejje.weblio.jp/content/" + spell
# データ取得&エンコード設定
source = requests.get(url)
source.encoding = source.apparent_encoding
# ビューティフルスープで抽出
data = BeautifulSoup(source.text, "html.parser")
explanation_list = data.select("td.content-explanation")
# 表示
for idx, txt in enumerate(explanation_list):
print("(success) " + explanation_list[idx].text)
if len(explanation_list) == 0:
print("(error) explanation is not found")
シンプルなCUI操作で試せます。英単語を入れれば和訳が返ってきます。

実装方法
ejje.weblio.jpではhttps://ejje.weblio.jp/content/[英単語]で解説ページにアクセスできます。

「主な意味」の内容を取得したいです。

ソースをのぞいて、目的の個所を探します。

目的のクラスを探します。一応重複チェックしておきます。他の箇所でも使われているクラスであれば、正しく抽出できません。

URLを組み立てます。
# アクセス先URL
url = "https://ejje.weblio.jp/content/" + spell
URL先にアクセスし、ソースを取得します。
# データ取得&エンコード設定
source = requests.get(url)
source.encoding = source.apparent_encoding
BeautifulSoup形式に変換し、tdタグのclass=content-explanationの中身を取得します。形式はスカラー配列です。
# ビューティフルスープで抽出
data = BeautifulSoup(source.text, "html.parser")
explanation_list = data.select("td.content-explanation")
textメソッドでHTMLタグを除去し、そのまま出力。
# 表示
for idx, txt in enumerate(explanation_list):
print("(success) " + explanation_list[idx].text)
注意
スクレイピングを行う際は、以下のことを注意しなければいけません(抜粋)
- 取得した情報には著作権がある
- サーバー負荷を考え、連続したスクレイピングの場合はスリープ関数などでクールタイムを設ける (最低でも1秒以上)
- 500番台のステータスが出たらスクレイピングを中止するなどの措置
- など
(参考) Python による Web スクレイピング:
https://creasys.org/rambo/articles/84fc91dd1071f59e83e3
The present writer kazz.