สวัสดีผู้อ่านทุกท่านครับ บทความนี้เราจะมาเขียนโปรแกรมภาษา Python เพื่อดึงข้อมูลโพสต์จากเพจ Facebook และกลุ่ม Facebook มาเก็บไว้เพื่อใช้ในการประมวลผลต่อไปครับ
Facebook เป็นเครือข่ายสังคมออนไลน์ที่ได้รับความนิยมมากที่สุดในประเทศไทย จึงทำให้สื่อต่าง ๆ อยู่บน Facebook จำนวนมาก เช่น สำนักข่าวต่าง ๆ เป็นต้น นิยมอยู่บนเพจ Facebook หรือ กลุ่ม Facebook แต่กลับไม่ค่อยได้ปรับปรุงข้อมูลบนเว็บไซต์ของตัวเอง
นักวิจัย คนทำ NLP ภาษาไทย หรือผู้ที่ทำงานด้าน Data Science ที่ต้องการข้อมูลเหล่านั้น จึงต้องหาวิธีดึงข้อมูลโพสต์จากเพจ Facebook ด้วยตัวเอง ไม่ว่าเป็นใช้ Open API ของ Facebook ซึ่งทางผู้ขียนได้หาเครื่องมือไลบรารีในภาษา Python สำหรับช่วยดึงข้อมูลโพสต์จากเพจ Facebook มาเก็บไว้แบบง่าย ๆ โดยใช้ไลบรารีที่ชื่อว่า Facebook Scraper
Facebook Scraper เป็นเครื่องมือสำหรับช่วยดึงข้อมูลโพสต์จากเพจ Facebook ในภาษา Python โดยที่ไม่ต้องป้อน API Key ในการดึงข้อมูลเลย
ความสามารถ
- สามารถดึงข้อมูลจากเพจ Facebook ได้พร้อมรายละเอียดโพสต์ เช่น ข้อความในโพสต์ วันเวลาที่โพสต์ จำนวนการถูกใจ จำนวนความคิดเห็น ลิงก์รูปภาพ และลิงค์วิดีโอ เป็นต้น
- สามารถดึงข้อมูลจากกลุ่ม Facebook ได้
- สามารถ login ด้วย Facebook ได้ เหมาะกับดึงข้อมูลจากกลุ่มปิด
การติดตั้ง สามารถติดตั้งได้ผ่านคำสั่ง pip install facebook-scraper
การใช้งาน
ให้เรียกใช้งานด้วยคำสั่ง
คำสั้่ง
get_posts(
account: Optional[str] = None,
group: Union[str, int, None] = None,
credentials: Optional[Credentials] = None,
**kwargs,
):
Args:
account (str): The account of the page.
group (int): The group id.
credentials (Optional[Tuple[str, str]]): Tuple of email and password to login before scraping.
timeout (int): Timeout for requests.
page_limit (int): How many pages of posts to go through.
Use None to try to get all of them.
extra_info (bool): Set to True to try to get reactions.
youtube_dl (bool): Use Youtube-DL for video extraction.
- ดึงข้อมูลจากเพจ Facebook ใช้คำสั่ง
get_posts(account = 'ชื่อเพจ', pages=จำนวนหน้าสูงสุด)
- ดึงข้อมูลจากกลุ่ม Facebook ใช้คำสั่ง
get_posts(group='ไอดีของกลุ่มบน Facebook', pages=จำนวนหน้าสูงสุด)
- การเข้าสู่ระบบ (กรณีต้องการดึงจากกลุ่มหรือเพจที่จำกัดการเข้าถึง) ใช้คำสั่ง get_posts(____, credentials = ('user','password') , pages=จำนวนหน้าสูงสุด)
จำนวนหน้าสูงสุด คือ จำนวนหน้าสูงสุดที่ดึงจาก Facebook
ทดลองเล่นบน Google Colab ได้ที่ https://colab.research.google.com/drive/1KWTbfnwVU9w2qGgXisHu97fNp0PHuGia?usp=sharing
ตัวอย่างการดึงข้อมูลจากเพจ Facebook
ผมขอยกตัวอย่างการดึงข้อมูลจากเพจ PyThaiNLP
ผลลัพธ์
{'comments': 0,
'image': None,
'images': [],
'likes': 0,
'link': 'https://github.com/PyThaiNLP/thaigov-v2-corpus',
'post_id': None,
'post_text': '',
'post_url': 'https://facebook.com/story.php?story_fbid=2661181230787414&id=408004796247683',
'shared_text': 'Tontan Wannaphong Phatthiyaphaibun shared a link to the '
'group: Thai Natural Language Processing.\n'
'19 September at 00:11 ·',
'shares': 0,
'text': 'Tontan Wannaphong Phatthiyaphaibun shared a link to the group: Thai '
'Natural Language Processing.\n'
'19 September at 00:11 ·',
'time': None,
'user_id': None,
'video': None,
'video_id': None,
'video_thumbnail': None}
ตัวอย่างการดึงข้อมูลจากกลุ่ม Facebook
ผมขอยกตัวอย่างกลุ่ม Thai NLP
ผลลัพธ์
{'comments': 3,
'image': None,
'images': [],
'likes': 6,
'link': None,
'post_id': '1189541251427363',
'post_text': 'ผมสามารถโหลด TSynC-1 (Thai Speech Corpus for Speech Synthesis '
'version 1) ตัวเต็ม จำนวน 13.94 hours โดยมีจำนวนประโยค 5,200 '
'ประโยคได้จากช่องทางไหนครับ?',
'post_url': None,
'shared_text': '',
'shares': 0,
'text': 'ผมสามารถโหลด TSynC-1 (Thai Speech Corpus for Speech Synthesis '
'version 1) ตัวเต็ม จำนวน 13.94 hours โดยมีจำนวนประโยค 5,200 '
'ประโยคได้จากช่องทางไหนครับ?',
'time': datetime.datetime(2020, 10, 14, 18, 13, 52),
'user_id': '100006866895771',
'video': None,
'video_id': None,
'video_thumbnail': None}
เพียงเท่านี้เราก็จะได้ dict ของข้อมูลโพสต์ทั้งจากกลุ่มบน Facebook และเพจบน Facebook เพื่อนำไปประมวลผลต่อไปได้ด้วยครับ
นอกจากนั้น Facebook Scraper รองรับการใช้งานผ่าน CLI ด้วย โดยที่ไม่ต้องเขียนโปรแกรม
สามารถอ่านเอกสารได้ที่ https://github.com/kevinzg/facebook-scraper
อยากทราบถ้าอยากแปลงผลลัพธ์ให้กลายเป็นไฟล์ csv ต้องทำอย่างไรบ้างครับ
ตอบลบอยากทราบว่าจะดึงผลลัพใน google colab ออกมาเป็น file csv ได้อย่างไรบ้างครับ
ตอบลบ