21 ตุลาคม 2563

Published ตุลาคม 21, 2563 by with 2 comments

ดึงข้อมูลโพสต์จากเพจ Facebook และกลุ่ม Facebook ง่าย ๆ ด้วย Python

สวัสดีผู้อ่านทุกท่านครับ บทความนี้เราจะมาเขียนโปรแกรมภาษา 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

การใช้งาน

ให้เรียกใช้งานด้วยคำสั่ง 

from facebook_scraper import get_posts

 คำสั้่ง

 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

for post in get_posts(account = 'pythainlp', pages=1):
  print(post)

ผลลัพธ์

{'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

for post in get_posts(group='408004796247683', pages=1):
  pprint(post)

ผลลัพธ์

{'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


2 ความคิดเห็น:

  1. ไม่ระบุชื่อ9 เมษายน 2564 เวลา 23:02

    อยากทราบถ้าอยากแปลงผลลัพธ์ให้กลายเป็นไฟล์ csv ต้องทำอย่างไรบ้างครับ

    ตอบลบ
  2. อยากทราบว่าจะดึงผลลัพใน google colab ออกมาเป็น file csv ได้อย่างไรบ้างครับ

    ตอบลบ

แสดงความคิดเห็นได้ครับ :)