文系JDがPythonでWebスクレイピングをやってみた ~Twitter編~


というわけでこんにちは。Twitterではかなり自由にやってます、つっきー🛌&やねこ🐈です。(急にこなれてきた感を出す)

今回はPythonを使用してのWebスクレイピング第2弾!Twitterのデータ抽出を行います。具体的にいうと、ある特定のアカウントの投稿数やフォロー数、フォロワー数を抽出するプログラムをPythonで作成してみました。

「そもそもWebスクレイピングって何?」「第1弾は?」という方は先にこちらの記事をご一読ください~~↓↓

参考書はまたまたこちら。

今回はいくつかのサイトも参考にさせて頂きました。


◎プログラム概要

さて!今回作成したソースはこちら。

from bs4 import BeautifulSoup 
import urllib.request as req
from datetime import datetime

now = datetime.now()

username = "つっきー 🛌@融合系女子"

userid = "@ugok_tuki"

url ='https://twitter.com/ugok_tuki/'

res = req.urlopen(url)

soup = BeautifulSoup(res, "lxml")

tweets = soup.find(class_='ProfileNav-item--tweets').find(class_='ProfileNav-value').string

following = soup.find(class_='ProfileNav-item--following').find(class_='ProfileNav-value').string

followers = soup.find(class_='ProfileNav-item--followers').find(class_='ProfileNav-value').string

print(username+ " (" + userid + ")")
print("現在:" + str(now))      
print("ツイート数:" + tweets)
print("フォロー:" + following)
print("フォロワー:"+ followers)

一見複雑そうなプログラムに見えますが、よく見ると【Webサイト編】のプログラムとほぼ同様の処理を行っています。大まかに言うと、

1~3行目:使用するライブラリの読み込み。
4行目:現在時刻を変数nowに代入。
5~6行目:対象のアカウント名とアカウントIDを入力(直打ち)。
7~9行目:抽出対象のHTMLを指定し、URLを開く。さらにBeautifulSoupのインスタンスを作成。
10~12行目:必要なデータを抽出し、そのデータを配列に格納。
13~17行目:抽出したデータを実行画面に表示。

という具合。【Webサイト編】で解説した部分は省略させてもらって、今回初めて使用したライブラリや少し複雑な処理について説明しますね。

まず、前回のプログラムにプラスする形で「datetime」というライブラリを使用しています(3,4行目)。これにより、現在時刻のデータを簡単に取得することができます。

次に9行目の BeautifulSoup(html, "lxml")というインスタンス、前回は第2引数に"html.parser"という値を使用していましたが、今回は"lxml"という値を使用しています。"lxml" はXMLやHTML文書を早く抽出・解析するために書かれた非常に広範囲なライブラリで、実をいうと"html.parser"でも同様の処理になります。

そして10~12行目は必要なデータを抽出し、データを配列に格納する処理です。【Webサイト編】ではこの処理をselectというメソッドで行いましたが、今回はfindというメソッドを使用しました。これはHTMLのタグやクラスを利用して抽出を行うメソッドです。
今回のスクレイピングは、目的のデータがHTMLソースコードのかなり深いところにあったため、2段階に分けて抽出を行いました。例えば最初のtweets(ツイート数)の場合、初めに’ProfileNav-item—tweets’というクラスを抽出し、さらにその中にある'ProfileNav-value'というクラスのデータを抽出する、という手法になっています。そうして最後に「.string」を付記することで文字列型のデータにしています。フォロー数、フォロワー数も同様の手法ですね。

長くなってしまいましたが、プログラムの構造説明はこれぐらいです。これ以外のプログラムについては【Webサイト編】をご参照ください……!


さて、いよいよスクレイピング実行です。今回は実験としてつっきー🛌の個人アカウントを対象にしました。気になる結果は……


こんな感じになりました!ツイート数の下が空行になるのは謎です(;´・ω・)

このようにTwitterのデータもPythonを使って抽出してくることができました。使い方次第でさらに活用の幅が広がりそうですね。


◎まとめ

私たちがPythonを利用したWebスクレイピングに挑戦してみて感じたのは、「HTMLのコードの中から目的のデータを探すのが大変だな…」ということです(元も子もない)。しかし一度プログラムを作成してしまえば、Webページのデータが更新されても基本的に問題なく使いまわすことができるわけですから、有用性を考えると作成コストは低いかなと思います。

今回はWebサイトの情報をそのまま抽出してくるだけでしたが、if文などの条件文を使えばさらに詳細なデータの抽出を行うことができますし、抽出してきたデータを計算することで、独自のデータを算出することなどもできそうですね。書籍の累計売上とか。

兎にも角にも、一見難しそうに思えるWebスクレイピングがPythonを使うと極少ないコード量で実行できることがわかりました。自主的に学習した言語で有用性のあるプログラムを作る、というのは初めての経験だったので、すごく達成感がありました…!これからも様々な学習に挑戦していくつもりです。

以上、つっきー🛌&やねこ🐈のWebスクレイピングへの挑戦でした!


↓↓Twitterでも活動しています。よろしくお願いいたします!↓↓