Python Web Scraping #1: ใช้ Pandas ดึงข้อมูลที่เป็นตารางจากหน้า Website
การใช้ Python ดึงข้อมูลจาก website สามารถทำได้หลายวิธี มี library ที่หลากหลายมากมายให้เลือกใช้ตามสะดวก ขึ้นอยู่กับว่ารูปแบบของความต้องการใช้งานในตอนนั้นเป็นยังไง
ในบทความนี้เราจะใช้แค่ Pandas ที่เป็น library ซึ่งเรานิยมใช้ในการ manipulate data กัน มาทำ Web Scraping ซึ่งจะเหมาะกับหน้า website แบบไหน และมีขั้นตอนวิธีการทำยังไง ก็เชิญอ่านต่อได้ทางด้านล่างนี้เลย หรือถ้าใครสะดวกช่องทางอื่น ก็สามารถตาม link ด้านล่างนี้ไปได้เลยจ้า เอ้า เริ่ม!
การใช้ 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()
dfs[1].head()
dfs[2].head()
โอ้โหเฮ๊ะ เหมือนเป๊ะอย่างกะจับวาง
เป็นไงกันบ้างครับกับการทำ Web Scraping ด้วย Pandas ง่ายใช่ไหมหล่ะครับ แต่ก็ยังมีเงื่อนไขในการใช้งานเยอะเลย
เราจะแก้ปัญหาพวกนั้นยังไง ใช้เครื่องมืออะไร ติดตามตอนต่อไปได้ที่นี่เลย:
- Python Web Scraping #2: ใช้ Requests มาช่วย Pandas ดึงข้อมูล
- Python Web Scraping #3: ใช้ Beautiful Soup ในการอ่านข้อมูลในหน้า Website
สำหรับวันนี้ไปก่อนละจ้า บายยยย