Selenium บทช่วยสอน VBA Excel: ตัวอย่างการขูดเว็บของ Chrome
Data Scraping โดยใช้ Selenium คืออะไร?
Selenium สามารถจำแนกได้ว่าเป็นเครื่องมืออัตโนมัติที่ช่วยอำนวยความสะดวกในการขูดข้อมูลจากหน้าเว็บ HTML เพื่อทำการขูดเว็บโดยใช้ Google Chrome
วิธีเตรียม Excel Macro ก่อนใช้งาน Data Scraping Selenium?
มีข้อกำหนดเบื้องต้นบางประการที่ต้องดำเนินการกับไฟล์มาโคร Excel ก่อนที่จะเข้าสู่กระบวนการขูดข้อมูลใน Excel
ข้อกำหนดเบื้องต้นเหล่านี้มีดังนี้: –
ขั้นตอน 1) เปิดมาโครที่ใช้ Excel และเข้าถึงตัวเลือกนักพัฒนาของ Excel
ขั้นตอน 2) เลือกตัวเลือก Visual Basic ภายใต้ Ribbon ของนักพัฒนา
ขั้นตอน 3) ใส่โมดูลใหม่
ขั้นตอน 4) เตรียมใช้งานรูทีนย่อยใหม่และตั้งชื่อเป็น test2
Sub test2() End sub
ต่อไปนี้คือผลลัพธ์ในโมดูล: –
ขั้นตอน 5) เข้าถึงตัวเลือกการอ้างอิงภายใต้แท็บเครื่องมือและข้อมูลอ้างอิง Selenium ไลบรารีประเภท ไลบรารีต่อไปนี้จะใช้สำหรับอ้างอิงโมดูล เนื่องจากไลบรารีเหล่านี้ช่วยในการเปิด Google Chrome และอำนวยความสะดวกในการพัฒนาสคริปต์แมโคร
ตอนนี้ไฟล์ Excel พร้อมที่จะโต้ตอบกับ Internet Explorer แล้ว ขั้นตอนต่อไปคือการรวมสคริปต์แมโครที่จะอำนวยความสะดวกในการคัดลอกข้อมูลในรูปแบบ HTML
วิธีการเปิด Google Chrome ใช้ VBA?
นี่คือขั้นตอนในการเปิด Google Chrome โดยใช้ VBA
ขั้นตอน 1) ประกาศและกำหนดค่าเริ่มต้นของตัวแปรในซับรูทีนดังแสดงด้านล่าง
Sub test2() Dim driver as new webdriver Dim rowc, cc, columnC as integer
ขั้นตอน 2) หากต้องการเปิด Google Chrome โดยใช้ Selenium และ VBA ให้เขียน driver.start “chrome” แล้วกด F5.
ต่อไปนี้จะเป็นโค้ด
Sub test2() Dim driver as new webdriver Dim rowc, cc, columnC as integer Driver.start "Chrome" Application.Wait Now+Timevalue("00:00:20") End sub
โมดูลจะมีผลดังนี้: -
วิธีการเปิดเว็บไซต์ใน Google Chrome โดยใช้ VBA?
เมื่อคุณสามารถเข้าถึง Google Chrome โดยใช้ VBA ขั้นตอนต่อไปคือการเข้าถึงเว็บไซต์โดยใช้ VBA ซึ่งทำได้ด้วยฟังก์ชัน get โดยที่ URL จะต้องผ่านเครื่องหมายคำพูดคู่ในแอตทริบิวต์
ทำตามขั้นตอนต่อไปนี้ดังที่แสดง
โมดูลจะมีลักษณะดังนี้: –
กด F5 เพื่อดำเนินการแมโคร
หน้าเว็บต่อไปนี้จะเปิดใน Google Chrome ตามที่ปรากฏ
Sub test2() Dim driver as new webdriver Dim rowc, cc, columnC as integer Driver.start "Chrome" Driver.get "http://demo.guru99.com/test/web-table-element.php" Application.Wait Now+Timevalue("00:00:20") End sub
ตอนนี้แมโคร Excel พร้อมที่จะดำเนินการสแกนข้อมูลแล้ว ขั้นตอนต่อไปจะแสดงวิธีดึงข้อมูลโดยใช้ซีลีเนียมและ VBA
จะขูดข้อมูลจากเว็บไซต์โดยใช้ VBA ได้อย่างไร
สมมติว่าเดย์เทรดเดอร์ต้องการเข้าถึงข้อมูลจากเว็บไซต์เป็นประจำทุกวัน แต่ละครั้งที่เดย์เทรดเดอร์กดปุ่ม จะมีการดึงข้อมูลตลาดเข้าสู่ Excel โดยอัตโนมัติ
จากเว็บไซต์ข้างต้น จำเป็นต้องตรวจสอบองค์ประกอบและสังเกตวิธีจัดโครงสร้างข้อมูล เข้าถึงซอร์สโค้ดด้านล่างของ HTML โดยกด control + Shift + ฉัน
<table class="datatable"> <thead> <tr> <th>Company</th> <th>Group</th> <th>Pre Close (Rs)</th> <th>Current Price (Rs)</th> <th>% Change</th> </tr>
ซอร์สโค้ดจะเป็นดังนี้: -
จะเห็นได้ว่าข้อมูลมีโครงสร้างเป็นตาราง HTML เดียว ดังนั้นในการดึงข้อมูลทั้งหมดจากตาราง HTML จำเป็นต้องออกแบบแมโครที่ดึงข้อมูลส่วนหัวของตาราง HTML และข้อมูลที่เกี่ยวข้องที่เชื่อมโยงกับตาราง ดำเนินการงานต่อไปนี้ตามที่แสดง: –
ขั้นตอน 1) สร้างลูป for ที่รันผ่านข้อมูลส่วนหัว HTML เป็นคอลเลกชัน ไดรเวอร์ selenium จะต้องค้นหาข้อมูลส่วนหัวของตาราง HTML เพื่อดำเนินการนี้ เราใช้เมธอด FindElementByClass() และ FindElementByTag() เพื่อดำเนินการตามที่แสดง
โมดูล VBA จะมีลักษณะดังนี้: –
Sub test2() Dim driver As New WebDriver Dim rowc, cc, columnC As Integer rowc = 2 Application.ScreenUpdating = False driver.Start "chrome" driver.Get "http://demo.guru99.com/test/web-table-element.php" For Each th In driver.FindElementByClass("dataTable").FindElementByTag("thead").FindElementsByTag("tr") cc = 1 For Each t In th.FindElementsByTag("th") Sheet2.Cells(1, cc).Value = t.Text cc = cc + 1 Next t Next th
ขั้นตอน 2) จากนั้นไดรเวอร์ Selenium จะค้นหาข้อมูลในตารางโดยใช้วิธีการที่คล้ายกันดังที่กล่าวไว้ข้างต้น คุณต้องเขียนโค้ดดังต่อไปนี้: –
Sub test2() Dim driver As New WebDriver Dim rowc, cc, columnC As Integer rowc = 2 Application.ScreenUpdating = False driver.Start "chrome" driver.Get"http://demo.guru99.com/test/web-table-element.php" For Each th In driver.FindElementByClass("dataTable").FindElementByTag("thead").FindElementsByTag("tr") cc = 1 For Each t In th.FindElementsByTag("th") Sheet2.Cells(1, cc).Value = t.Text cc = cc + 1 Next t Next th For Each tr In driver.FindElementByClass("dataTable").FindElementByTag("tbody").FindElementsByTag("tr") columnC = 1 For Each td In tr.FindElementsByTag("td") Sheet2.Cells(rowc, columnC).Value = td.Text columnC = columnC + 1 Next td rowc = rowc + 1 Next tr Application.Wait Now + TimeValue("00:00:20") End Sub
โมดูล vba จะมีลักษณะดังนี้: -
คุณสามารถเริ่มต้น Excel ได้โดยใช้แอตทริบิวต์ Range ของแผ่นงาน Excel หรือผ่านแอตทริบิวต์ cells ของแผ่นงาน Excel เพื่อลดความซับซ้อนของสคริปต์ VBA ข้อมูลคอลเลกชันจะถูกเริ่มต้นเป็นแอตทริบิวต์ excel cells ของแผ่นงานที่ 2 ที่มีอยู่ในเวิร์กบุ๊ก นอกจากนี้ แอตทริบิวต์ text ยังช่วยในการรับข้อมูลข้อความภายใต้แท็ก HTML
Sub test2() Dim driver As New WebDriver Dim rowc, cc, columnC As Integer rowc = 2 Application.ScreenUpdating = False driver.Start "chrome" driver.Get"http://demo.guru99.com/test/web-table-element.php" For Each th In driver.FindElementByClass("dataTable").FindElementByTag("thead").FindElementsByTag("tr") cc = 1 For Each t In th.FindElementsByTag("th") Sheet2.Cells(1, cc).Value = t.Text cc = cc + 1 Next t Next th For Each tr In driver.FindElementByClass("dataTable").FindElementByTag("tbody").FindElementsByTag("tr") columnC = 1 For Each td In tr.FindElementsByTag("td") Sheet2.Cells(rowc, columnC).Value = td.Text columnC = columnC + 1 Next td rowc = rowc + 1 Next tr Application.Wait Now + TimeValue("00:00:20") End Sub
โมดูล vba จะมีลักษณะดังนี้: -
ขั้นตอน 3) เมื่อสคริปต์แมโครพร้อมแล้ว ให้ส่งและกำหนดรูทีนย่อยให้กับปุ่ม Excel และออกจากโมดูลของ VBA ติดป้ายกำกับปุ่มเป็นการรีเฟรชหรือชื่อที่เหมาะสมที่สามารถเริ่มต้นได้ สำหรับตัวอย่างนี้ ปุ่มจะเริ่มต้นเป็นการรีเฟรช
ขั้นตอน 4) กดปุ่มรีเฟรชเพื่อรับผลลัพธ์ที่กล่าวถึงด้านล่าง
ขั้นตอน 5) เปรียบเทียบผลลัพธ์ใน Excel กับผลลัพธ์ของ Google Chrome
สรุป
- Selenium สามารถจำแนกได้ว่าเป็นเครื่องมืออัตโนมัติที่ช่วยอำนวยความสะดวกในการขูดข้อมูลจากหน้าเว็บ HTML เพื่อทำการขูดเว็บโดยใช้ Google Chrome
- การขูดบนอินเทอร์เน็ตควรทำอย่างระมัดระวัง
- โดยปกติการขูดข้อมูลออกถือเป็นการขัดต่อข้อกำหนดของเว็บไซต์
- เมื่อทำการขูดข้อมูลผ่าน Selenium ก็จะมีการรองรับเบราว์เซอร์หลายตัว
- กล่าวอีกนัยหนึ่ง เครื่องขูดสามารถทำหน้าที่คล้ายๆ กันในการขูดผ่าน Firefox, อินเตอร์เน็ตเอ็กซ์พลอเรอร์ อีกด้วย