この記事はSLP KBIT Advent Calendar 2023の14日目の記事です。
はじめに
こんにちは。kakkoです。
今回、私はWebスクレイピングを用いて、Webページから書籍の題名や作者の情報のみを抽出してみたいと思います。
Webスクレイピングとは
Webスクレイピングとは、Webページのデータを取得し、そこから特定の情報を抽出するコンピュータソフトウェア技術のことです。
Webスクレイピングを行うときの注意点
- スクレイピングして得た情報は著作物であること
- Webページの利用規約によって、スクレイピングが禁止されている場合があること
- スクレイピングでサーバにアクセスする際、サーバに負担をかけすぎないこと
事前準備
今回は、Pythonを使ってWebスクレイピングを行うことにしました。
そのため、まずは、事前準備として"【2023年版】Python+VSCode+Windows11の環境構築 | 使える.py"を参考にしてPythonの環境構築を行いました。
次に、「Requests」と「BeautifulSoup」というライブラリをインストールしました。
Requests: Webページの情報を取得する
BeautifulSoup: 取得したWebページを分析し、指定した部分の情報を抽出する
<イメージ図>
今回はこのような形でWebスクレイピングを行っていきます。
さて、Webスクレイピングに必要な準備ができたので実際にやってみます。
実践
今回は、私の好きな漫画である「僕のヒーローアカデミア」の題名と作者をWebスクレイピングしようと思います。
↓WebスクレイピングしたサイトのURL
『僕のヒーローアカデミア』|集英社『週刊少年ジャンプ』公式サイト
Webスクレイピングする
Webスクレイピングをするプログラムを書きます。
- PythonでWebスクレイピングをする方法を解説!【入門…|Udemy メディア
- BeautifulSoup入門:Webスクレイピングの基本をマスターしよう | 自作で機械学習モデル・AIの使い方を学ぶ
を参考にして次のようなプログラムを書きました。
import requests
from bs4 import BeautifulSoup
#Webページの情報を取得する
url ="https://www.shonenjump.com/j/rensai/myhero.html"
r = requests.get(url)
#Webページのコンテンツの内容を分析する
soup = BeautifulSoup(r.content, "html.parser")
#題名と作者を取得
book = soup.select("h1 span")
#表示
print(book)
結果
このように、題名と作者の部分のみを抜き出すことができました。
ここで思ったのが、[< span >~< /span >] の中身だけ取り出したい!
ということで、次はWebスクレイピングしたデータのタグを取り除いてみたいと思います。
タグを取り除く
Webスクレイピングして、抽出した情報のタグを取り除いて、表示するプログラムを書いていきます。タグを取り除く関数のコード(remove_bracket())を書く際に、"Pythonテキスト処理!文章中からHTMLタグを取り除いてみた | WATLAB -Python, 信号処理, 画像処理, AI, 工学, Web-"での方法を使わせていただきました。
書いたプログラムは以下のようになります。
#<>の部分を取り除く関数
def remove_bracket(text):
check = True
word_s = '<'
word_e = '>'
#<>が無くなるまで繰り返す
while check == True:
#'<'が何番目にあるかを検索
start = text.find(word_s)
#word_s('<')がないとき:繰り返しを終了
if start == -1:
check = False
#word_s('<')があるとき
else:
#'>'が何番目にあるかを検索
end = text.find(word_e)
#word_s('>')がないとき:繰り返しを終了
if end == -1:
check = False
#word_s('<')とword_e('>')があるとき:<>で囲まれた部分を空白に置き換える
else:
remove_word = text[start:end + 1]
text = text.replace(remove_word, '')
return text
import requests
from bs4 import BeautifulSoup
#Webページの情報を取得する
url ="https://www.shonenjump.com/j/rensai/myhero.html"
r = requests.get(url)
#Webページのコンテンツの内容を分析する
soup = BeautifulSoup(r.content, "html.parser")
#題名と作者を取得
book = soup.select("h1 span")
#bookを文字列に変換
book_ = str(book)
#両端の[]を空白に置き換えて削除する
book_ = book_.replace('[', '')
book_ = book_.replace(']', '')
#<>を取り除く関数を呼び出す
book_ = remove_bracket(book_)
print(book_)
結果
タグと両端の"[ ]"を取り除くことができました!
おわりに
最後までご清覧ありがとうございました。
Webスクレイピングも、Pythonも初めてだったので、難しかったです。うまくいかないことも多々ありましたが、結果的にやろうとしていたことができたので良かったと思います。
参考文献
コードを書くときに他に参考にしたもの
- CSSセレクタについて
【初心者向け】CSSセレクタとは?セレクタの種類や指定方法を解説!(基礎編) : ビジネスとIT活用に役立つ情報(株式会社アーティス) - replace()関数について
Pythonで文字列の一部を削除(stripなど) | note.nkmk.me - str()関数について
【Python入門】文字列(String)について,Python3