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

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

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

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

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

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

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

http://k2-ornata.com/mac_python_install_and_excel_operation/

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

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

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

ライブラリの追加

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

2.プログラミング

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

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

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

import requests
from bs4 import BeautifulSoup

url = "http://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

MacにPythonの開発環境(PyCharm)をインストールしてExcelファイルの内容を読み込むプログラムを動かしてみた

最近、セキュリティの自動化製品であるSOARの勉強をしておりますが、SOARからpythonのプログラムを動かせばなんでもできそうだなとおもっています。

そこで、今後の為にpythonの勉強をしてみることにしました。

1.python3のダウンロード&インストール

Macでpython3の環境を整える方法は以下の2種類の方法があります。

a.Webサイトからインストーラをダウンロード
b.Homebrewでインストール

今回は a.のWebサイトからダウンロードする方法でインストールしてみました。この場合、以下のサイトにアクセスします。

https://www.python.org/downloads/

すると以下のサイトが表示されるので、上部にあるメニューから「Downloads」-[macOS]を選択します。

Pythonのダウンロードサイト

すると、mac用のインストーラがいくつか表示されていますので、そこから好きなバージョンをダウンロードします。

ダウンロードが終わったら、それをマウスでダブルクリックするとインストールされます。

これで基本的なpythonの開発・実行環境は準備できました。

しかし、このインストーラに含まれる開発環境は基本的な物なので、使いがってはあまりよくなさそうです。

そこで、PyCharmというVisual Studio的な開発環境をインストールします。

2.PyCharmのインスール

PyCharmは以下のサイトからダウンロード可能です。

https://www.jetbrains.com/ja-jp/pycharm/

上記URLにアクセスすると以下のようなサイトが表示されるので、真ん中の「ダウンロード」をマウスでクリックします。

PyCharmのダウンロードサイト

するとさらに以下の画面が表示されるので無償版の Community のダウンロードボタンを押してダウンロードします。

PyCharmのダウンロード画面

ダウンロード後のインストールについては、他のアプリケーションと同じ操作方法で実施します。

3.PyCharm の起動

PyCharm を起動すると以下のウィンドウが表示されますので、「New Project」を選択します。

PyCharm 起動直後

すると新しいプロジェクトの設定画面が出てきますので、とりあえず赤枠のプロジェクト名だけ設定し、「Create」ボタンを押します。

新しいプロジェクトの設定画面

これで開発画面が開きます。

4.Excelを扱うライブラリopenpyxlのインストール

開発画面からプログラムを書く前に、Excelを扱う為のライブラリをインストールしておきます。

PyCharm のメニューから「Preferences」を選択します。

プリファレンスの選択

Preferencesのウィンドウが出たら左側のペインから「Project:<プロジェクト名>」-「Python Interpreter」を選択します。

python interpreterを選択

さらにメインウィンドウにある小さな「+」を押すと以下の画面が表示されますので、openpyxlと打ち込んで検索し、一番下にある「Install Package」ボタンを押しインストールします。

openpyxlライブラリの選択

5.Excelファイルのセルの情報を読み込むプログラムの記述

これでExcelファイルを扱う開発環境が整いましたので、プログラムを作成します。

指定したファイルのセル(この場合、B1セル)を読み込むだけであれば、以下のような簡単なプログラムで作成できます。

import openpyxl

wb = openpyxl.load_workbook('../../Downloads/sample.xlsx')
sheet = wb['sample']
value = sheet.cell(row=1, column=2).value
wb.close()

print(value)

なお今回読み込んでいるファイルの情報は以下の通りです。

ファイルの場所:ダウンロードフォルダ直下
ファイル名:sample.xlsx
シート名:sample

6.PyCharmでのプログラム実行

プログラムを書いたらそれを実行します。
実行についてもPyCharm上で行うことができます。

プログラムを記述したメインの画面でマウスを右クリックし、「Run ‘main’」を選択します。

pythonの実行

実行するとウィンドウの下側に実行結果を表示する画面が表示されます。

python実行結果

