CodeGym /Java Adesua /Python SELF TW /透過 Selenium 提取文字和屬性

透過 Selenium 提取文字和屬性

Python SELF TW
等級 36 , 課堂 2
開放

嗨,未來的自動化高手們!今天我們要來學學如何透過 Selenium 提取網頁上的文字和元素屬性。這是一個非常強大的工具,畢竟在網頁爬蟲的世界裡,關鍵是學會如何拿到資料。準備好從網路的深淵中挖掘有用的資訊了嗎?那我們開始吧!

1. 這堂課在說些什麼?

  • 數據提取的基礎:如何從 HTML 元素中抽取文字,聽起來就像是個壯舉。
  • 獲取屬性:如何提取像連結 (href) 和圖片 (src) 這樣的好料,然後可以用它們做點驚人的事。
  • 實際案例:實踐中如何從網頁上的表格和清單提取數據。就像大師說的:「不動手寫程式碼就不算真正懂了」。

2. 從元素提取文字

假設你有一個超棒的網站,上面有一堆有用資訊。你需要從標題、段落以及其他 HTML 元素中提取文字,該怎麼做?別擔心,Selenium 前來救援。

範例

Python

from selenium import webdriver

# 設定 Chrome 的 driver
driver = webdriver.Chrome()

# 開啟網站
driver.get("https://example.com")

# 通過 class 找到元素並提取文字
element = driver.find_element_by_class_name("example-class")
text = element.text
print("提取的文字:", text)

# 別忘記關閉瀏覽器
driver.quit()

這裡我們使用了 .text 方法來獲取元素的文字內容。比記住 Python 的所有例外還簡單,對吧?

3. 從元素提取屬性

文字內容很棒,但如果你需要更特定的東西,例如連結的 URL 或圖片的 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()

可以看到,和前面一樣,只是把 .text 換成了 .get_attribute("屬性名稱") 方法。簡單易學,但功能非常強大。

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