
本文详细阐述了如何利用Selenium和Python高效地从动态加载的网页表格中抓取特定数据。教程聚焦于解决识别复杂HTML元素(如单个`
网页数据抓取:Selenium与Python实战指南
在进行网页数据抓取时,经常会遇到动态加载内容和复杂HTML结构的情况,这给传统的数据提取方法带来了挑战。本教程将以从金融网站抓取股票信息为例,详细介绍如何使用Selenium和Python克服这些难题,实现精准、高效的数据提取。
1. 初始化WebDriver与页面导航
首先,我们需要导入必要的Selenium模块,并初始化Chrome浏览器驱动。为了确保页面元素的完整显示,建议最大化浏览器窗口。
from selenium import webdriver from selenium.common.exceptions import NoSuchElementException, StaleElementReferenceException from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait import time # 定义目标URL url = 'https://www.tradingview.com/markets/stocks-turkey/market-movers-all-stocks/' # 初始化Chrome WebDriver driver = webdriver.Chrome() # 最大化浏览器窗口,有助于确保所有元素可见 driver.maximize_window() # 访问目标网页 driver.get(url)
2. 处理动态加载内容(“加载更多”按钮)
许多网站采用无限滚动或“加载更多”按钮来动态加载数据。为了获取所有数据,我们需要模拟点击这些按钮直到所有内容加载完毕。这里我们采用一个while循环,持续点击“Load More”按钮,直到按钮不再出现或变为陈旧(StaleElementReferenceException)。
立即学习“Python免费学习笔记(深入)”;
print("开始加载所有数据...")
while True:
try:
# 尝试查找并点击“Load More”按钮
# 使用text()函数定位包含特定文本的span元素
load_more_button = driver.find_element(By.XPATH, '//span[text()="Load More"]')
load_more_button.click()
# 添加一个短暂的等待,让页面有时间响应点击并加载新内容
time.sleep(0.5)
except StaleElementReferenceException:
# 当“Load More”按钮不再出现或其引用失效时,说明所有内容已加载,跳出循环
print("所有数据已加载或“加载更多”按钮已消失。")
break
except NoSuchElementException:
# 如果一开始就没有找到“Load More”按钮,或者所有数据加载完毕后按钮彻底消失,也跳出循环
print("未找到“加载更多”按钮,可能已加载完毕或页面结构不同。")
break
except Exception as e:
# 捕获其他可能的异常
print(f"点击“加载更多”时发生未知错误: {e}")
break注意事项:
- 上述代码利用StaleElementReferenceException和NoSuchElementException来判断“加载更多”按钮是否已完全消失或不可用。这是一种处理动态元素消失的健壮策略。
- 虽然time.sleep()在这里用于稍微等待页面响应,但在更复杂的场景中,推荐使用WebDriverWait等待特定元素出现或消失,以实现更精确的同步。
3. 精准提取表格数据
一旦所有数据加载完毕,下一步就是遍历表格行并提取所需的信息。目标网页的结构特点是,股票代码和名称可能嵌套在同一个
首先,使用WebDriverWait等待所有表格行可见,以确保页面加载稳定。
print("开始提取数据...")
# 初始化WebDriverWait,设置最大等待时间为10秒
wait = WebDriverWait(driver, 10)
# 等待所有具有特定CSS选择器的表格行可见
# 'table[class="table-Ngq2xrcG"] tr.listRow' 精确定位到表格主体内的每一行数据
rows = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,'table[class="table-Ngq2xrcG"] tr.listRow')))接下来,遍历每一行并提取数据。对于嵌套在单个
# 遍历每一行并提取数据
for i, row in enumerate(rows):
try:
# 提取股票代码:位于第一个内的标签文本
ticker_symbol = row.find_element(By.XPATH, './td[1]//a').text
# 提取股票名称:位于第一个 内的标签文本
ticker_name = row.find_element(By.XPATH, './td[1]//sup').text
# 提取价格:位于第二个的文本
ticker_price = row.find_element(By.XPATH, './td[2]').text
# 提取市值:位于第六个 的文本
ticker_marketcap = row.find_element(By.XPATH, './td[6]').text
# 提取行业:位于第十一个 内的标签文本
# 注意:某些行可能没有行业信息,需要使用try-except处理NoSuchElementException
try:
ticker_sector = row.find_element(By.XPATH, './td[11]/a').text
except NoSuchElementException:
ticker_sector = "—" # 如果没有找到,则设置为默认值
# 打印提取到的数据
print(f"{i+1}. {ticker_symbol} {ticker_name} {ticker_price} {ticker_marketcap} {ticker_sector}")
except Exception as e:
print(f"提取第 {i+1} 行数据时发生错误: {e}")
# 可以选择跳过此行或记录错误信息关键点解析:
相关文章
如何在 Selenium 中精准定位并提取非隐藏的表格行元素
如何使用 Beautiful Soup 正确提取网页中的所有分类链接
Python爬虫解析HTML技巧_xpath与css选择器对比【教程】
Python表单自动填写_web驱动模拟操作技巧【指导】
Python自动化脚本项目中爬取网页数据的操作步骤【教程】
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
更多
相关专题
更多
chrome什么意思
chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。
831
2023.08.11
chrome无法加载插件怎么办
chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。
743
2023.11.06
while的用法
while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。
94
2023.09.25
俄罗斯Yandex引擎入口
2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。
165
2026.01.28
包子漫画在线官方入口大全
本合集汇总了包子漫画2026最新官方在线观看入口,涵盖备用域名、正版无广告链接及多端适配地址,助你畅享12700+高清漫画资源。阅读专题下面的文章了解更多详细内容。
34
2026.01.28
ao3中文版官网地址大全
AO3最新中文版官网入口合集,汇总2026年主站及国内优化镜像链接,支持简体中文界面、无广告阅读与多设备同步。阅读专题下面的文章了解更多详细内容。
73
2026.01.28
php怎么写接口教程
本合集涵盖PHP接口开发基础、RESTful API设计、数据交互与安全处理等实用教程,助你快速掌握PHP接口编写技巧。阅读专题下面的文章了解更多详细内容。
2
2026.01.28
Java 消息队列与异步架构实战
本专题系统讲解 Java 在消息队列与异步系统架构中的核心应用,涵盖消息队列基本原理、Kafka 与 RabbitMQ 的使用场景对比、生产者与消费者模型、消息可靠性与顺序性保障、重复消费与幂等处理,以及在高并发系统中的异步解耦设计。通过实战案例,帮助学习者掌握 使用 Java 构建高吞吐、高可靠异步消息系统的完整思路。
8
2026.01.28
热门下载
更多
相关下载
更多
精品课程
更多
相关推荐 /
热门推荐 /
最新课程
最新文章
更多
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号