今回の場合、B1セルに”共通”という文字が書かれているのですが、その文字が赤枠の部分に正しく出力されています。
(なんかその手前にワーニングっぽいものが出てますが、とりあえず無視で。。。)

7.ターミナルで実行する場合

今回開発したプログラム”main.py”はターミナル上でも実行することができますが、別途、Homebrewなどでpythonの環境やopenpyxlを整えておく必要がありそうです。

その上で以下のコマンドを実行すれば、同様の結果が得られます。

python main.py

<参考サイト>

・Pythonの開発環境を用意しよう!(Mac)(https://prog-8.com/docs/python-env)
・PythonでExcelを操作し自動化する方法! 読み込みや書き込み、グラフまで徹底解説(https://camp.trainocate.co.jp/magazine/python-excel/)
・PyCharmとは!? 特徴と使い方入門(https://zero-cheese.com/4258/?utm_source=pocket_mylist)
・PythonでExcelファイル(xlsx)を読み書きするopenpyxlの使い方(https://note.nkmk.me/python-openpyxl-usage/?utm_source=pocket_mylist)

MacのPythonをバージョンアップさせてみた

Pythonをあまり使ったことがない初心者ですが、諸事情でMAC OS上でPythonを利用とおもったところ、バージョンが古かったのでバージョンアップしてみました。
なお、本件の前提としてパッケージ管理システムHomebrewがインストールされていることが前提となっています。

意外とめんどくさいバージョンアップ?

さきほども言いましたとおりPython超初心者なので、単純にHomebrewでインストールするだけでしょとおもっていましたが、意外とめんどくさかったです。(実はわかってなかっただけですが。)

1.Homebrew でPythonをインストール

まず、以下のとおり、brew install pythonコマンドでインストールをしてみることにしました。(このときはデフォルトでpythonがインストールされているとは知らず。。)

その後、Python -Vコマンドで確認すると、2.7.16との表示がでましたが、どうも最新にはなってない模様です。(この2.7.16が、Catalina 10.15.1のデフォルトのようです。この後、理由が判明。)

2.pyenv でPythonをバージョンアップ

そこで、今度はPythonのバージョン管理ツールと思われるpyenvコマンドを使って、Pythonをバージョンアップさせることにしました。
ちなみに、pyenv も上図のとおり、Homebrew からインストールできます。

pyenv をインストールした後、.bash_profileを以下のとおりホームディレクトリに作成し、sourceコマンドで有効化します。

% cat .bash_profile
export PYENV_ROOT=”$HOME/.pyenv”
export PATH=”$PYENV_ROOT/bin:$PATH”
eval “$(pyenv init -)”

% source ~/.bash_profile

その後、pyenv install –listコマンドで利用可能なPythonのバーションを確認します。

上図のとおりPythonのバージョンがずらずらと表示されるので、その中から最新で安定しているとおもわれるものを選んで pyenv installコマンドでインストールします。今回は、3.8.3をインストールしました。

その後、pyenv versionsコマンドでバージョンを確認すると、system(たぶん、systemにデフォルトでインストールされているものの意味)に*印がついていたので、pyenv globalコマンドで3.8.3に切り替え、再度、Python -Vを打ってみたのですが、変わらずでした。

3.環境変数の見直し

どうも調べたところ、環境変数が足りないらしいことに気がついた為、以下の行を.bash_profileに追加し、再度、sourceコマンドで有効化しました。

export PATH=”$HOME/.pyenv/shims:$PATH”

その後、再度 Python -Vコマンドで確認すると、バージョンが上がっていることを確認できました!

どうも、$HOME/.pyenv/shims ディレクトリ配下に新しいバージョンのpythonが入っていたようで、そこにPathがなかっただけみたいですね。

結論

インストール方法によるpythonコマンドの保存先の違いは以下のとおりです。

Mac OSプレインストール・・・/usr/local/bin配下
Homebrewでインストール・・・/usr/local/bin配下
pyenvでインストール・・・$HOME/.pyenv/shims配下
 ※シンボリックリンクは/usr/local/opt/python/libexec/bin配下

結局、Mac OSに3つもPythonを入れてしまったようです。。。