Webスクレイピングの勉強をしたので、自分のブログ記事を使ってアウトプットしてみる!

Webスクレイピングの勉強をしたので、自分のブログ記事を使ってアウトプットしてみる!

まだまだ新型コロナの影響で、Stay Home週間が続いていますね!

大学の授業はまだぎりぎり始まらず、塾講師のバイトは完全に止まり、投資とプログラミングの日々を送っています。

今日は、DAINOTEでwebスクレイピングをする方法を勉強をしたので、そのアウトプットをしていきたいと思います!

Pythonによるスクレイピング①入門編 ブログの記事をCSVにエクスポートする (参考:DAINOTE)

この記事で勉強したのは、

  • ブログ記事のタイトル
  • その記事のURL

をCSV出力して自分のパソコンに保存するまでのチュートリアルをしてくれています。

今回はそのアウトプットとして、僕のブログのIntroduction記事の中から、引用している記事のタイトルとURLをスクレイピングする流れを書いていこうと思います。

使用する環境

基本的にはPythonで実装していくのですが、今回すごいのは環境構築が一切不要ということ!

今まで僕は、anacondaとか、IDLEとか使ってpythonを書いてきましたが、google driveを使って書けるようになっていたのはすごすぎでした。

anacondaでも相当初心者に優しい環境構築ができるなと感じていたのですが、それを遥かに・・・もう本当に遥かに上回る簡単さでびっくりです。

Google Colaboratoryってやつを使っていきます

Colaboratoryを使い始める流れは2,3分ほどの設定でおしまいなので、興味がある人は調べてみてください。

使用するライブラリ

今回のスクレイピングで使用するPythonのライブラリは以下の3つです

  • Requests
  • BearutifulSoup
  • Pandas

Pandasは使ったことがありました!機械学習で不動産家賃を予測するときに使用しました

が!!ほかの二つは初めてだったので、用途をそれぞれ軽く説明すると

Requests : Web上のデータを取得する
BeautifulSout : HTMLデータを遊べるやつ
Pandas : データを行列で扱えてCSV出力できる

こんな感じ。

Pandasの使用は仕上げって感じで、ウェブサイトから情報を拾うには上の2つを使っていく感じですね。

スクレイピングする記事

今回参照していく記事は、僕のブログのホームにもなっているIntroductionのページです

こちらの記事は、このブログの案内的な役割を果たしているので、飛べるリンクが多くあります。

それらの飛び先のリンクの記事タイトルとURLを取得していこうと思います。

それでは実際にコードを書いていこうと思います。

実際にスクレイピングしていく

先ほども言いましたが、スクレイピングする記事はこちらです

デベロッパーツールで取得したいデータのタグを確認しておきます

<a href=”~~~”>

の”a”タグに入ってるURLが欲しいのでここを呼び出してあげればよさそうです。

早速Google Colaboratoryでコードを書いていきます

まずは僕の記事をテキストデータとして読み込みます

これだとわかりにくいので、このデータをHTMLを書く時のようにインデントをつけてもらいます。

.prettify()

を用いるとこのようにきれいなインデント表示をしてくれます

ここから、このページのリンクをすべて取り出したいと思います

このように書くと、このページの “a” タグを取り出すことができます

URLのみを取り出すときは、.get(‘~~~’)を使います

これでURLを取り出すことに成功しました。

僕ここまでやって気が付いたんですけど、僕の記事の中のリンクって、並べ方すごくバラバラだし、リンクにそもそもタイトルをつけていなかったんですよね。

リンクをそのまんま貼っていたので、今回はURLのみをとりだす作業にしました。

このままCSVファイルとして保存する流れをやっていきます。

(余力があったら、スクレイピングする用のサンプル記事を書こうと思います。)

CSVファイルとして保存する

データの整理

それでは、ここで取得できたURLを自分のパソコンに、CSVファイルとして保存していきます

pandasの使い方は、Udemyで習ったものがメインだったので理解しやすかったです。

イメージとしては

  1. 空の行列を用意する
  2. 列名を指定する
  3. 行を追加していく

このような感じでファイルの中身を書いていきます。

今回は名前がないので・・・。

主観的な記事へのコメントを入れていこうと思います笑

pandasをインポートしてから

空の行を定義します。

1段目に、コメントとURLをのっけて行く旨を書き、データを追加していきます。最後に表示してあげると、こんな感じで出力できます

これのCommentの部分は本来URLのタイトルになるんでしょうが、今回は特にタイトルもなにもないのでコメントにしてみました。

このまま作成したデータをCSVファイルに変換します。

CSVファイルに変換

from google.colab import files

を用いて、CSVファイルに変換することができます。

さらにこーやって書くと、自分のパソコンにダウンロードすることができます

左下に見えますか!?

あとはこれを煮るなり焼くなり好きにするだけです

結果

ほい!

こんな感じで、csvファイルとして保存することができました。

今回は、スクレイピング基礎ということでしたが、まだまだ応用が利きそうです。やりたいことがどんどん増えてきて楽しみです!

最後に

最後に。ということで、今日書いたソースコードをまとめて終わりたいと思います。


# 使用するライブラリのインポート
import requests 
from bs4 import BeautifulSoup
html_doc = requests.get("https://tenseiblog.com/").text
soup = BeautifulSoup(html_doc, 'html.parser')
print(soup.prettify())

# aタグの内容確認
tags = soup.find_all("a")
for tag in tags:
  print(tag)

# aタグの中からURLのみを抽出
for tag in tags:
  print(tag.get("href"))

# pandasのインポートと行列の作成
import pandas as pd
columns = ["Comment", "Url"]
df = pd.DataFrame(columns=columns) 
print(df)

# csvファイルへ変換して保存
from google.colab import files
df.to_csv("df.csv")
files.download('df.csv')

今回書くコードの量は少なかったですが、十分な内容で大満足でした。DAINOTEのAIアプリ開発はまだまだ続くので、理解してからのアウトプットを続けていきたいと思います。

ご精読ありがとうございました!