Instagram用于在端点https://www.instagram.com/<username>/?__a=1
下将开放数据公开为json。这改变了一夜,端点不再可用。什么是新的终点或什么可以替代它?
提前致谢!
答案 0 :(得分:18)
端点不再存在。由于丑闻,Facebook正在限制API。数据仍然存在,Instagram的前端需要它,所以现在的另一种选择是刮掉页面并在那里找到json数据。我是这样做的:
https://www.instagram.com/<username>
。script
标记哪个文字以window._sharedData =
开头。您可以使用正则表达式或抓取库。;
除外)是您想要的json数据。以下是使用Python的示例:
import requests
from bs4 import BeautifulSoup
import re
import json
r = requests.get('https://www.instagram.com/github/')
soup = BeautifulSoup(r.content)
scripts = soup.find_all('script', type="text/javascript", text=re.compile('window._sharedData'))
stringified_json = scripts[0].get_text().replace('window._sharedData = ', '')[:-1]
json.loads(stringified_json)['entry_data']['ProfilePage'][0]
Out[1]:
{u'graphql': {u'user': {u'biography': u'How people build software.',
u'blocked_by_viewer': False,
...
}
答案 1 :(得分:5)
如果您正在寻找正则表达式:
<script type="text\/javascript">window[.]_sharedData = {[\s\S]*};<\/script>
答案 2 :(得分:1)
您可以像 instagram-scraper 包那样创建会话。
您无需提供用户名和密码。下面的代码段将创建一个匿名会话。
import requests
import json
try:
from urllib.parse import urlparse
except ImportError:
from urlparse import urlparse
BASE_URL = 'https://www.instagram.com/'
CHROME_WIN_UA = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'
session = requests.Session()
session.headers = {'user-agent': CHROME_WIN_UA, 'Referer': BASE_URL}
session.cookies.set('ig_pr', '1')
req = session.get(BASE_URL)
session.headers.update({'X-CSRFToken': req.cookies['csrftoken']})
url = "https://www.instagram.com/instagram/?__a=1"
response = session.get(url, cookies="", headers={'Host': urlparse(url).hostname}, stream=False, timeout=90)
print(response.json())
答案 3 :(得分:0)
该端点仍然有效,但是您必须具有来自当前登录会话的有效cookie。
答案 4 :(得分:0)
https://www.instagram.com/<username>/?__a=1
有效,但您必须登录