Python抓取文章分享数受限且缓慢,咨询Facebook API认证方式
Facebook API 获取文章分享数的令牌与认证指南
嘿,针对你用Python抓取文章Facebook分享数遇到的问题,我来给你详细解答:
1. 应该用应用访问令牌还是用户访问令牌?
肯定是应用访问令牌!因为你只是获取公开的文章分享数据,不需要访问用户的私有内容。应用令牌的优势很明显:
- 不需要用户授权登录,直接用应用的ID和密钥生成
- 稳定性高,除非你修改了应用密钥,否则不会过期
- 权限足够满足获取公开分享数的需求
用户访问令牌一般用于需要用户授权的场景(比如读取用户的个人动态),完全不适合你的需求。
2. 如何进行认证?
获取应用访问令牌超简单:
- 先去Facebook开发者平台创建/找到你的应用,拿到
app_id和app_secret - 直接把两者用竖线拼接:
{app_id}|{app_secret},这就是你的应用访问令牌了,不需要额外发请求去获取
3. 是否需要将令牌附加在URL中?
必须要!现在Facebook API的所有公开请求都要求携带访问令牌,无令牌的请求会被严格限流(这就是你之前速度慢的核心原因之一),甚至直接返回权限错误。
4. 修改后的代码示例
把令牌加入请求URL,同时优化错误处理,避免因数据结构异常报错:
import requests import json # 替换成你的目标文章URL、应用ID和密钥 target_url = "https://example.com/your-article" app_id = "你的Facebook应用ID" app_secret = "你的Facebook应用密钥" access_token = f"{app_id}|{app_secret}" try: # 拼接带令牌的请求URL graph_url = f'https://graph.facebook.com/?id={target_url}&access_token={access_token}' response = requests.get(graph_url, timeout=30) response.raise_for_status() # 捕获HTTP请求错误(比如403、500) data = response.json() # 直接用response.json()更简洁 if "share" in data and "share_count" in data["share"]: share_count = str(data["share"]["share_count"]) print(f"文章分享数:{share_count}") else: print("未查询到该文章的分享数据") except requests.exceptions.RequestException as e: print(f"请求失败:{str(e)}") except KeyError: print("返回数据格式异常,未找到分享数字段")
额外提示
- 确保你的Facebook应用处于正常状态(未被封禁、审核通过),否则令牌会失效
- 应用令牌虽然权限低,但也要妥善保管,不要泄露给他人
- 加令牌后请求频率限制会宽松很多,速度会明显提升
内容的提问来源于stack exchange,提问作者AnOko
相关产品推荐
相关产品推荐

