StaleElementReferenceException 不再是问题:Google Colab 上的 Selenium 技巧

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 在网页抓取中,Selenium面对动态页面时可能抛出`StaleElementReferenceException`。为解决这个问题,可以在Google Colab中使用显式等待、异常处理和代理IP。当元素变化时,通过WebDriverWait等待元素加载,捕获并重试`StaleElementReferenceException`异常。同时,利用亿牛云爬虫代理分散请求,防止频繁刷新导致异常。提供的Python代码示例展示了如何实现这一策略,从澎湃新闻网站抓取热点新闻。这种方法增强了爬虫的稳定性和效率。

爬虫代理.png

背景介绍

在现代网页数据抓取领域,Selenium 是一款强大的工具,它使得自动化浏览和数据提取变得异常简单。然而,当面对动态页面时,许多爬虫开发者常常会遇到一个令人头疼的问题——StaleElementReferenceException。这一异常的出现,往往会让我们的爬虫任务陷入停滞。今天,我们将在 Google Colab 环境中,结合代理 IP 技术,深入探讨如何有效解决这一问题,并以澎湃新闻的热点新闻页面为示例,进行实际操作。

问题陈述

StaleElementReferenceException 异常通常发生在尝试访问页面上已经发生变化或被更新的元素时。简单来说,当页面重新加载或部分内容更新时,之前定位到的元素引用就会失效,导致此异常的抛出。这对于动态页面的数据抓取尤为常见,且难以预测。

解决方案

为了解决这一问题,我们需要采取一些预防和恢复措施。具体步骤如下:

  1. 显式等待(Explicit Waits):等待元素加载或更新完毕,再进行下一步操作。
  2. 捕获异常并重试:在捕获到StaleElementReferenceException异常时,重新定位元素并重试操作。
  3. 代理 IP 技术:使用亿牛云爬虫代理来分散请求压力,避免频繁刷新页面。

以下是详细的实现代码,演示如何在 Google Colab 上使用 Selenium 和代理 IP 技术,并抓取澎湃新闻的热点新闻:

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.common.exceptions import StaleElementReferenceException
import time

# 设置代理信息 亿牛云爬虫代理加强版
proxy = "http://username:password@www.host.cn:8100"

# 配置Selenium使用代理
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(f'--proxy-server={proxy}')

# 启动浏览器
driver = webdriver.Chrome(options=chrome_options)

def fetch_hot_news(url):
    driver.get(url)


    try:
        # 显式等待,直到热点新闻元素加载完成
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, "//div[contains(@class, 'news-content')]/h2/a"))
        )
        # 返回热点新闻标题
        hot_news = [elem.text for elem in driver.find_elements(By.XPATH, "//div[contains(@class, 'news-content')]/h2/a")]
        return hot_news


    except StaleElementReferenceException as e:
        print("捕获到StaleElementReferenceException,重试中...")
        time.sleep(1)  # 等待一秒后重试
        return fetch_hot_news(url)


    except Exception as e:
        print(f"发生其他异常:{e}")


    finally:
        driver.quit()

# 测试函数
url = "https://www.thepaper.cn/"
hot_news = fetch_hot_news(url)
print(hot_news)

案例分析

在上面的代码中,我们首先配置了 Selenium 使用亿牛云的代理 IP。通过代理服务器,我们能够分散请求流量,减少对目标网站的访问压力,从而降低频繁更新页面的可能性。接下来,我们定义了一个 fetch_hot_news 函数,用于抓取澎湃新闻网站上的热点新闻标题。
在函数内部,我们使用显式等待确保热点新闻元素加载完毕,并在捕获到 StaleElementReferenceException 异常时,等待一秒后重新尝试抓取数据。这一措施有效地避免了因为元素更新导致的抓取失败。

结论

通过在 Google Colab 上结合使用 Selenium 和代理 IP 技术,我们成功地解决了 StaleElementReferenceException 异常的问题。这不仅提高了爬虫的稳定性,还增强了数据抓取的效率。希望这篇文章能够为你在处理动态页面抓取时提供实用的参考和帮助。

相关文章
|
6月前
|
Linux 异构计算 Docker
实战 Google Colab,一起用 GPU
实战 Google Colab,一起用 GPU
305 0
|
机器学习/深度学习 存储 数据挖掘
Google Colab:云端的Python编程神器
Google Colab,全名Google Colaboratory,是Google Research团队开发的一款云端编程工具,它允许任何人通过浏览器编写和执行Python代码。Colab尤其适合机器学习、数据分析和教育目的。它是一种托管式Jupyter笔记本服务,用户无需设置,就可以直接使用,同时还能获得GPU等计算资源的免费使用权限。
487 0
Google Colab:云端的Python编程神器
|
机器学习/深度学习 存储 Shell
分享使用谷歌Colab 常用小tips, 玩转Google Colab
分享使用谷歌Colab 常用小tips, 玩转Google Colab
分享使用谷歌Colab 常用小tips, 玩转Google Colab
|
6月前
|
API Go 网络架构
GEE Colab——如何从本地/Google云盘/Google Cloud Storage (GCS)上传和下载
GEE Colab——如何从本地/Google云盘/Google Cloud Storage (GCS)上传和下载
321 4
|
6月前
|
机器学习/深度学习 存储 人工智能
GEE Colab——初学者福音快速入门 Google Colab(Colaboratory)
GEE Colab——初学者福音快速入门 Google Colab(Colaboratory)
235 3
|
机器学习/深度学习 存储 Shell
Google Colab免费GPU大揭晓:超详细使用攻略
Google Colab免费GPU大揭晓:超详细使用攻略
|
Linux 应用服务中间件 TensorFlow
实战 Google Colab,一起用 GPU
今天一起来看看尝试下 Google Colab 工具,一款由 Google 出品,免费面向大众的、可使用 GPU、TPU 来训练模型的给力在线工具!!
实战 Google Colab,一起用 GPU
|
机器学习/深度学习 存储 数据采集
Google在线深度学习神器Colab
Colab是google最近推出的一项Python在线编程的免费服务, 有了它,不学Python编程的理由又少了一个 Colab环境已经集成了流行的深度学习框架Tensorflow,并附赠了一个虚拟机(40GB硬盘+2*2.
2899 0
|
6月前
|
数据可视化 定位技术 Sentinel
如何用Google Earth Engine快速、大量下载遥感影像数据?
【2月更文挑战第9天】本文介绍在谷歌地球引擎(Google Earth Engine,GEE)中,批量下载指定时间范围、空间范围的遥感影像数据(包括Landsat、Sentinel等)的方法~
2407 1
如何用Google Earth Engine快速、大量下载遥感影像数据?
|
6月前
|
编解码 人工智能 算法
Google Earth Engine——促进森林温室气体报告的全球时间序列数据集
Google Earth Engine——促进森林温室气体报告的全球时间序列数据集
86 0