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 格式的主要内容,如果未能解决你的问题,请参考以下文章

python 从instagram链接中提取视频或图像

从 API 检索 Instagram 视频嵌入 URL

从 iOS 将视频分享到 Instagram 源

如何直接从复制或分享 URL 中获取 Instagram 图片或视频 URL?

在 Instagram 上发布视频

Instagram API 权限被拒绝 - 无效用例?