2016-05-12 9 views
1

私は、いくつかのアカウントでインスタグのフォロワーの数を取得するプロセスを自動化しようとしています。BeautifulSoupを使用してJavascriptからテキストを抽出してフォロワーの数を取得する

例えば、https://www.instagram.com/taylorswift/など

私はBeautifulSoupのようなライブラリを使用しようとしました。しかし、1つの問題は、フォロワーの数がjavascriptタイプの下にあり、他の多くのテキストがあることです。

私のコードは次のようになります。

>>> from bs4 import BeautifulSoup 
 
>>> import requests 
 
>>> url = "https://www.instagram.com/taylorswift/" 
 
>>> page = requests.get(url) 
 
>>> soup = BeautifulSoup(page.content) 
 
>>> script = soup.select("script")

私は出力のみとフォロワーの数を取得する方法を聞いても? (つまり76.8m)私はPythonとスクリプティングの初心者です:/ありがとう。

+0

の詳細の多くにアクセスすることができますあなたはBeautifulSoupの使用を中止し、Seleniumを起動する方がよいでしょう。 BeautifulSoupはHTMLページをダウンロードし、Seleniumはブラウザをシミュレートするための完全なフレームワークです。私はSelenium/PhantomJSをお勧めしたいと思います。 –

+0

@ErdinErayあなたの提案に感謝します。しかし、BeautifulSoupで可能な方法がありますか?私はInstagramがjavascript主導のウェブプラットフォームであるかどうかは確信していません – Bread

+0

BeautifulSoupの助けではなく、*その* scriptタグの中に入ってみてください。次に、正規表現の助けを借りてあなたが探しているものを見つけますか?しかし、InstagramのようなWebプラットフォームは、Javascriptコードやフロントエンドの情報を保持しません。 InstagramがJSONリクエストを作成する可能性があります。そうであれば、BeautifulSoupの助けによってあなたが望むものを手に入れることはできません。 –

答えて

4

このコードは私のために正常に動作します:

#!/usr/bin/env python 

import requests 
from json import loads 

username = "liamgiannini" 

r = requests.get('https://www.instagram.com/'+username) 
html = r.text.encode("utf-8") 
text = html[html.index("window._sharedData = ")+21:] 
text = (text[:text.index("};</script>")]+"}").replace('\\"', "") 
dictionary= loads(text) 
data = dictionary["entry_data"]["ProfilePage"][0]["user"] 

print "followers: "+str(data["followed_by"]["count"]) 

print data.keys()を印刷することにより、あなたはJavascript駆動型のWebプラットフォームをスクラップしたい場合は、実際には、まあユーザー

関連する問題