如何使用Python传入Instagram用户名获取对应账号粉丝数并解决报错
报错原因
scrape_data函数中查找meta标签的property属性多写了空格,og : description应为og:description,导致BeautifulSoup找不到对应标签返回None,调用attrs属性直接触发报错- Instagram现在对未登录的公共请求做了限制,直接用requests请求个人主页拿不到完整的元数据,就算改对空格也大概率还是返回None
- 主逻辑中存在变量名错误,你将爬取结果存入了
follower_data变量,但实际取值时错写为follower["Followers"],follower是用户名字符串,不存在对应的键值
优化方案
你已经引入了instaloader库,完全可以直接用库自带的接口获取粉丝数,不需要额外写爬虫逻辑,稳定性更高,修复后的代码如下:
import instaloader L = instaloader.Instaloader() def get_followers(): # 登录你的Instagram账号 username = input("输入你的账号用户名: ") password = input("输入你的账号密码: ") L.login(username, password) # 获取你的账号元数据 profile = instaloader.Profile.from_username(L.context, username) follow_list = [] # 遍历获取所有粉丝的用户名 for followee in profile.get_followers(): follow_list.append(followee.username) return follow_list, username def get_user_follower_count(target_username): # 直接用instaloader接口获取目标账号的粉丝数 target_profile = instaloader.Profile.from_username(L.context, target_username) return target_profile.followers if __name__ == "__main__": list_of_followers, login_username = get_followers() result = {} for follower in list_of_followers: # 跳过自己的账号避免重复请求 if follower == login_username: continue follower_count = get_user_follower_count(follower) result[follower] = follower_count # 按粉丝数倒序排序,如果要升序删除reverse=True参数即可 result = dict(sorted(result.items(), key=lambda item: item[1], reverse=True)) n_input = int(input("你想要查看前多少名粉丝的排名?: ")) # 输出排名和对应的粉丝数 for idx, (username, count) in enumerate(list(result.items())[:n_input], 1): print(f"第{idx}名:{username},粉丝数:{count}")
注意事项
- 首次登录可能会触发Instagram的二次验证,按照命令行提示输入验证码即可
- 不要短时间内请求大量账号数据,避免被Instagram限制账号权限
内容的提问来源于stack exchange,提问作者ericbailey101
相关产品推荐
相关产品推荐

