0

0

如何使用 Selenium(Python)精准提取网页中特定结构的链接

碧海醫心

碧海醫心

发布时间:2026-01-10 16:55:04

|

882人浏览过

|

来源于php中文网

原创

如何使用 Selenium(Python)精准提取网页中特定结构的链接

本文介绍如何利用 selenium 4.8 配合显式等待和 xpath 定位,从嵌套 html 列表(`

  • `)中批量提取目标 `` 标签的 `href` 属性,生成可迭代的 url 列表。

    在 Web 自动化与数据采集场景中,精准定位并提取结构化链接是常见需求。当目标链接深嵌于多层容器(如

  • )且页面存在动态加载时,直接使用 find_elements() 易因元素未就绪而失败。此时应结合 显式等待(WebDriverWait)高精度 XPath 表达式,确保稳定获取。

    以下为完整、健壮的实现方案:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.chrome.options import Options
    
    # 初始化 WebDriver(以 Chrome 为例)
    chrome_options = Options()
    chrome_options.add_argument("--headless")  # 无头模式,可选
    driver = webdriver.Chrome(options=chrome_options)
    
    try:
        driver.get("https://example.com")  # 替换为目标网址
    
        # 显式等待:最多等待 25 秒,直到所有匹配的 <a> 元素出现在 DOM 中
        wait = WebDriverWait(driver, 25)
        link_elements = wait.until(
            EC.presence_of_all_elements_located(
                (By.XPATH, '//li//h4[@class="programme titles"]/a[@class="br-blocklink__link"]')
            )
        )
    
        # 提取所有 href 属性,过滤掉 None 值(避免空链接)
        href_list = [elem.get_attribute("href") for elem in link_elements if elem.get_attribute("href")]
    
        print(f"成功提取 {len(href_list)} 个有效链接:")
        for i, url in enumerate(href_list, 1):
            print(f"{i}. {url}")
    
        # 后续可遍历处理每个链接,例如:
        # for url in href_list:
        #     driver.get(url)
        #     # ... 解析详情页内容
    
    finally:
        driver.quit()  # 确保资源释放

    关键要点说明:

    What-the-Diff
    What-the-Diff

    检查请求差异,自动生成更改描述

    下载
    • XPath 精准性://li//h4[@class="programme titles"]/a[@class="br-blocklink__link"] 使用 // 跳过中间层级,@class 精确匹配,避免因多余空格或动态类名(如 xxx)导致误匹配;若 class 含多个值(如 "programme titles active"),建议改用 contains(@class, 'programme titles')。
    • 显式等待优于隐式等待:presence_of_all_elements_located 确保元素已加载进 DOM(不保证可见或可点击),适合链接提取;如需交互,可换用 element_to_be_clickable。
    • 健壮性增强:添加 if elem.get_attribute("href") 过滤空值,防止后续操作报错。
    • 资源管理:务必在 finally 块中调用 driver.quit(),避免浏览器进程残留。

    ⚠️ 注意:Selenium 不适用于大规模静态爬取(推荐 Requests + BeautifulSoup);若目标网站反爬严格,请配合 User-Agent 轮换、合理延时及遵守 robots.txt。

    立即学习Python免费学习笔记(深入)”;

  • 热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    Python爬虫获取数据的方法
    Python爬虫获取数据的方法

    Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

    293

    2023.11.13

    if什么意思
    if什么意思

    if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

    846

    2023.08.22

    class在c语言中的意思
    class在c语言中的意思

    在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

    870

    2024.01.03

    python中class的含义
    python中class的含义

    本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

    30

    2025.12.06

    DOM是什么意思
    DOM是什么意思

    dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

    4327

    2024.08.14

    li是什么元素
    li是什么元素

    li是HTML标记语言中的一个元素,用于创建列表。li代表列表项,它是ul或ol的子元素,li标签的作用是定义列表中的每个项目。本专题为大家li元素相关的各种文章、以及下载和课程。

    436

    2023.08.03

    PHP 命令行脚本与自动化任务开发
    PHP 命令行脚本与自动化任务开发

    本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

    66

    2025.12.13

    C# ASP.NET Core微服务架构与API网关实践
    C# ASP.NET Core微服务架构与API网关实践

    本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

    9

    2026.03.11

    Go高并发任务调度与Goroutine池化实践
    Go高并发任务调度与Goroutine池化实践

    本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

    22

    2026.03.10

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    最新Python教程 从入门到精通
    最新Python教程 从入门到精通

    共4课时 | 22.5万人学习

    Django 教程
    Django 教程

    共28课时 | 4.9万人学习

    SciPy 教程
    SciPy 教程

    共10课时 | 1.9万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号