Selenium ilə Veb Scraping: Niyə və Necə?

Noyabr 22, 2024

Heç veb səhifələrindəki məlumatları avtomatik olaraq toplamaq istəmisinizmi? Əgər cavabınız ‘bəli’dirsə, bu məqalədə veb scraping üçün əsas alətlərdən biri olan Selenium ilə tanış olacağıq. Niyə məhz Selenium? Və hansı hallarda istifadə etmək daha faydalıdır? Bu suallara cavab verərək, praktiki kod nümunəsi ilə addım-addım izah edəcəyik.

GİRİŞ

Ümumiyyətlə, Veb səhifələr iki əsas növə bölünür: statik və dinamik səhifələr.
Statik səhifələr: Belə səhifələrdən məlumatları əldə etmək dinamik səhifələrə nisbətən daha sadə və sürətlidir, çünki səhifə yükləndikdən sonra HTML strukturu sabit qalır və sturukturda heç bir dəyişiklik olmur.

Dinamik səhifələr: Belə səhifələrdə məlumatlar, istifadəçinin hərəkətləri ilə (məsələn, kliklər, sürüşdürmələr və s.) dəyişir və yüklənir. Bu səbəbdən dinamik səhifələrdən məlumat toplamaq üçün, səhifənin tam yüklənməsini gözləmək və bu cür interaktiv elementlərlə işləmək lazım olur.

Bir çox Data Scientist və proqramçı veb səhifələrdəki məlumatları istifadə edə bilmək üçün müxtəlif veb scraping alətlərindən istifadə edir. Məsələn, BeautifulSoup, Playwright, Scrapy, Requests və s. Lakin hər veb scraping vasitəsi, hər işə uyğun deyil. Məsələn, biz BeautifulSoup, Requests kimi kitabxanaları yalnızca statik veb səhifələrdə istifadə edə bilirik. Dinamik səhifələrlə işləmək və JavaScript-lə zəngin olan veb səhifələrdən məlumat toplamaq üçün Selenium xüsusi bir yerə sahibdir. İndi isə baxaq ki, Selenium nədir və onu istifadə etməyin nə kimi əsas üstünlükləri var.

Selenium nədir və niyə istifadə edirik?

Selenium, veb səhifələrdə automated testing, web automation və web scraping təmin edən açıq mənbəli (open source) bir alətdir. Brauzerə bir istifadəçi kimi daxil olaraq, düymələrə klikləmək, formaları doldurmaq və səhifələr arasında keçid etmək kimi bir çox funksiyanı yerinə yetirə bilirik. Başqa veb scraping vasitələrindən fərqli olaraq, Selenium sayəsində bir insanın edə biləcəyi bütün veb əməliyyatları simulyasiya edib, ən mürəkkəb və dinamik veb səhifələrdən belə məlumat çəkə bilirik.

Niyə məhz Selenium?

Çünki bu alət:

  • Dinamik məlumatlarla işləmə: JavaScript-lə yüklənən səhifələri oxumağa imkan verir;
  • İstifadəçi İnteraksiyaları: Veb səhifələrdə interaktiv hərəkətlər (klikləmə, daxil olma, sürüşdürmələr və s.) edə bilir;
  • Fərqli Brauzer Dəstəyi: Selenium, məşhur və əsas brauzerləri dəstəkləyir (məsələn, Chrome, Firefox, Safari, Edge və s.) . Bunun vasitəsiylə biz müxtəlif brauzerlerde veb scraping və ya web automation proseslərini yerinə yetirə bilərik ki, bu da daha geniş bir veb scraping mühiti yaradır.
  • Fərqli Proqramlaşdırma Dilləri: Selenium kodlarını PythonJavaC#PHPRubyPerl kimi müxtəlif proqramlaşdırma dillərində yaza bilərik.

Selenium WebDriver kod nümunəsi

Nümunədə selenium ilə avtomatik şəkildə turbo.az saytına daxil olub, ‘bütün elanlar’ hissəsindəki ilk səhifədə olan bütün avtomobillərin markasını, qiymətini və digər məlumatlarını (buraxılış ili, mühərrik həcmi, yürüyüş məsafəsi) toplayıb csv faylına yazacağıq.

** Veb scraping və avtomatlaşdırma üçün Selenium istifadə edərkən, virtual mühitin (virtual enviroment) yaradılması tövsiyə olunur. Bu proqramlaşdırma dili və kitabxanalar arasındakı fərqliliklərin qarşısını almağa kömək edir.

Nümunədə python proqramlaşdırma dilində olacağı üçün seleniumu istifadə etmək üçün bizə python və selenium lazım olacaq.

1. İlk öncə lazım olan kitabxana və webdriveri yükləyin:

  • Əgər kompüterdə python varsa bu hissəni keçə bilərsiz yoxdursa yükləmək üçün link: download python
  • Seleniumu yükləmək üçün terminalda aşağıdakı əmri yazın:
				
					pip install selenium

				
			

2. WebDriver’ı yükləyin və quraşdırın:

Selenium veb səhifələri idarə edəbilmək üçün “WebDriver” adlı bir vasitədən istifadə edir ki, bunu da kompüterə yükləməliyik. Müxtəlif “WebDriver” istifadə edə bilərik.

  • Bu nümunədə Firefox brauzeri üçün “Geckodriver”-dan (yüklə) istifadə edəcəyik.
  • Geckodriver kompüterə sıxılmış fayl formatında yüklənir. Bu faylın içindəki “geckodriver.exe” faylını extract edirik. Geckodriver-i istifadə edərkən hər dəfə fayl yolunu göstərmək əvəzinə onu PATH dəyişəninə əlavə etmək daha məqsədəuyğun olar.

