2016-05-12 52 views
1

我正在嘗試自動獲得instagram帳戶的關注者數量。使用BeautifulSoup從Javascript中提取文本以獲取關注者數量

例如,https://www.instagram.com/taylorswift/

我曾嘗試使用圖書館像BeautifulSoup。然而,面臨的一個問題是,追隨者的數量是一個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.8米)我是Python和腳本編程的新手:/謝謝。

+0

嗯,其實,如果你想放棄一個Javascript驅動的Web平臺,你最好停止使用BeautifulSoup並啓動Selenium。 BeautifulSoup只是下載HTML頁面,而Selenium是模擬瀏覽器的完整框架。我推薦Selenium/PhantomJS。 –

+0

@ErdinEray謝謝你的建議,但是,BeautifulSoup有沒有可能的方法?我不太確定Instagram是否是一個JavaScript驅動的網絡平臺 – Bread

+0

不是通過BeautifulSoup的幫助,但您可能會嘗試進入* that * script標籤。然後,通過正則表達式的幫助找到你正在尋找的東西,也許呢?但是,像Instagram這樣的網絡平臺不會在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()您可以訪問大量的詳細信息,關於用戶