CodeGym /Java 课程 /Python SELF ZH /使用 Selenium 提取文本和属性

使用 Selenium 提取文本和属性

Python SELF ZH
第 36 级 , 课程 2
可用

嘿,未来的自动化大师们!今天我们来学习如何通过 Selenium 提取网页中元素的文本和属性。这是一个非常强大的工具,因为在网页爬取的世界里,最重要的就是能获取数据。准备好从互联网的深渊中挖掘有用数据了吗?那么,开始吧!

1. 本讲座的主题是什么?

  • 数据提取基础:如何从 HTML 元素中提取文本,光听起来就像完成了一次壮举。
  • 获取属性:比如链接 (href) 和图片 (src) 这样的宝藏,学会之后你可以做一些神奇的事情。
  • 实际案例:我们将练习从网页中的表格和列表中提取数据。正如伟大的程序员曾经说过:"只有亲自操作代码,才能真正理解它。"

2. 从元素中提取文本

假设你有一个漂亮的网站,上面满是有用的信息。你需要从标题、段落和其他 HTML 元素中提取文本。怎么办呢?这时候 Selenium 就派上用场了。

示例

Python

from selenium import webdriver

# 配置 Chrome 驱动
driver = webdriver.Chrome()

# 打开网站
driver.get("https://example.com")

# 按类名查找元素并提取文本
element = driver.find_element_by_class_name("example-class")
text = element.text
print("提取的文本:", text)

# 别忘了关闭浏览器
driver.quit()

这里我们使用 .text 方法获取元素的文本内容。这比学习 Python 中所有异常都简单多了,是不是?

3. 从元素中提取属性

文本是很棒,但如果你需要提取更具体的东西,比如链接的 URL 或图片的路径,该怎么办呢?Selenium 也可以帮到你。

示例

Python

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://example.com")

# 使用 CSS 选择器查找元素并提取 'href' 属性
link_element = driver.find_element_by_css_selector("a.link-class")
link_href = link_element.get_attribute("href")
print("链接的 URL:", link_href)

# 按 ID 查找元素并提取 'src' 属性
img_element = driver.find_element_by_id("logo")
img_src = img_element.get_attribute("src")
print("图片的 URL:", img_src)

driver.quit()

如你所见,一切都和之前一样,只是我们用 .get_attribute("属性名") 替换了 .text。这些方法既简单又强大。

4. 在实践中应用这些方法

理论到此为止,因为程序员一般都不喜欢长时间停留在抽象层面上。现在我们来看一个例子,从网站的表格中提取数据。

从表格中提取数据

假如你需要从网站的表格中提取所有行并打印到控制台。可以这么实现:

Python

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://example.com")

# 按 ID 查找表格
table = driver.find_element_by_id("example-table")

# 查找表格中的所有行
rows = table.find_elements_by_tag_name("tr")

for row in rows:
    # 查找当前行中的所有单元格
    cells = row.find_elements_by_tag_name("td")
    for cell in cells:
        print(cell.text, end=' ')
    print()

driver.quit()

首先我们找到表格,然后遍历它的所有行和单元格,提取并打印它们的文本。这就像解开一个复杂的蜘蛛网,最终一切都变得简单明了!

5. 常见错误以及如何避免

在你进入提取数据的代码冒险之前,我们来谈谈可能会遇到的常见错误。

当你处理动态页面时,时间可能会成为你的敌人。如果你试图提取一个还未加载的元素的文本或属性,就会收到 NoSuchElementException 错误。这就像尝试在惊喜到来之前抓住它。为了避免这种情况,使用显式等待 (WebDriverWait),而不是依赖运气。

Python

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()

driver.get("https://example.com")

try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "lazy-class"))
    )
    print(element.text)
finally:
    driver.quit()

在这里,我们使用了 WebDriverWaitexpected_conditions 来等待元素加载。这就像等一道菜完全准备好,然后才能享受它的美味。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION