You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Selenium无法获取Instagram评论的href属性求助

Instagram评论及回复唯一ID爬取故障排查

我需要快速完成任务,没时间学习HTML,现在用Python Selenium爬取Instagram账号weareone.exo的最新及指定时间内帖子,要获取评论和回复的href属性来得到唯一comment ID,避免后续分析重复。试过CLASS_NAME、XPATH、CSS_SELECTOR三种定位方式都没成功。

目前代码只能爬取[instagram_url]/p/CqhlzLmpfKV/#,无法获取带唯一ID的完整链接(比如主评论的[instagram_url]/p/CqhlzLmpfKV/c/17979860159080809/或回复的[instagram_url]/p/CqhlzLmpfKV/c/17979860159080809/r/18078377977318895/)。

当前代码

driver.get("https://www.instagram.com/weareone.exo/")

latest_post = WebDriverWait(driver, timeout=40).until(lambda d: d.find_element(By.CLASS_NAME,"_aabd"))
latest_post.click()

comment_ids = []

load_more_path = "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/div[1]/ul/li/div"

# "Load more comments" until 2 clicks
while i<3:
    try:
        WebDriverWait(driver, timeout=20).until(EC.element_to_be_clickable((By.XPATH, load_more_path))).click()
        time.sleep(1.42)
                
    except:
        print("No more 'LOAD MORE COMMENTS' button to be clicked")
        break
    
# "View Replies" if there's any
view_reply_path = 'li > ul > li > div > button[class="_acan _acao _acas _aj1-"]'

WebDriverWait(driver, timeout=20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, view_reply_path)))
view_reply_buttons = driver.find_elements(By.CSS_SELECTOR, view_reply_path)

for button in range(len(view_reply_buttons)):
    view_reply_buttons[button].click()
    time.sleep(1.32)

time.sleep(5.8)
comment = driver.find_elements(By.CLASS_NAME, "_a9zj")

for c in comment:
    container = c.find_element(By.CLASS_NAME,'_a9zr')

    WebDriverWait(driver, timeout=20).until(EC.element_to_be_clickable((By.XPATH, '//div[2]/div/a')))
    commentid = c.find_element(By.XPATH, '//div[2]/div/a').get_attribute("href")
  
    comment_ids.append(commentid)

    print(commentid)

当前输出

[instagram_url]/p/CqhlzLmpfKV/# 
[instagram_url]/p/CqhlzLmpfKV/# 
[instagram_url]/p/CqhlzLmpfKV/#
..
..
..
[instagram_url]/p/CqhlzLmpfKV/# 
[instagram_url]/p/CqhlzLmpfKV/# 
[instagram_url]/p/CqhlzLmpfKV/#

解决方案

核心问题是XPATH全局定位错误:你使用的//div[2]/div/a是从整个文档根节点开始查找,每次都会返回第一个匹配的元素(即帖子本身的链接),而非当前评论容器内的链接。

具体修正步骤:

  1. 将XPATH改为相对路径,在开头添加.,表示从当前评论元素c内部查找:.//div[2]/div/a
  2. 补充加载更多逻辑中缺失的i变量初始化和循环递增,否则加载更多的循环会无限执行或直接跳过
  3. 给“查看回复”逻辑添加异常捕获,避免没有回复按钮时代码报错中断
  4. 可以用更精准的定位规则直接筛选带评论ID的链接:.//a[contains(@href, '/c/')],确保只抓取包含评论ID的href

修改后的关键代码片段:

# 补充i变量初始化
i = 0
while i<3:
    try:
        WebDriverWait(driver, timeout=20).until(EC.element_to_be_clickable((By.XPATH, load_more_path))).click()
        time.sleep(1.42)
        i += 1  # 添加循环递增
    except:
        print("No more 'LOAD MORE COMMENTS' button to be clicked")
        break

# 给查看回复添加异常捕获
try:
    WebDriverWait(driver, timeout=20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, view_reply_path)))
    view_reply_buttons = driver.find_elements(By.CSS_SELECTOR, view_reply_path)
    for button in view_reply_buttons:
        button.click()
        time.sleep(1.32)
except:
    print("No view reply buttons found")

# 修正评论链接定位
for c in comment:
    # 直接定位带评论ID的链接
    comment_link = WebDriverWait(c, timeout=20).until(
        EC.presence_of_element_located((By.XPATH, './/a[contains(@href, "/c/")]'))
    )
    commentid = comment_link.get_attribute("href")
    comment_ids.append(commentid)
    print(commentid)

注意:Instagram的页面类名(如_a9zj、_a9zr)会不定期更新,若后续定位失效,需重新检查页面元素的最新类名或属性。

内容的提问来源于stack exchange,提问作者June W.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 21:57:52