Selenium บทช่วยสอน VBA Excel: ตัวอย่างการขูดเว็บของ Chrome

Data Scraping โดยใช้ Selenium คืออะไร?

Selenium สามารถจำแนกได้ว่าเป็นเครื่องมืออัตโนมัติที่ช่วยอำนวยความสะดวกในการขูดข้อมูลจากหน้าเว็บ HTML เพื่อทำการขูดเว็บโดยใช้ Google Chrome

วิธีเตรียม Excel Macro ก่อนใช้งาน Data Scraping Selenium?

มีข้อกำหนดเบื้องต้นบางประการที่ต้องดำเนินการกับไฟล์มาโคร Excel ก่อนที่จะเข้าสู่กระบวนการขูดข้อมูลใน Excel

ข้อกำหนดเบื้องต้นเหล่านี้มีดังนี้: –

ขั้นตอน 1) เปิดมาโครที่ใช้ Excel และเข้าถึงตัวเลือกนักพัฒนาของ Excel

เตรียมมาโคร Excel ก่อนดำเนินการขูดข้อมูล

ขั้นตอน 2) เลือกตัวเลือก Visual Basic ภายใต้ Ribbon ของนักพัฒนา

เตรียมมาโคร Excel ก่อนดำเนินการขูดข้อมูล

ขั้นตอน 3) ใส่โมดูลใหม่

เตรียมมาโคร Excel ก่อนดำเนินการขูดข้อมูล

ขั้นตอน 4) เตรียมใช้งานรูทีนย่อยใหม่และตั้งชื่อเป็น test2

Sub test2()
End sub

ต่อไปนี้คือผลลัพธ์ในโมดูล: –

เตรียมมาโคร Excel ก่อนดำเนินการขูดข้อมูล

ขั้นตอน 5) เข้าถึงตัวเลือกการอ้างอิงภายใต้แท็บเครื่องมือและข้อมูลอ้างอิง Selenium ไลบรารีประเภท ไลบรารีต่อไปนี้จะใช้สำหรับอ้างอิงโมดูล เนื่องจากไลบรารีเหล่านี้ช่วยในการเปิด Google Chrome และอำนวยความสะดวกในการพัฒนาสคริปต์แมโคร

เตรียมมาโคร Excel ก่อนดำเนินการขูดข้อมูล

ตอนนี้ไฟล์ 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 การใช้วีบีเอ

วิธีการเปิดเว็บไซต์ใน Google Chrome โดยใช้ VBA?

เมื่อคุณสามารถเข้าถึง Google Chrome โดยใช้ VBA ขั้นตอนต่อไปคือการเข้าถึงเว็บไซต์โดยใช้ VBA ซึ่งทำได้ด้วยฟังก์ชัน get โดยที่ URL จะต้องผ่านเครื่องหมายคำพูดคู่ในแอตทริบิวต์

ทำตามขั้นตอนต่อไปนี้ดังที่แสดง

โมดูลจะมีลักษณะดังนี้: –

เปิดเว็บไซต์ใน Google Chrome การใช้วีบีเอ

กด 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

เปิดเว็บไซต์ใน Google Chrome การใช้วีบีเอ

ตอนนี้แมโคร 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 จะมีลักษณะดังนี้: -

ขูดข้อมูลจากเว็บไซต์โดยใช้ VBA

ขั้นตอน 3) เมื่อสคริปต์แมโครพร้อมแล้ว ให้ส่งและกำหนดรูทีนย่อยให้กับปุ่ม Excel และออกจากโมดูลของ VBA ติดป้ายกำกับปุ่มเป็นการรีเฟรชหรือชื่อที่เหมาะสมที่สามารถเริ่มต้นได้ สำหรับตัวอย่างนี้ ปุ่มจะเริ่มต้นเป็นการรีเฟรช

ขูดข้อมูลจากเว็บไซต์โดยใช้ VBA

ขั้นตอน 4) กดปุ่มรีเฟรชเพื่อรับผลลัพธ์ที่กล่าวถึงด้านล่าง

ขูดข้อมูลจากเว็บไซต์โดยใช้ VBA

ขั้นตอน 5) เปรียบเทียบผลลัพธ์ใน Excel กับผลลัพธ์ของ Google Chrome

ขูดข้อมูลจากเว็บไซต์โดยใช้ VBA

สรุป

  • Selenium สามารถจำแนกได้ว่าเป็นเครื่องมืออัตโนมัติที่ช่วยอำนวยความสะดวกในการขูดข้อมูลจากหน้าเว็บ HTML เพื่อทำการขูดเว็บโดยใช้ Google Chrome
  • การขูดบนอินเทอร์เน็ตควรทำอย่างระมัดระวัง
  • โดยปกติการขูดข้อมูลออกถือเป็นการขัดต่อข้อกำหนดของเว็บไซต์
  • เมื่อทำการขูดข้อมูลผ่าน Selenium ก็จะมีการรองรับเบราว์เซอร์หลายตัว
  • กล่าวอีกนัยหนึ่ง เครื่องขูดสามารถทำหน้าที่คล้ายๆ กันในการขูดผ่าน Firefox, อินเตอร์เน็ตเอ็กซ์พลอเรอร์ อีกด้วย