BeautifulSoupの役割、仕組みについて理解する[Python][Scraping]

独学Python

美味しいスープ、そそられますよね。個人的には春雨が入ったスープのブームが来てます
本記事の目的はBeutifulSoupの役割、働きについて理解することです
Pythonを使ったWebスクレイピングとしてこれまで”requests”を使ってWebサイトの情報を取ってくるところまでをやりました。

スポンサーリンク

requestsの後にすること

さらっとおさらいすると”requests”では 使っているパソコンからサーバーへと

私

このページの情報をください!!

サーバー
サーバー

ほいよっ

と、情報をもらう役割がありました。
しかしながらいただいた情報は人の目では非常に読みにくく、この読みにくい情報を読み取りやすいようにする必要があります。
Webサイトの情報は基本的にHTMLというコンピュータ言語で記述されています。
このコンピュータ言語で表示された情報から欲しい情報を得るのに使われるのが次で紹介する”BeutifulSoup“というライブラリです。

BeutifulSoupの役割

先ほど紹介したようにBeutifulSoupではrequestsによって得られたHTMLで記述されたWebの情報、すなわちHTMLの解析をすることが目的となります。 そのままでもいいじゃないかと思われる方もいらっしゃるかもしれません。

解析が必要な理由としては、この得られたHTMLというものは”人の目では大変読みにくい”かつ”不要な情報がかなり多く含まれている”からです。

どこでもいいのでWebサイト上で右クリックし、”検証”もしくは”ソースの表示”等をクリックしてみてください。試しにはてなブログでやってみた結果が↓です。

f:id:Souman:20210320173101p:plain

すると、こんな大変な文字の羅列が見られるわけですね。

こんなことならWebサイトから一枚一枚画像を保存したり、必要な情報を目視でまとめた方が早いじゃないかと、その通りです。

わざわさHTMLで情報を取得するのにはBeutifulSoupが処理をし易くする為にあります。

requetsで具材(HTML)を持ってきたからあとは調理(BeutifulSoup)お願いします!

 と理解いただければ問題ありません。

まずは準備、インストールしてimport

BeutifulSoupを使うにあたって、まずはインストールが必要になりますね。

ですので、Macをお使いであれば”ターミナル”、Windowsでれあば”コマンドプロンプト”もしくは”Powershell”を起動します。

起動したら以下のコードを入力します。

$ pip install BeautifulSoup4

BeautifulSoup4の4を忘れずに入力しておいてください、バージョンが新しくなっているので4が抜けてしまうとエラー表示がされます。
Enterを押して下の画面表示がされていれば既にInstallは完了しています!
errorが出てなければ大丈夫のはずです。

Requirement already satisfied: beautifulSoup4 in /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages (4.9.3)
Requirement already satisfied: soupsieve>1.2 in /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages (from beautifulSoup4) (2.0.1)

次にpythonもしくはpython3を入力して、動きを一つ一つ確認できる状態にします。

$ python

で、Enter。

>>>

のように表示されていれば、準備完了です。 ではBeutifulSoupをimportします。import文の前にfrom bs4を忘れずに打ってくださいね。

>>>from bs4 import BeautifulSoup

と入力しEnter

>>>

正常にimportできていればなにも表示されないはずです。
できない場合の原因としてはスペルミスもしくはBeautifulSoupの大文字B,Sが小文字になっていることを疑ってみてください。

ここではrequestsも使いたいので、requestsもimportしましょう。

>>>import requests

requestsがよくわからないという方はこちらでrequestsを説明していますので、参照して見てください。

https://hatenablog-parts.com/embed?url=https%3A%2F%2Faneffort.hatenablog.com%2Fentry%2F2021%2F03%2F19%2F000516aneffort.hatenablog.com

今回はみんな大好き”いらすとや”を参考Webサイトとして使いたいので

>>>result = requests.get("https://www.irasutoya.com/")

としましょう。resultという箱(変数)の中にいらすとやトップページの情報をいれ ました

このあたりはrequestsを紹介した記事でもやっていますね。

では、いよいよBeautifulSoupを使ってみましょう!

BeautifulSoupを使ってみる!

それでは”soupという変数”に”BeautifulSoupでいらすとやの情報を解析した結果”をいれましょう。

>>>soup = BeautifulSoup(result.text,"html.parser")

でEnterを押して

>>>

と何も表示されなければOKです。この右辺BeautifulSoupのカッコ内についてみていきましょう。

カッコ内にはresult.text , “html.parser”の2つ引数があります。引数がよくわからない場合は2つ何か入れる必要があるんだという認識をしていただければと思います。

1つ目の引数で解析する情報をいれます、ここではいらすとやトップページの情報が入ったresult.textを引数としています。

2つ目の引数では解析処理の種類、、、とパッと理解するのは難しいですが、簡単に説明すると、解析するhtml内のここにタイトルがあってあそこに画像があるのかと認識する処理です、我々人間の”目”みたいなものだと思ってください

”目”の種類にも色々あるのですが、今回は一番標準的なhtml.parserを使用します。

何はともあれ進んでみましょう!まずはできることや概要を把握して、わかりにくいところはあとで細かく調べていくスタンスでいいと思います。少しでも進んでいるとモチベーションが下がりにくく、学習の継続にも繋がります。

次に画像のリンクを取り出します。

>>>soup.find_all("img")

これでsoupという箱(変数)に入った情報の中から”img”という言葉に関連する情報を取り出します。

結果をみてみると。。。

f:id:Souman:20210320202149p:plain

何が変わったのかさっぱりかもしれませんが、よくみてみると<img ~~~>と表示されているものがたくさんあることがわかります。

つまり、soup.find_all(“img”)で、soup内にあるhtmlの中からでimgタグのついた情報を全て取り出していることがわかるかと思います。

つまりWebサイトから情報を持ってくるには、自分の求めている情報にはどんなタグがついているのかを把握する必要がありますネ

しかし、”こうやって次に必要な情報は何かを把握する→調べる”を繰り返すことで自身の知識にもなりますので

頭の体操と思って、進んでいきましょう!

この記事では情報を取り出すまでを見ていきました、情報が取り出せたら今度は”どのファイルに保存するかが気になりますね。

コメント

タイトルとURLをコピーしました