ການໃຊ້ Selenium ໃນການດຶງຂໍ້ມູນຈາກຕາຕະລາງດ້ວຍ Python

Post Top Ad

Post Top Ad

Tuesday, August 19, 2025

ການໃຊ້ Selenium ໃນການດຶງຂໍ້ມູນຈາກຕາຕະລາງດ້ວຍ Python

 

ການໃຊ້ Selenium ໃນການດຶງຂໍ້ມູນຈາກຕາຕະລາງດ້ວຍ Python

1. ເປັນຫຍັງຕ້ອງໃຊ້ Selenium?

ການດຶງຂໍ້ມູນ (Web Scraping) ແມ່ນຂະບວນການດຶງຂໍ້ມູນຈາກເວັບໄຊຕ໌. ໃນຂະນະທີ່ຫ້ອງສະໝຸດເຊັ່ນ Requests ແລະ Beautiful Soup ໃຊ້ໄດ້ດີສຳລັບເວັບໄຊຕ໌ແບບງ່າຍໆ (Static), ແຕ່ພວກມັນບໍ່ສາມາດເຮັດວຽກກັບເວັບໄຊຕ໌ທີ່ຕ້ອງມີການກົດປຸ່ມ, ເລື່ອນໜ້າ, ຫຼື ມີການໂຫຼດຂໍ້ມູນແບບເຄື່ອນໄຫວໄດ້.

Selenium ເປັນເຄື່ອງມືທີ່ຊ່ວຍຄວບຄຸມ browser ເຊັ່ນ Chrome ຫຼື Firefox ໄດ້ໂດຍອັດຕະໂນມັດ, ເຊິ່ງເຮັດໃຫ້ມັນສາມາດເຮັດວຽກກັບເວັບໄຊຕ໌ທີ່ທັນສະໄໝໄດ້ຢ່າງມີປະສິດທິພາບ.

2. ຂັ້ນຕອນການດຶງຂໍ້ມູນຈາກຕາຕະລາງ

ການດຶງຂໍ້ມູນຈາກຕາຕະລາງດ້ວຍ Selenium ມີຂັ້ນຕອນດັ່ງນີ້:

ຂັ້ນຕອນທີ 1: ການຕິດຕັ້ງ (Installation) ກ່ອນອື່ນໝົດ, ໃຫ້ຕິດຕັ້ງຫ້ອງສະໝຸດ Selenium ດ້ວຍຄຳສັ່ງ pip ໃນ Terminal ຫຼື Command Prompt ຂອງທ່ານ:

pip install selenium

ນອກຈາກນີ້, ທ່ານຍັງຕ້ອງດາວໂຫຼດ Web Driver ທີ່ເໝາະສົມກັບ browser ທີ່ທ່ານໃຊ້ (ຕົວຢ່າງ: Chrome Driver ສຳລັບ Google Chrome) ຈາກເວັບໄຊຕ໌ທາງການ. ໃຫ້ແນ່ໃຈວ່າເວີຊັນຂອງ Driver ກົງກັບເວີຊັນຂອງ browser ຂອງທ່ານ.

pip install webdriver-manager 

ຂັ້ນຕອນທີ 2: ການກະກຽມ (Preparation) ໃນສະຄຣິບ Python ຂອງທ່ານ, ໃຫ້ກຳນົດເສັ້ນທາງໄປຫາ Web Driver ທີ່ດາວໂຫຼດມາ. ຈາກນັ້ນ, ສ້າງ instance ຂອງ driver ເພື່ອຄວບຄຸມ browser.

ຂັ້ນຕອນທີ 3: ການເຂົ້າເຖິງຕາຕະລາງ (Accessing the Table) ໃຊ້ຄຳສັ່ງ driver.get() ເພື່ອເຂົ້າໄປທີ່ URL ຂອງໜ້າເວັບທີ່ມີຕາຕະລາງ. ຈາກນັ້ນ, ໃຊ້ວິທີການເຊັ່ນ find_element(By.XPATH, '...') ຫຼື find_element(By.ID, '...') ເພື່ອຊອກຫາອົງປະກອບຂອງຕາຕະລາງໃນໜ້າເວັບ.

ຂັ້ນຕອນທີ 4: ການດຶງຂໍ້ມູນຫົວຂໍ້ (Scraping Headers) ຫົວຂໍ້ຕາຕະລາງ (headers) ມັກຈະຢູ່ໃນແທັກ <th>. ທ່ານສາມາດໃຊ້ຄຳສັ່ງ find_elements(By.TAG_NAME, 'th') ເພື່ອຊອກຫາອົງປະກອບທັງໝົດ. ຈາກນັ້ນ, ວົນລູບເພື່ອດຶງຂໍ້ມູນຂໍ້ຄວາມ (text) ຈາກແຕ່ລະຫົວຂໍ້.

ຂັ້ນຕອນທີ 5: ການດຶງຂໍ້ມູນແຖວ (Scraping Rows) ແຖວຂໍ້ມູນຂອງຕາຕະລາງມັກຈະຢູ່ໃນແທັກ <tr>. ທ່ານສາມາດໃຊ້ຄຳສັ່ງ find_elements(By.TAG_NAME, 'tr') ເພື່ອຊອກຫາແຖວທັງໝົດ. ຈາກນັ້ນ, ວົນລູບຜ່ານແຕ່ລະແຖວ, ຊອກຫາແທັກ <td> (Cell), ແລະເກັບຂໍ້ມູນທີ່ຕ້ອງການ.

ຂັ້ນຕອນທີ 6: ການປິດ Web Driver (Closing the WebDriver) ເມື່ອດຶງຂໍ້ມູນສຳເລັດແລ້ວ, ທ່ານຄວນປິດ browser ແລະຢຸດການເຮັດວຽກຂອງ driver ເພື່ອບໍ່ໃຫ້ມີຂະບວນການທີ່ຍັງຄ້າງຢູ່ໃນລະບົບ. ໃຊ້ຄຳສັ່ງ driver.quit() ສຳລັບການນີ້.

ສະຫຼຸບ

ການໃຊ້ Selenium ເປັນວິທີການທີ່ດີທີ່ສຸດໃນການດຶງຂໍ້ມູນຈາກຕາຕະລາງໃນເວັບໄຊຕ໌ແບບເຄື່ອນໄຫວ. ມັນອາດຈະມີຂັ້ນຕອນຫຼາຍກວ່າການໃຊ້ຫ້ອງສະໝຸດງ່າຍໆ, ແຕ່ມັນໃຫ້ຄວາມສາມາດໃນການຄວບຄຸມ browser ໄດ້ຢ່າງເຕັມທີ່ ເຊິ່ງເຮັດໃຫ້ທ່ານສາມາດຈັດການກັບຄວາມຊັບຊ້ອນຂອງເວັບໄຊຕ໌ທີ່ທັນສະໄໝໄດ້ຢ່າງມີປະສິດທິພາບ. ຕົວຢ່າງຕໍ່ໄປນີ້ສະແດງໃຫ້ເຫັນວິທີການຂຽນສະຄຣິບທັງໝົດ.

# ນຳເຂົ້າໄລບຣາລີທີ່ຈຳເປັນ
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.common.exceptions import WebDriverException, NoSuchElementException
import time
from webdriver_manager.chrome import ChromeDriverManager

# ຖ້າທ່ານຍັງບໍ່ໄດ້ຕິດຕັ້ງ webdriver-manager, ໃຫ້ຕິດຕັ້ງກ່ອນດ້ວຍຄຳສັ່ງ:
# pip install webdriver-manager

# ສ້າງຕົວປ່ຽນ driver ເພື່ອຄວບຄຸມ browser Chrome ໂດຍອັດຕະໂນມັດ
try:
    # ໃຊ້ ChromeDriverManager ເພື່ອກຳນົດເສັ້ນທາງຂອງ driver ໂດຍອັດຕະໂນມັດ
    service = Service(ChromeDriverManager().install())
    
    # chrome_options = webdriver.ChromeOptions()
    # ທ່ານສາມາດເພີ່ມ Options ຕ່າງໆ ທີ່ຕ້ອງການໄດ້
    # chrome_options.add_argument("--headless") # ໃຊ້ໂໝດ Headless ເພື່ອບໍ່ໃຫ້ເປີດ browser ຂຶ້ນມາເຫັນໄດ້
    # driver = webdriver.Chrome(service=service, options=chrome_options)
    driver = webdriver.Chrome(service=service)

