Salam, gələcəyin avtomatlaşdırma ustaları! Bu gün öyrənəcəyik ki, Selenium vasitəsilə veb-səhifədəki mətni və atributları necə çıxarmaq olar. Bu, sizin arsenalınızda güclü bir vasitədir, çünki veb-scraping dünyasında əsas məsələ informasiyanı çıxarmağı bacarmaqdır. İnternetin dərinliklərindən faydalı məlumatları çıxarmağa hazırsınız? Onda başlayaq!
1. Bu mühazirə haqqında nə bilmək olar?
- Veri çıxarma əsasları: HTML elementlərindən mətnləri necə çıxarmağı öyrənəcəyik, bu da özü-özlüyündə əla bir işdir.
- Atributların alınması: Belə dadlı elementləri necə çıxarmağı öyrənəcəyik, məsələn, linklər
(href)
və şəkillər(src)
, ki daha sonra onlarla inanılmaz işlər görə bilək. - Həyatdan nümunələr: Təcrübədə veb-səhifədəki cədvəllərdən və siyahılardan məlumatları çıxarmağa çalışacağıq. Böyük proqramçı demişkən: "Kodu əllərində hiss etmədən tam başa düşmədin".
2. Elementlərdən mətn çıxarma
Beləliklə, təsəvvür edin ki, çoxlu faydalı məlumatla dolu gözəl bir veb-saytınız var. Sizə başlıqlar, paraqraflar və digər HTML elementləri kimi hissələrdən mətni çıxarmaq lazımdır. Necə edəcəyik? Burada Selenium köməyə gəlir.
Nümunə
from selenium import webdriver
# Chrome üçün driver-i tənzimləyirik
driver = webdriver.Chrome()
# Saytı açırıq
driver.get("https://example.com")
# Elementi class adı ilə tapıb mətn çıxarırıq
element = driver.find_element_by_class_name("example-class")
text = element.text
print("Çıxarılan mətn:", text)
# Brauzeri bağlamağı unutmayın
driver.quit()
Burada elementin mətn məzmununu əldə etmək üçün .text
metodundan istifadə edirik. Python-dakı bütün istisnaları yadda saxlamaqdan daha asandır, elə deyilmi?
3. Elementlərdən atributların əldə edilməsi
Text — bu əladır, amma əgər daha spesifik bir şey, məsələn, linkin URL-i və ya şəkil linki əldə etmək lazımdırsa nə etməli? Selenium burada da sizi tək buraxmayacaq.
Nümunə
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com")
# CSS selector vasitəsilə elementi tapırıq və 'href' atributunu əldə edirik
link_element = driver.find_element_by_css_selector("a.link-class")
link_href = link_element.get_attribute("href")
print("Linkin URL-i:", link_href)
# ID vasitəsilə elementi tapırıq və 'src' atributunu əldə edirik
img_element = driver.find_element_by_id("logo")
img_src = img_element.get_attribute("src")
print("Şəklin URL-i:", img_src)
driver.quit()
Göründüyü kimi, hər şey eynidir, sadəcə .text
yerinə .get_attribute("atribut_adı")
metodundan istifadə edirik. Asan öyrəşilən, amma olduqca güclü metodlardır.
4. Metodların praktikada tətbiqi
Nəzəriyyəni bir kənara qoyub praktikaya keçirik, çünki proqramçılar ümumiyyətlə çox uzun müddət abstraksiyada qalmağı sevmirlər. Gəlin veb-səhifədəki bir cədvəldən məlumat çıxarma nümunəsini nəzərdən keçirək.
Cədvəllərdən məlumat çıxarılması
Tutaq ki, bir saytın cədvəlindəki bütün sətirlərini çıxarıb onları konsola yazmalısınız. Bu, necə həyata keçirilə bilər:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com")
# Cədvəli ID vasitəsilə tapırıq
table = driver.find_element_by_id("example-table")
# Cədvəlin bütün sətirlərini tapırıq
rows = table.find_elements_by_tag_name("tr")
for row in rows:
# Cari sətirdəki bütün hüceyrələri tapırıq
cells = row.find_elements_by_tag_name("td")
for cell in cells:
print(cell.text, end=' ')
print()
driver.quit()
Əvvəlcə cədvəlin özünü tapırıq, sonra onun bütün sətirlərini və hüceyrələrini sırayla keçərək onların mətnlərini çıxarıb yazırıq. Bu, mürəkkəb bir şəbəkəni açmağa bənzəyir, amma nəticədə hər şey sadə və anlaşılan olur!
5. Ümumi səhvlər və onlardan necə qaçmaq olar
Kod macərasına başlamazdan əvvəl gəlin qarşılaşa biləcəyimiz ümumi səhvlərdən danışaq.
Dinamiki səhifələrlə işləyərkən zaman sizin düşməniniz ola bilər. Əgər hələ yüklənməmiş elementin mətnini və ya atributunu almağa çalışsanız, NoSuchElementException
xətası ilə qarşılaşacaqsınız. Bu, sürpriz gəlməmişdən əvvəl onu tutmağa çalışmaq kimidir. Bunun qarşısını almaq üçün möcüzələrə güvənmək əvəzinə açıq gözləyişlərdən (WebDriverWait
) istifadə edin.
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()
Burada biz WebDriverWait
və expected_conditions
istifadə edirik ki, elementin yüklənməsini gözləyək. Bu, yeməyin tam hazır olmasını gözləyib sonra onun dadını çıxarmaq kimidir.
GO TO FULL VERSION