如何使用InstaGrapi爬取用户数据及用户名
问题分析与修正方案
你的代码存在多处逻辑错误,导致无法正确获取is_private、is_verified等用户字段:
- API调用参数错误:
User = cl.user_info_by_username(username=str)传入str类型而非具体用户名,后续cl.user_info_by_username([0])传入列表,均不符合接口参数要求。 - 遍历逻辑混乱:
cl.user_followers()返回的是{用户ID: UserShort对象}的字典结构,直接遍历即可获取用户基础信息,无需重复调用API。 - 文件写入模式错误:使用
"w"模式每次循环都会清空文件,应改为"a"追加模式,或一次性打开文件完成所有写入操作。
修正后的代码
from instagrapi import Client cl = Client() cl.login("your_username", "your_password") def scrapeusers(): target = input("请输入要爬取的目标用户名: ") userid = cl.user_id_from_username(target) amt = int(input("请输入要爬取的粉丝数量: ")) # 获取粉丝列表,返回{user_id: UserShort}格式的字典 scraped_followers = cl.user_followers(user_id=userid, amount=amt) # 以追加模式打开文件,指定utf-8编码避免乱码 with open("users.txt", "a", encoding="utf-8") as outfile: # 直接遍历所有粉丝的UserShort对象 for user in scraped_followers.values(): # 提取需要的字段并格式化 user_info = ( f"用户名: {user.username}, " f"是否私密账号: {user.is_private}, " f"是否认证: {user.is_verified}, " f"昵称: {user.full_name}" ) outfile.write(user_info + "\n") scrapeusers()
关键说明
cl.user_followers()返回的UserShort对象本身已包含username、is_private、is_verified等基础字段,无需额外调用user_info_by_username;若需更详细的用户数据,可通过cl.user_info(user.id)获取完整用户对象。- 使用
values()直接遍历粉丝对象,跳过不必要的用户ID键值对。 - 若想一次性写入所有数据减少IO操作,可先将所有用户信息存入列表,最后统一写入文件。
内容的提问来源于stack exchange,提问作者nathan
相关产品推荐
相关产品推荐