except WebDriverException as e:
    print(f"ເກີດຂໍ້ຜິດພາດໃນການສ້າງ WebDriver: {e}")
    print("ກະລຸນາກວດສອບວ່າເວີຊັນຂອງ Chrome WebDriver ກົງກັບເວີຊັນຂອງ browser Chrome ຂອງທ່ານ.")
    exit()

# ເຂົ້າໄປທີ່ URL ຂອງເວັບໄຊຕ໌ທີ່ໃຊ້ໄດ້ຈິງ
# ປ່ຽນ URL ນີ້ເປັນ URL ທີ່ທ່ານຕ້ອງການດຶງຂໍ້ມູນ
url = 'https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(nominal)' 
driver.get(url)

# ລໍຖ້າໃຫ້ໜ້າເວັບໂຫຼດຂໍ້ມູນຢ່າງເຕັມທີ່
time.sleep(5)

try:
    # --- ສ່ວນສຳຄັນທີ່ຕ້ອງປັບແກ້ ---
    # ຊອກຫາຕາຕະລາງໂດຍໃຊ້ຊື່ Class ຂອງມັນ
    # ໃນໜ້າ Wikipedia, ຕາຕະລາງ GDP ມີ class name 'wikitable'
    # ທ່ານຕ້ອງກວດສອບ Class ຫຼື ID ຂອງຕາຕະລາງໃນເວັບໄຊຕ໌ທີ່ທ່ານຕ້ອງການດຶງຂໍ້ມູນ
    table = driver.find_element(By.CLASS_NAME, 'wikitable')

    # ດຶງຂໍ້ມູນຫົວຂໍ້ຕາຕະລາງ
    # ຫົວຂໍ້ຢູ່ໃນແທັກ <th>
    headers = [header.text for header in table.find_elements(By.TAG_NAME, 'th')]
    print("ຫົວຂໍ້ຕາຕະລາງ:")
    print(headers)
    print("---")

    # ດຶງຂໍ້ມູນແຕ່ລະແຖວໃນຕາຕະລາງ
    # ແຖວຂໍ້ມູນຢູ່ໃນແທັກ <tr>
    rows = table.find_elements(By.TAG_NAME, 'tr')
    data = []
    
    # ວົນລູບຜ່ານແຖວຕ່າງໆ
    for row in rows:
        # ຊອກຫາ Cells ໃນແຖວນັ້ນ
        cells = row.find_elements(By.TAG_NAME, 'td')
        
        # ກວດເບິ່ງວ່າແຖວນັ້ນມີ Cells ຫຼືບໍ່
        if cells:
            row_data = [cell.text for cell in cells]
            data.append(row_data)

    print("ຂໍ້ມູນໃນຕາຕະລາງ:")
    for row_data in data:
        print(row_data)

except NoSuchElementException:
    print("ບໍ່ພົບອົງປະກອບຂອງຕາຕະລາງ. ກະລຸນາກວດສອບ ID, Class ຫຼື XPath ຂອງຕາຕະລາງໃນໜ້າເວັບ.")
except Exception as e:
    print(f"ເກີດຂໍ້ຜິດພາດອື່ນໆ: {e}")

finally:
    # ປິດ browser ແລະ driver
    driver.quit()
    print("\nການເຮັດວຽກສຳເລັດແລ້ວ.")


 ນີ້ແມ່ນຕົວຢ່າງຜົນທີ່ໄດ້ຮັບ

ນີ້ແມ່ນຕົວຢ່າງຜົນທີ່ໄດ້ຮັບ ການໃຊ້ Selenium ໃນການດຶງຂໍ້ມູນຈາກຕາຕະລາງດ້ວຍ Python

 

No comments:

Post a Comment

Post Top Ad