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

使用Selenium提取HTML页面中指定前缀的链接并存储到数组

提取Instagram帖子链接的正确实现方法

嘿,我来帮你搞定这个问题!先看看你现有代码的问题:

  • src是字符串类型,它本身没有findall方法,findall是Python正则模块re里的函数;
  • 你刚给tag赋值后又立刻把它设为空数组,这肯定得不到任何结果呀。

下面给你几种可靠的实现方式,你可以根据自己的需求选择:

方法1:直接用Selenium定位a标签筛选(最推荐)

这种方法直接和页面元素交互,能精准获取页面上可点击的帖子链接,还能轻松适配动态加载的内容:

from selenium import webdriver
from selenium.webdriver.common.by import By

# 初始化浏览器(这里以Chrome为例,确保你已配置好对应版本的ChromeDriver)
browser = webdriver.Chrome()
browser.get("你要爬取的目标页面URL")

# 初始化存储链接的数组
instagram_post_links = []

# 获取页面上所有带href属性的<a>标签
all_a_tags = browser.find_elements(By.TAG_NAME, "a")

for tag in all_a_tags:
    href = tag.get_attribute("href")
    # 检查链接是否符合前缀要求,并且不为空
    if href and href.startswith("https://instagram.com/p/"):
        # 去重,避免重复添加同一链接
        if href not in instagram_post_links:
            instagram_post_links.append(href)

# 输出结果
print(instagram_post_links)

# 关闭浏览器
browser.quit()

方法2:用正则表达式匹配页面源码

如果页面里的链接没有都放在a标签里(这种情况很少见),可以用正则直接从页面源码中提取:

import re
from selenium import webdriver

browser = webdriver.Chrome()
browser.get("你要爬取的目标页面URL")

# 获取页面源码
page_source = browser.page_source

# 正则匹配符合格式的Instagram帖子链接
# 正则解释:匹配以https://instagram.com/p/开头,后面跟着字母、数字、下划线或短横线的内容
pattern = r"https://instagram\.com/p/[a-zA-Z0-9-_]+"
instagram_post_links = re.findall(pattern, page_source)

# 去重处理
instagram_post_links = list(set(instagram_post_links))

print(instagram_post_links)
browser.quit()

方法3:结合BeautifulSoup解析HTML

如果你习惯用BeautifulSoup处理HTML,这种方法可读性更强,还能自动处理相对路径的情况:

from selenium import webdriver
from bs4 import BeautifulSoup

browser = webdriver.Chrome()
browser.get("你要爬取的目标页面URL")

page_source = browser.page_source
# 用BeautifulSoup解析页面
soup = BeautifulSoup(page_source, "html.parser")

instagram_post_links = []

# 遍历所有带href属性的a标签
for a_tag in soup.find_all("a", href=True):
    href = a_tag["href"]
    # 处理绝对路径链接
    if href.startswith("https://instagram.com/p/"):
        if href not in instagram_post_links:
            instagram_post_links.append(href)
    # 处理相对路径链接(比如"/p/xxxxxx")
    elif href.startswith("/p/"):
        full_link = "https://instagram.com" + href
        if full_link not in instagram_post_links:
            instagram_post_links.append(full_link)

print(instagram_post_links)
browser.quit()

额外提示

  • 如果页面是滚动加载的(比如Instagram首页需要滚动才能加载更多帖子),你需要先实现滚动逻辑,把所有内容加载出来再提取链接;
  • 记得定期检查ChromeDriver和你的Chrome浏览器版本是否匹配,避免出现驱动错误;
  • 频繁爬取可能触发Instagram的反爬机制,建议添加适当的延时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:54:31