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ການເຮັດວຽກສຳເລັດແລ້ວ.")
ນີ້ແມ່ນຕົວຢ່າງຜົນທີ່ໄດ້ຮັບ
No comments:
Post a Comment