Google Sheet—Web Scraping ดึงข้อมูลจากเว็บไซต์ร้านอาหาร

เนื่องจากบทความเรื่อง Web Scraping บทความนี้ Google Sheet—Web Scraping ดึงข้อมูลจากเว็บไซต์ ได้อีเมลมาสอบถามกรณีที่อยากจะดึงข้อมูล Latitude และ Longitude จากเว็บไซต์ร้านอาหาร ตามลิ้งก์นี้ https://www.foodpanda.co.th/restaurant/b3eh/diao-ahan-tam-sang ผมจึงขอเอาวิธีการมาแบ่งปันกันเช่นเคยครับ มาเริ่มกันเลยดีกว่า

1. Inspect เพื่อหา XPath

ในหน้า link url ที่ต้องการดึงข้อมูลให้ทำการ Inspect หน้าเว็บไซต์ (Crtl+Shift+I) เพื่อ Copy XPath ของ Element ที่มีข้อมูลต้องการนั่นคือ พิกัด lat lon ออกมา ตามตัวอย่างจะอยู่ในแผนที่ที่แสดงไว้นั่นเอง ในขั้นตอนนี้ต้องค่อยๆ ไล่หา Element ที่มีข้อมูลที่ต้องการให้เจอก่อนครับ จะได้ XPath ตามนี้

//*[@id=”rich-description”]/div/div/div[1]/div[3]/div[1]/div/div[2]/img/@data-img-url

หรือกำหนด XPath เป็น //img[@class=’map’]/@data-img-url


2. ใช้ IMPORTXML(url,xpath_query)

สร้างไฟล์ที่ต้องการเก็บข้อมูลขึ้นใหม่ด้วยการพิมพ์ sheet.new ในช่อง url ได้เลยครับ ให้ใช้ IMPORTXML(url,xpath_query) แล้วทำการกำหนดค่าดังนี้

url – หน้าเว็บไซต์ที่ต้องการดึงข้อมูล

xpath_query – XPath ของ Element ที่มีข้อมูลพิกัด lat lon ที่ต้องการจากข้อ 1

จะได้ผลลัพธ์ออกมาแบบนี้

https://maps.googleapis.com/maps/api/staticmap?center=16.046043,103.646912&zoom=17&scale=1&size=512×512&key=AIzaSyA8HI91SlqXRofWieBNy5VmUhB593yg11U&
signature=2QmpoTJax1VvbYkubUefOJD9jZo=

จะเห็นว่าพิกัด lat lon นั่นก็คือ center=16.046043,103.646912

ทำการคัดออกมาเฉพาะค่าตัวเลข lat lon โดยใช้ REGEXEXTRACT(text, regular_expression) และกำหนดค่าดังนี้

text – url ที่ได้ออกมาจาก IMPORTXML()

regular_expression – ให้กำหนดดังนี้ center=(-?[\d]*\.[\d]*),(-?[\d]*\.[\d]*)&

เพียงเท่านี้ก็จะได้ผลลัพธ์พิกัด lat lon ออกมาตามที่ต้องการแล้วครับ ลองดูตัวอย่างได้ตามนี้

Update 💡💡💡

กรณีที่ใช้ฟังก์ชั่น IMPORTXML() แล้วมี Error : Could not fetch url… ผมเลยได้ทดลองเขียน Script เพื่อสร้าง Function ขึ้นมา และรับค่าตัวแปร url ที่ต้องการดึงข้อมูลโดยจุดสำคัญคือการใช้ Regex เพื่อดึงมาเฉพาะ Element ที่ต้องการเท่านั้นซึ่งจะแตกต่างกันไป จะได้ Code หน้าตาออกมาแบบนี้

function sampleFormula(url) {
  const html = UrlFetchApp.fetch(url).getContentText();
  const map = html.match(/<img class="map"(.+?)>/gm)[0];
  return map;
}

โดยให้เปิดเมนู Tools —> Script editor ขึ้นมา แล้ว Copy Code ด้านบนไปวางไว้ได้เลยครับ อย่าลืมกด Save

วิธีการใช้งานใน Sheet ก็ให้ พิมพ์ชื่อฟังก์ชั่นได้เลยเหมือนที่ใช้งานทั่วไปก็พิมพ์ =sampleFormula() ได้เลย ค่าที่ได้กลับมาก็จะเป็น Element ที่เราต้องการครับ 💡 ทั้งนี้ตัวฟังก์ชั่นไม่ได้ใช้งานได้ทุก URL นะครับ อันนี้ทำตัวอย่างให้ดูครับ

เพื่อนๆ สามารถ Download ไฟล์ตัวอย่างได้ ที่นี่

Happy learning Happy coding…🔥🔥🔥


ฝากร้านหนังสือมือสองของผมด้วยครับ เป็นหนังสือซื้อมาอ่านเอง แล้วต้องการขายต่อในราคาที่เป็นกันเอง เพื่อนๆ ที่สนใจสามารถติดตามหนังสือที่จะขาย และสั่งซื้อได้ที่ https://shop.line.me/@921ijoic

โปรโมชั่น คูปองส่วนลด และดีล ที่ดีที่สุดของร้านค้าออนไลน์กว่า 300 แบรนด์พร้อมรับเงินคืนจาก ShopBack
https://bit.ly/3c4tlmV

Ruk-Com จดโดเมน-เช่าโฮสต์ ราคาประหยัด พร้อมให้บริการใน 1 นาที
http://bit.ly/36q8A12