Python Web Scraping #1: ใช้ Pandas ดึงข้อมูลที่เป็นตารางจากหน้า Website

Nior Atthakorn
2 min readApr 8, 2020

--

การใช้ Python ดึงข้อมูลจาก website สามารถทำได้หลายวิธี มี library ที่หลากหลายมากมายให้เลือกใช้ตามสะดวก ขึ้นอยู่กับว่ารูปแบบของความต้องการใช้งานในตอนนั้นเป็นยังไง

ในบทความนี้เราจะใช้แค่ Pandas ที่เป็น library ซึ่งเรานิยมใช้ในการ manipulate data กัน มาทำ Web Scraping ซึ่งจะเหมาะกับหน้า website แบบไหน และมีขั้นตอนวิธีการทำยังไง ก็เชิญอ่านต่อได้ทางด้านล่างนี้เลย หรือถ้าใครสะดวกช่องทางอื่น ก็สามารถตาม link ด้านล่างนี้ไปได้เลยจ้า เอ้า เริ่ม!

ดูใน GitHub หรือ ลองเล่นใน Google Colab

การใช้ Pandas ในการทำ Web Scraping มีความสามารถที่จำกัด แต่ถ้าข้อมูลที่เราต้องการนั้นอยู่ในรูปแบบที่สามารถใช้ Pandas ได้ จะสามารถทำการ scrape ได้สะดวกมากๆๆๆๆ

ตัว Pandas อย่างที่เรารู้กันคือมีตัวชูโรงเป็น DataFrame ซึ่งมีลักษณะการเก็บข้อมูลเป็นตาราง เพราะฉะนั้นหน้า website ที่เหมาะจะใช้ Pandas ในการ Scrape ก็คือ website ที่มีข้อมูลที่เราต้องการอยู่ในรูปแบบตารางนั่นเองงงง

รู้งี้แล้ว ลองดูหน้า website ที่เราต้องการ scrape ว่าข้อมูลส่วนที่เราอยากได้เป็นตารางมั้ย ถ้าใช่ก็ลุยโลดดดด

ขั้นตอนที่ 1 ตามปกติสามัญสากลโลกเลยครับ เราเริ่มจากการ import library ที่จะใช้ ในที่นี้จะใช้ Pandas เพียงอย่างเดียว ก็จัดการ import เข้ามาเลย

import pandas as pd

ขั้นตอนที่ 2 ให้เราใส่ url ของ website ที่เราต้องการ scrape โดย url ต้องเป็นภาษาอังกฤษเท่านั้น (ถ้า url มีภาษาไทย ใช้ไม่ได้) ในที่นี้จะใช้ website ราคาหลักทรัพย์ใน SET50 ของ set.or.th ต้องขออนุญาตและขอขอบคุณมา ณ ที่นี้ด้วยนะครับ -/\- (ถ้าใครสงสัยเรื่อง url สามารถอ่านเพิ่มเติมได้ในนี้เลย)

url = 'https://marketdata.set.or.th/mkt/' \
+ 'sectorquotation.do?sector=SET50&language=th&country=TH'

เนื่องจาก url ยาว เลยเขียนแยกเป็น 2 ท่อน ไม่ต้องตกใจไปจ้า

ขั้นตอนที่ 3 ให้เราใช้ function read_html ของ Pandas ซึ่งโดยปกติแล้วสามารถรับ parameter ได้หลากหลายรูปแบบ ซึ่งรูปแบบที่เราจะใช้ในวันนี้คือการใส่ url ของหน้า website ที่เราต้องการ scrape เข้าไปโดยตรง จากนั้นตัว function จะไปดึงข้อมูลทั้งหมดจาก website นั้นๆ แล้ว scan ดูทั้งหน้าว่ามีตารางอยู่ตรงไหนบ้าง แปลงแต่ละตารางเป็น DataFrame แล้วใส่ไว้ใน list ให้เราเลย สะดวกมากกกก

dfs = pd.read_html(url)

แค่นี้ก็จบขั้นตอนการ scrape แล้ว มาลองดูผลลัพธ์กันสักหน่อยละกัน

ก่อนอื่นลองดูว่าจำนวนตารางที่ได้ตรงกับในหน้า website ที่เราเห็นมั้ย

In [4]: len(dfs)
Out[4]: 3

จะเห็นว่ามี 3 ตาราง ครบตามต้องการพอดิบพอดีเลย

ลองมาดูส่วนหนึ่งของแต่ละตารางที่ได้กันบ้าง ว่าตรงกับในหน้า website ที่เห็นมั้ย

dfs[0].head()
ตารางที่ 1 ที่ได้
dfs[1].head()
ตารางที่ 2 ที่ได้
dfs[2].head()
ตารางที่ 3 ที่ได้

โอ้โหเฮ๊ะ เหมือนเป๊ะอย่างกะจับวาง

เป็นไงกันบ้างครับกับการทำ Web Scraping ด้วย Pandas ง่ายใช่ไหมหล่ะครับ แต่ก็ยังมีเงื่อนไขในการใช้งานเยอะเลย

เราจะแก้ปัญหาพวกนั้นยังไง ใช้เครื่องมืออะไร ติดตามตอนต่อไปได้ที่นี่เลย:

สำหรับวันนี้ไปก่อนละจ้า บายยยย

--

--

Nior Atthakorn

โปรแกรมบ้าง ดนตรีบ้าง ปนๆ กันไป