Selenium爬取Instagram标签仅返回20条帖子链接问题求助
解决Instagram标签页仅获取20条帖子链接的问题
核心修改点:
精准定位帖子链接
原代码通过By.TAG_NAME, 'a'抓取所有<a>标签,会混入导航栏、标签介绍等非帖子链接,且容易遗漏加载后的新帖子。改用CSS选择器div._aabd._aa8k._aanf a直接定位帖子缩略图的容器链接(若Instagram页面结构更新,可通过浏览器开发者工具重新获取对应选择器),只抓取有效帖子链接。修复列表拼接错误
原代码中links.append(slinks)会把新获取的链接列表作为单个元素嵌套进主列表,导致后续遍历筛选时出错。改为links.extend(slinks),将新链接直接追加到主列表中。替换固定等待为显式等待
固定time.sleep()无法适配不同网络下的加载速度,改用WebDriverWait等待新帖子元素加载完成,直到页面中帖子数量超过当前已抓取的数量,确保新内容加载后再抓取,避免漏抓。优化滚动触发逻辑
原固定距离滚动可能无法触发Instagram的无限加载机制,改为滚动到页面底部window.scrollTo(0, document.body.scrollHeight);,确保触发新帖子的加载请求。提前去重减少无效数据
每次抓取链接后通过集合去重,避免重复添加同一帖子链接,提升后续处理效率。
修改后的完整代码:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import random import pandas as pd import time for tag in tags: address = f'https://www.instagram.com/explore/tags/{tag}/' driver.get(address) # 等待初始帖子加载完成 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "div._aabd._aa8k._aanf a")) ) # 初始抓取帖子链接并去重 alinks = driver.find_elements(By.CSS_SELECTOR, "div._aabd._aa8k._aanf a") links = list({link.get_attribute('href') for link in alinks if link.get_attribute('href').startswith('https://www.instagram.com/p/')}) # 设置滚动加载次数,可根据需求调整 scroll_count = 3 for _ in range(scroll_count): # 滚动到页面底部触发加载 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 等待新帖子加载完成,直到帖子数量增加 WebDriverWait(driver, 12).until( lambda d: len(d.find_elements(By.CSS_SELECTOR, "div._aabd._aa8k._aanf a")) > len(links) ) # 随机等待避免反爬检测 time.sleep(random.randint(2, 5)) # 抓取新链接并合并去重 new_alinks = driver.find_elements(By.CSS_SELECTOR, "div._aabd._aa8k._aanf a") new_links = [link.get_attribute('href') for link in new_alinks if link.get_attribute('href').startswith('https://www.instagram.com/p/')] links = list(set(links + new_links)) # 转换为DataFrame并输出 df = pd.DataFrame(links, columns=['post_url']) print(df)
内容的提问来源于stack exchange,提问作者Tim Vowden
相关产品推荐
相关产品推荐

