Python - 从 Instagram 视频中抓取视图计数,加载到 JSON 格式
Posted
技术标签:
【中文标题】Python - 从 Instagram 视频中抓取视图计数,加载到 JSON 格式【英文标题】:Python - Scrape Views Count from Instagram Video, load to JSON format 【发布时间】:2017-06-16 11:51:00 【问题描述】:我想收集 Instagram 上特定视频的观看次数。我对 python 比较陌生,但我猜必须有一种方法可以在源代码中找到视图。
https://www.instagram.com/p/BOTU6rJhShv/ 是我一直在使用的一个视频。在撰写本文时,它有 1759 次浏览。查看源代码,1759 被明确列为类字典元素内的“video_views”:
这个元素位于页面标签的深处。根据我的阅读,数据目前以 javascript 形式组织,应转换为 JSON 以在 python 中使用。这是我目前所拥有的:
import json
import re
from urllib.request import urlopen
from bs4 import BeautifulSoup as bs
page = urlopen('https://www.instagram.com/p/BOTU6rJhShv/')
soup = bs(page.read(),"html.parser")
body = soup.find('body','class':'')
script = body.find('script','type':'text/javascript')
print(script)
由于我在底部打印了脚本的结果,因此我知道这在我想要关注的页面部分上有所体现。如果我可以将该信息读入python,我可以遍历它找到“video_views”键,但这就是我卡住的地方。如何将脚本标签之间的信息转换为 JSON 格式并加载到 python 中?
【问题讨论】:
【参考方案1】:好吧,既然格式总是一样的,你可以简单地这样做:
data = json.loads(script.text.replace('window._sharedData = ', '')[:-1])
更新:(我用的是python 2.7,所以改用urllib2.urlopen
)
我确实从这段代码中得到了一致的输出:
import json
import re
import urllib2
from bs4 import BeautifulSoup as bs
page = urllib2.urlopen('https://www.instagram.com/p/BOTU6rJhShv/')
soup = bs(page.read(),"html.parser")
body = soup.find('body','class':'')
script = body.find('script','type':'text/javascript')
data = json.loads(script.text.replace('window._sharedData = ', '')[:-1])
print data
print data['entry_data']['PostPage'][0]['media']['video_views']
目前video_views
是 1759。
【讨论】:
检查我的更新,我确实得到了一致的结果,我可以知道你有什么不同的结果吗?以上是关于Python - 从 Instagram 视频中抓取视图计数,加载到 JSON 格式的主要内容,如果未能解决你的问题,请参考以下文章