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
相关产品推荐
相关产品推荐

