PythonにてRequestsとBeautifulsoupのライブラリを使い、自分のWebサイトをスクレイピングしてみた

Pocket

最近お仕事でWebのスクレイピングの話題がホットになっているので、実際、どういうところまでPythonを使ってできるのか試してみました。

なお、PythonにはWebからデータを取得してくるライブラリがたくさんあるようなのですが、今回は、

・Webサイトからのデータ取得・・・Requests
・HTMLデータの解析・・・Beautifule Soup

を利用することにしました。

他にもSeleniumというものもあり、そのライブラリを使えばHTMLデータの取得から解析までまとめてできるようなんですが、どうやら少し重いらしいので、それぞれ専門のライブラリに任せてみることにしました。

なお、Python開発環境のセットアップや必要なライブラリのインポート方法については以下の記事で書いていますので、もしよければ読んでみてください。

ではさっそくやってみます。

1.ライブラリの読み込み

PyCharm を起動し新しいプロジェクトを作成した後、先ほどのRequests とBeautiful Soupのライブラリを取り込みます。

ライブラリの追加

ぶっちゃけ、これで準備は完了です。

2.プログラミング

それでは、おもむろにプログラミングを始めましょう。

ちなみに今回スクレイピングするサイトは自分のブログサイト
https://k2-ornata.com/security-countermeasure/
になっています。

そして、今回書いたコードは以下の通りです。

import requests
from bs4 import BeautifulSoup

url = "https://k2-ornata.com/security-countermeasure/"

res = requests.get(url)

soup = BeautifulSoup(res.content, "html.parser")

ttl_tag = soup.select("h1")

ttl_txt =soup.head.title.text

hed2 = soup.find('h2', id='cspm').text

print(ttl_tag,':',ttl_txt,':',hed2)

全部で9行ありますが、ざっくり言うと、

最初の2行・・・ライブラリ(Requests, Beautifule Soup)の読み込み
次の3行・・・RequestsをつかってWebサイトデータの読み込み
次の3行・・・Beautiful soupをつかってHTMLデータから必要なデータを抽出
最後の1行・・・抽出したデータを”:”で区切って画面に表示

となっていて、実行結果はこちらです。

[<h1 class="entry-title">セキュリティ対策技術</h1>] : セキュリティ対策技術 – k2-ornata : CSPMとCWPP

うーん、結構簡単に出来ちゃいました。

でもWebサイトのHTML構造をちゃんと把握しないとデータの抽出がうまくいかないので、そのあたりの解析が難しいかなと思いました。

また、Beautiful Soupでデータを抽出するときに、いろいろなやり方があるようなのでそれをマスターするのも大変そうです。

ということで、以下に少しBeautiful Soupの使い方をまとめておきます。

3.Beautifule Soup によるデータ抽出方法

1.select関数を使う

“soup.select(“h1”)”のように記載すると<h1></h1>タグで囲まれたデータをタグも含めて取ってきてくれるようです。

今回の実行結果では以下のようなデータが取れました。

[<h1 class="entry-title">セキュリティ対策技術</h1>] 

2.head.title.textみたいに書く^^

“soup.head.title.text”みたいに書くと、HTMLデータの中の「ヘッダー」の中の「タイトル」についてテキストのみを取ってきてくれるみたいです。

今回の実行結果では以下の部分が該当します。

セキュリティ対策技術 – k2-ornata

正直、タイトルをどうやって判断しているのかよくわかっていません。なんで後ろに” – k2-ortana”ってついてくるんだろう?^^

3.find関数を使う

“soup.find(‘h2′, id=’cspm’).text”のように記載すると、<h2></h2>タグで囲まれたもののうち、”id”属性が”cspm”となっているものを選んで、テキスト属性だけ取り出してくれるようです。

今回の実行結果では以下の部分が該当します。

CSPMとCWPP

4.最後に

今回実際スクレイピングしてみて、とっつきとしては思った以上に簡単だなあと思いました。

ただし、属性のついていないタグのデータとか、表のセルを指定してデータを取得するとかやりだすと、いろいろテクニックやライブラリを使わないといけなさそうです。

次に機会があればもう少しつっこんで試してみたいと思っています。

<参考サイト>

・PythonでWebスクレイピングをする方法を解説!【入門編】(Udemy)
https://udemy.benesse.co.jp/development/python-work/web-scraping.html
・[Python入門]Beautiful Soup 4によるスクレイピングの基礎(@IT)
https://atmarkit.itmedia.co.jp/ait/articles/1910/18/news015.html

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA