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

Python抓取Instagram指定账号所有帖子点赞数及平均点赞计算实现问询

Instagram账号全帖点赞批量获取与平均计算实现方案

核心实现逻辑

  • 解决Instagram主页帖子动态加载问题:模拟页面滚动,逐步加载所有帖子并收集帖子链接
  • 遍历所有收集到的帖子链接,逐个访问解析点赞数据
  • 兼容图文、视频类帖子的点赞数取值逻辑,处理异常跳过无效数据
  • 汇总所有有效点赞数据,直接计算单帖平均点赞量

修改后完整可运行代码

# 导入依赖包
import requests
import selenium
from selenium import webdriver
import pandas as pd
import time
# selenium 4.x版本需要额外导入By
# from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup

# 初始化浏览器驱动
driver = webdriver.Chrome(ChromeDriverManager().install())
# 手动输入要爬取的账号主页URL
target_url = input("请输入Instagram账号主页URL:")
driver.get(target_url)

# 等待15秒,预留时间手动登录Instagram账号(未登录只能爬取前12条帖子)
time.sleep(15)

# 获取账号基础信息
# selenium 4.x版本写法:driver.find_element(By.XPATH, 'xxx').text
Username = driver.find_element_by_xpath('/html/body/div[1]/section/main/div/header/section/div[1]/h2').text
Type = driver.find_element_by_xpath('/html/body/div[1]/section/main/div/div[1]/div').text
Posts = driver.find_element_by_xpath('/html/body/div[1]/section/main/div/ul/li[1]').text
Followers = driver.find_element_by_xpath('/html/body/div[1]/section/main/div/ul/li[2]').text
Following = driver.find_element_by_xpath('/html/body/div[1]/section/main/div/ul/li[3]').text

# 滚动加载所有帖子,收集帖子链接
post_links = set()
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
    # 提取当前可见区域的所有帖子链接
    posts = driver.find_elements_by_xpath('//a[contains(@href, "/p/")]')
    for post in posts:
        post_links.add(post.get_attribute('href'))
    # 滚动到页面底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)
    new_height = driver.execute_script("return document.body.scrollHeight")
    # 滚动后高度不变说明已经加载完全部帖子
    if new_height == last_height:
        break
    last_height = new_height

# 遍历所有帖子获取点赞数
like_list = []
for post_url in post_links:
    driver.get(post_url)
    time.sleep(2)
    try:
        # 优先提取图文帖点赞数
        like_text = driver.find_element_by_xpath('//section[2]/div/div/button/span').text
        like_num = int(like_text.replace(',', ''))
        like_list.append(like_num)
    except:
        # 兼容视频帖点赞数提取
        try:
            # 点击播放数区域展开点赞数
            driver.find_element_by_xpath('//section[2]/div/div/span').click()
            time.sleep(1)
            like_text = driver.find_element_by_xpath('//div[@role="dialog"]//div/span').text
            like_num = int(like_text.replace(',', ''))
            like_list.append(like_num)
        except:
            print(f"帖子{post_url}点赞数获取失败,已跳过")
            continue

# 计算统计数据
total_like = sum(like_list)
valid_post_count = len(like_list)
avg_like = round(total_like / valid_post_count, 2) if valid_post_count > 0 else 0

# 输出所有结果
print("="*30)
print(f"账号用户名:{Username}")
print(f"账号类型:{Type}")
print(f"总发帖数:{Posts}")
print(f"粉丝数:{Followers}")
print(f"关注数:{Following}")
print(f"有效爬取帖子数:{valid_post_count}")
print(f"总点赞数:{total_like}")
print(f"单帖平均点赞数:{avg_like}")
print("="*30)

# 关闭浏览器
driver.quit()

注意事项

  • Selenium版本兼容:如果使用Selenium 4.x版本,需要取消代码中from selenium.webdriver.common.by import By的注释,并将所有find_element_by_xpath替换为find_element(By.XPATH, '对应xpath路径')
  • 反爬规避:Instagram反爬机制严格,代码中已经设置了默认加载等待时间,不要随意调小间隔,频繁请求会触发IP临时封禁或账号限流
  • 权限问题:未登录状态下仅能访问公开账号的前12条帖子,要爬取全部帖子需要先登录自己的Instagram账号
  • 数据异常处理:部分仅对粉丝可见的帖子、已删除的帖子会跳过,统计结果会标注有效爬取的帖子数

内容的提问来源于stack exchange,提问作者Seif Mahdi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:21:01