【PythonでWebスクレイピング入門】PythonからInstagramのJSONデータを入手し、フォロアー数などのアカウント情報を抽出する
今回は、PythonとBeautifulSoupを使って、対象となるInstagramアカウントの情報を入手する方法を取り上げてみたいと思います。
またこちらの内容は、下記のPHPを利用したWebスクレイピングとなるべく同じスタイルで書き上げるようにしています。Pythonに加えて、PHPにも挑戦してみたい!と言う方は是非ご一読ください。
注意事項: Instagramはスクレイピングなどを利用規約にて禁止しており、今回の記事ではPythonのお題として取り上げております。これらを利用して運用する事は、利用規約に抵触する可能性が高いので、あくまで自己責任の範囲で行ってください。
【告知】 bosyuでPythonのプログラミングのお手伝いの募集してます
Pythonは手軽に始められる反面、活用できるライブラリなども豊富で、色々と悩んだり壁にぶつかってしまう事があったりすると思います。そんな時は自分のノウハウや英語のスキルを生かしたリサーチ能力を駆使して、全力でお手伝いします!というものです。
このノートを読んで、「こういう応用の仕方はあるのかな?」や「新しくこう言った動作を取り入れてみたんだけど、上手く動かない」と言ったニーズにお答えできるかと思います。詳しくは下記のページにて。
まずは環境の準備
今回利用する主なライブラリは下記の通りです。
from bs4 import BeautifulSoup
import requests
import json
import re
InstagramページからJSONデータを入手する
Instagramのページ構造として、ユーザーや投稿などに関する情報がJavaScript内にJSON形式で埋め込まれているので、こちらはそのJSONデータを取り出す関数モジュールになります。
def get_json_data(url):
res = requests.get(url)
html = BeautifulSoup(res.content, 'html.parser')
pattern = re.compile('window._sharedData = ({.*?});')
script = html.find("script", text=pattern)
data = pattern.search(script.text).group(1)
json_user_data = json.loads(data)
return(json_user_data)
返ってきたJSONデータに対して、今回はプロフィールのユーザー名、フルネーム、フォロア数、フォロー数、紹介文を下記の様に抽出します。
ig_user = json_data['entry_data']['ProfilePage'][0]['graphql']['user']
ig_user_username = ig_user['username']
ig_user_fullname = ig_user['full_name']
ig_user_followers = ig_user['edge_followed_by']['count']
ig_user_following = ig_user['edge_follow']['count']
ig_user_biography = ig_user['biography']
これ以外にも、プロフィールのサムネイル画像、登録されているURL、公式アカウントかどうか、などが入手可能です。
今回のPythonスクリプト
from bs4 import BeautifulSoup
import requests
import json
import re
url = "https://instagram.com/調べたいInstagramユーザー/"
def get_json_data(url):
res = requests.get(url)
html = BeautifulSoup(res.content, 'html.parser')
pattern = re.compile('window._sharedData = ({.*?});')
script = html.find("script", text=pattern)
data = pattern.search(script.text).group(1)
json_user_data = json.loads(data)
return(json_user_data)
json_data = get_json_data(url)
ig_user = json_data['entry_data']['ProfilePage'][0]['graphql']['user']
ig_user_username = ig_user['username']
ig_user_fullname = ig_user['full_name']
ig_user_followers = ig_user['edge_followed_by']['count']
ig_user_following = ig_user['edge_follow']['count']
ig_user_biography = ig_user['biography']
print('ユーザー名: '+ig_user_username)
print('フルネーム: '+ig_user_fullname)
print('フォロアー数: '+str(ig_user_followers))
print('フォロー数: '+str(ig_user_following))
print('紹介文: '+ig_user_biography)
まとめ
一見難しそうに見えるInstagramのJSONデータですが、構造を理解する事で自分の取り出したい情報に簡単にアクセスできるかと思います。