– Windows üçün:
1) “geckodriver.exe” faylını bir qovluğa köçürün.
2) Faylı PATH-a əlavə etmək üçün:
Control Panel > System > Advanced system settings > PATH
3) PATH dəyişəninə Geckodriver-ın yerləşdiyi qovluğu əlavə edin.

– MacOS / Linux:
Terminalda aşağıdakı əmri icra edərək PATH dəyişəninə əlavə edə bilərik:

				
					sudo mv geckodriver /usr/local/bin

				
			

Digər brauzerlərin “WebDriver”-lərini da istifadə edə bilərsiniz. Yükləmək üçün link: Digər “WebDriver”-lar

Linkə daxil olduqda bu hissədən işlədiyiniz əməliyyat sisteminə (Windows, macOS və ya Linux) uyğun olan uyğun olan driveri seçə bilərsiniz:

3. Kod hissəsi

Bir python faylı yaradıb kodları yazırıq.

Addım 1: webdriver.Firefox()ilə Firefox brauzerini açıb, ardınca get()əmrini istifadə edərək turbo.az saytını açırıq.

				
					from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Firefox()
driver.get('https://turbo.az/')
driver.implicitly_wait(10) 
time.sleep(3)

				
			

Addım 2: Açılan səhifədə “Bütün elanlar” düyməsini tapıb ona klikləmək üçün düymənin XPATH-dan istifadə edəcəyik. Bu əməliyyat səhifəni yeniləyərək bizə lazım olan bütün elanları göstərəcək.

				
					all_ads = driver.find_element(By.XPATH, '//a[text()= "Bütün elanlar"]').click()
time.sleep(2)
				
			

“Bütün elanlar” səhifəsi.

Addım 3: Bütün elanlar səhifəsinə daxil olduqdan sonra ilk səhifədəki bütün avtomobillərin marka adlarını, qiymətlərini və digər məlumatlarını çəkmək üçün hər biri üçün müvafiq XPATH-ları tapırıq.

				
					brand_names = driver.find_elements(By.XPATH, '//div[@class="products-i__name products-i__bottom-text"]')
car_prices = driver.find_elements(By.XPATH, '//div[@class="products-i__price products-i__bottom-text"]')
other_infos = driver.find_elements(By.XPATH, '//div[@class="products-i__attributes products-i__bottom-text"]')

				
			

Addım 4: Topladığımız məlumatları csv faylına yazmaq üçün funksiya yazırıq.

				
					import csv

def write_csv(file_name, headline, brand_names, car_prices, other_infos):
    with open(file_name, mode='w', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow(headline)
        for brand_name, price, other_inf in zip(brand_names, car_prices, other_infos):
            writer.writerow([brand_name.text, price.text, other_inf.text])
    print('Data written.')
				
			

Addım 5: Son olaraq, write.csv funksiyasını çağırıb məlumatları ‘CAR_INFO.csv’ adlı fayla yazırıq. Məlumatlar fayla yazıldıqdan sonra brauzeri bağlamaq üçün driver.quit() istifadə edirik.

				
					header = ['Brand name','Car Price', 'Other Information']
write_csv('CAR_INFO.csv',header, brand_names, car_prices, other_infos)

print('success')
driver.quit()
				
			

‘CAR_INFO.csv’ faylı

TAM KOD

				
					from selenium import webdriver
from selenium.webdriver.common.by import By
import time  
import csv

driver = webdriver.Firefox()

driver.get('https://turbo.az/')

driver.implicitly_wait(10)  
time.sleep(3)

# Navigate to the "Bütün elanlar" page
all_ads = driver.find_element(By.XPATH, '//a[text()= "Bütün elanlar"]').click()
time.sleep(2)

# Extract the required data
brand_names = driver.find_elements(By.XPATH, '//div[@class="products-i__name products-i__bottom-text"]')
car_prices = driver.find_elements(By.XPATH, '//div[@class="products-i__price products-i__bottom-text"]')
other_infos = driver.find_elements(By.XPATH, '//div[@class="products-i__attributes products-i__bottom-text"]')

# Function to write the extracted data to a CSV file
def write_csv(file_name, headline, brand_names, car_prices, other_infos):
    with open(file_name,mode='w',encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow(headline)

        for brand_name, price, other_inf in zip(brand_names, car_prices, other_infos):
            writer.writerow([brand_name.text, price.text, other_inf.text])
    print('Data written.')

# Define the header and  write data to the CSV file
header = ['Brand name','Car Price', 'Other Information']
write_csv('CAR_INFO.csv',header, brand_names, car_prices, other_infos)

print('success')

# Close the browser
driver.quit()
				
			

Yekun

Bu məqalədə Selenium haqqında kiçik məlumat verdik və sadə bir veb scraping nümunəsini izah etdik. Artıq siz də digər səhifələrdən məlumat çəkə və Python ilə analiz edə bilərsiniz.

Hər hansı bir sualınız və ya əlavə təklifləriniz varsa, şərh bölməsində qeyd edə bilərsiniz.

Bizə Qoşul

Tədris Müddətini Başa Vur, Beynəlxalq Sertifikat Əldə Edərək Remote Iş Imkanı Qazan!