2016-05-12 64 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()您可以访问大量的详细信息,关于用户

相关问题