如何用BeautifulSoup获取Instagram个人主页的简介内容?
问题解决方法
一、爬虫返回空列表的原因与解决
Instagram个人主页内容是动态渲染的,你用urlopen获取的只是页面初始静态HTML,带_aacl _aacp _aacu _aacx _aad6 _aade类的元素是通过JavaScript动态加载的,所以BeautifulSoup在静态源码里找不到它们。
解决思路1:解析页面内嵌的JSON数据
Instagram会把用户核心信息(包括简介)打包在页面的特定script标签里,直接提取JSON就能获取数据,无需依赖动态渲染。示例代码:
from urllib.request import urlopen import json from bs4 import BeautifulSoup userpage = urlopen("https://instagram.com/tarantinoxx/") bs = BeautifulSoup(userpage, "lxml") # 尝试提取application/ld+json格式的用户数据 script_tag = bs.find('script', type='application/ld+json') if script_tag: user_data = json.loads(script_tag.string) bio = user_data.get('description') print(bio) else: # 若上面的标签不存在,尝试__NEXT_DATA__标签 next_data = bs.find('script', id='__NEXT_DATA__') if next_data: data = json.loads(next_data.string) bio = data['props']['pageProps']['user']['biography'] print(bio)
解决思路2:用Selenium模拟浏览器加载
如果JSON方法失效,可通过Selenium模拟真实浏览器加载页面,等动态内容渲染完成后抓取:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() # 需提前安装ChromeDriver并配置环境变量 driver.get("https://instagram.com/tarantinoxx/") # 等待简介元素加载完成 bio_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, "_aacl._aacp._aacu._aacx._aad6._aade")) ) print(bio_element.text) driver.quit()
二、Instagram API注册与使用
Instagram API已整合进Meta Graph API,操作步骤如下:
- 注册Meta开发者账号:用Facebook账号登录Meta开发者平台,完成身份验证(填写基础信息,验证邮箱/手机号)。
- 创建应用:在后台点击"创建应用",选择"消费者"类型(个人使用选此),填写应用名称、联系邮箱完成创建。
- 添加Instagram产品:在应用产品列表中找到"Instagram Graph API"并添加,关联你的Instagram账号(需为业务账号,无则可将个人账号转为业务账号)。
- 申请权限:根据需求申请
user_profile等权限(用于获取用户简介、头像等基础信息)。 - 获取访问令牌:通过平台工具生成短期访问令牌,或通过OAuth流程生成长期令牌,之后即可调用API接口获取数据。
注意:API调用有速率限制,需遵守Meta开发者条款,避免违规导致账号受限。
内容的提问来源于stack exchange,提问作者Deivid Willy
相关产品推荐
相关产品推荐

