Publicatie:Facebookaccounts als gestructureerde tekst opslaan via Facebook-scraper

Uit Cultureel Erfgoed Standaardentoolbox
Naar navigatie springen Naar zoeken springen


Samenvatting

In het kader van het project Best practices voor de archivering van sociale media in Vlaanderen en Brussel werden verschillende tools getest om socialemediaplatformen te archiveren. Deze handleiding beschrijft de tool Facebook-scraper die gebruikt kan worden om de inhoud van facebookaccounts op te slaan als machineleesbare tekst.


Referentie
Titel Facebookaccounts als gestructureerde tekst opslaan via Facebook-scraper (Voorkeurstitel)
Locatie
Uitgever
Jaar van uitgave 2021
Rechten CC-BY-SA
Persistent ID


Disclaimer: Deze handleiding is gemaakt in juli 2021. Merkt u dat er iets niet werkt? Mail dan Nastasia Vanderperren


Facebook-scraper is opensourcesoftware om de inhoud van publieke Facebookpagina’s en -groepen binnen te halen in een gestructureerd tekstformaat. Er zit een actieve community achter de software die regelmatig nieuwe functies toevoegt.

Vereisten

  • Python 3.6 of hoger: je kan controleren of je Python hebt, en de correcte versie, via het commando python -V;
  • Chrome browser;
  • een account op Facebook.

Voordelen

  • werkt op Windows, macOS en Linux;
  • werkt voor publieke en private Facebookpagina’s, -groepen en individuele accounts;
  • gebruikt geen API’s, waardoor de software niet afhankelijk is van hun beperkingen;
  • snel en geautomatiseerd;
  • kan ook de inhoud van comments ophalen, net als het aantal reacties (zoals een like) en de personen die ze gegeven hebben;
  • slaat content op in CSV-formaat.

Nadelen

  • haalt enkel tekstuele content op, geen media;
  • moeilijk om een volledig account te capteren;
  • werkt enkel via de command line of via Python scripts;
  • een grote hoeveelheid content scrapen kan leiden tot een tijdelijke IP-ban.

Workflow

Om de commando’s ook voor mensen zonder ervaring met de command line begrijpbaar te houden, werken we in deze workflow steeds op de Desktop. Indien je meer ervaring hebt, kan je ook een andere locatie gebruiken.

Stap 1: installeer Facebook-scraper

  • Open een terminalvenster, via bijvoorbeeld Terminal, Command prompt of Windows Terminal
  • Typ in het venster: pip3 install facebook-scraper (gebruik pip install facebook-scraper als pip3 niet werkt)

Facebook-scraper is nu geïnstalleerd.

Stap 2: exporteer cookies (optioneel)

Facebook-scraper kan gebruikt worden in combinatie met cookies. Je kan er de gegevens van private accounts mee downloaden, net als de comments en reacties die gegeven werden op publieke posts. Het zou ook beter zijn om je te beschermen tegen een IP-ban.

Er zijn een aantal browserextensies waarmee je eenvoudig en zonder technische kennis cookies kan downloaden. In deze handleiding gebruiken we Get cookies.txt, een extensie voor Google Chrome.

Installeer Get cookies.txt

  • Open Google Chrome
  • Ga via deze link naar de extensie-pagina van EditThisCookie en klik op Toev. aan Chrome

Cookies 1.png

  • Er verschijnt een venster dat vraagt om te bevestigen dat je de extensie wil toevoegen. Klik op Extensie toevoegen.
  • Get cookies.txt is nu geïnstalleerd. Zet vervolgens de extensie vast naast de adresbalk in je browser door links naast de adresbalk op het puzzelstukje te klikken en het punaise-icoontje naast EditThisCookie aan te klikken.

Cookies 2.png

Gebruik Get cookies.txt

  • Zorg dat je uitgelogd bent op Facebook en log je vervolgens in met het Facebookaccount dat je gebruikt om sociale media te archiveren.

Facebook inlog.png

  • Klik op het koekje naast de adresbalk om de cookies te bekijken.

Cookies 3.png

  • Download de cookies door op de Export-knop te klikken en sla het op als facebook_cookies.txt op je Desktop.

Cookies 4.png

Stap 3: download de inhoud van een Facebookaccount in een tekstbestand

Facebook-scraper kan nu gebruikt worden om Facebookposts en bijbehorende metadata op te slaan in een CSV-bestand.

  • Open een terminalvenster.
  • Navigeer naar de Desktop:
    • voor Windows: cd c:\Users\(username)\Desktop (vervang (username) door je gebruikersnaam)
    • voor macOS en Linux: cd ~/Desktop

Facebookaccounts en -pagina’s capteren

  • Zoek de naam van het account dat je wil archiveren. Dit is de tekst die verschijnt achter facebook.com/ Voor de Facebookpagina van meemoo is dit meemoo.be.

Snscrape 1.png

  • Typ in het terminalvenster het commando om de gegevens op te slaan in een tekstbestand.
    • facebook-scraper --encoding utf-8 naam_account (vervang naam_account  door de naam het van het account).
    • als je in Stap 2 cookies gedownload hebt, voeg dan de cookies toe aan het commando: facebook-scraper --encoding utf-8 --cookies facebook_cookies.txt naam_account (vervang naam_account door de naam het van het account)
    • om de Facebook-pagina van meemoo te scrapen met gebruik van cookies, is dit dus: facebook-scraper --encoding utf-8 --cookies facebook_cookies.txt meemoo.be
  • Zodra het commando uitgevoerd is, verschijnt er een CSV op je bureaublad met als bestandsnaam: naam_account_posts.be

Facebookgroepen capteren

Met Facebook-scraper kan je ook posts in Facebookgroepen capteren. Hiervoor gebruik je de --group optie.

  • Zoek de naam van de groep. Dit is vaak een nummer en vind je achter facebook.com/group/. Voor De geef van Gent is dit 1029684767055401.

Facebook-scraper 1.png

  • Ga terug naar het terminalvenster en pas het commando aan:
    • facebook-scraper --cookies facebook_cookies.txt --encoding utf-8 --group naam_groep
    • om de groep De geef van Gent te archiveren, gebruik je volgend commando: facebook-scraper --cookies facebook_cookies.txt --encoding utf-8 --group 1029684767055401

Meer posts capteren

Facebook-scraper werkt met een aantal pagina’s waarvan de posts gecapteerd worden. Het is niet duidelijk waar die pagina’s voor staan. Standaard worden tien pagina’s opgevraagd en een pagina bevat een aantal posts.

Het aantal posts per pagina is afhankelijk van het type account:

  • een Facebookpagina heeft vier posts per pagina
  • een Facebookgroep heeft 21 à 22 posts per pagina
  • voor een persoonlijk Facebookaccount gaat het om tien à twaalf posts per pagina

Wil je meer posts capteren, dan kan dit door het in het commando het aantal pagina’s dat je wil scrapen aan te passen. Let op! Een groot aantal pagina’s opgeven kan leiden tot een tijdelijke IP-ban:.

  • Ga terug naar het terminalvenster en pas het commando verder aan:
    • facebook-scraper --pages aantal --cookies facebook_cookies.txt --encoding utf-8 naam_account
    • om 1000 pagina’s (of 4000 posts) van meemoo te capteren, gebruik je het commando als volgt: facebook-scraper --pages 1000 --cookies facebook_cookies.txt --encoding utf-8 meemoo.be
    • om 1000 pagina’s (of ong. 21000 posts) van De geef van Gent te capteren, wordt het commando: facebook-scraper --pages 1000 --cookies facebook_cookies.txt --encoding utf-8 --group 1029684767055401

Comments en reacties op iedere post capteren

Met Facebook-scraper kan je ook comments, reacties en de reactoren (= de personen die een reactie gegeven hebben, incl. de soort reactie die ze geven hebben) van iedere post ophalen. Daarvoor kan je het commando verder uitbreiden met resp. de opties --comments, --reactions en --reactors.

  • Ga terug naar het terminalvenster en pas het commando verder aan:
    • facebook-scraper --pages aantal --cookies facebook_cookies.txt --encoding utf-8 --comments --reactions --reactors naam_account
    • om 4000 posts (= 1000 pagina’s) met comments op de Facebookpagina van meemoo te capteren, gebruik je het commando als volgt: facebook-scraper --pages 1000 --cookies facebook_cookies.txt --encoding utf-8 --comments meemoo.be
    • om ong. 21000 posts (= 1000 pagina’s) met comments en reactoren in de Facebookgroep De geef van Gent te capteren, wordt het commando: facebook-scraper --pages 1000 --cookies facebook_cookies.txt --encoding utf-8 --comments --reactors --group 1029684767055401

Uit testen blijkt dat het ophalen van comments en reacties niet altijd lukt. De scripts onder Geavanceerd geven voorlopig betere resultaten.

Resultaat

Een CSV met o.m. de inhoud van de posts, de datum van publicatie, het aantal likes en comments.

Facebook-scraper 2.png

Geavanceerd

Facebook-scraper is niet enkel een command line tool, maar ook een Python library die je kan integreren in Python-scripts. Een library is een verzameling van code in een bepaalde programmeertaal die hergebruikt kan worden. Dit vermijdt dat een programmeur opnieuw het warme water moet uitvinden. De Python library is krachtiger dan de command line interface en biedt meer mogelijkheden voor het archiveren van sociale media accounts.

In het kader van het project Best practices voor de archivering van sociale media in Vlaanderen en Brussel werden enkele scripts geschreven om de mogelijkheden van Facebook-scraper te verkennen. Deze mogen vrij gebruikt worden. Let op! Deze scripts worden niet verder ontwikkeld en onderhouden. Het gebruik is op eigen risico. Je kan de scripts aanpassen naar eigen noden.

Script 1: archiveren van de infopagina van een Facebookpagina, -groep of -account

De Pythonmodule biedt de mogelijkheid om de info- of about-pagina van verschillende soorten Facebookaccounts (voorbeeld) te scrapen.

  • Download het script facebook_info_scraping.py.
  • Gebruik het script als volgt in een terminalvenster:
    • python3 facebook_info_scraping.py --type account/group/page --cookies facebook_cookies.txt naam_account (in plaats van account/group/page kies je het type account dat je wil capteren)
    • om de info-pagina van meemoo te capteren, gebruik je python3 facebook_info_scraping.py --type page --cookies facebook_cookies.txt meemoo.be
    • om de info-pagina van de groep De geef van Gent te capteren, gebruik je python3 facebook_info_scraping.py --type group --cookies facebook_cookies.txt 1029684767055401

Het resultaat is een JSON-bestand met de inhoud van de info-pagina.

Facebook-scraper 3.png

Script 2: archiveren van posts met comments en reacties van een Facebookpagina, -groep of -account

Het is tevens mogelijk om scripts te schrijven waarmee je comments en reacties op posts kunt capteren. Dit script lijkt voorlopig een beter resultaat op te leveren dan de command line tool van Facebook-scraper zelf.

  • Download het script facebook_account_scraping.py
  • Gebruik het script als volgt:
    • python3 facebook_account_scraping.py --cookies facebook_cookies.txt --reactions --comments --pages aantal naam_account;
    • om 4000 posts (= 1000 pagina’s) met comments op de facebook-pagina van meemoo te capteren, gebruik je het commando als volgt: python3 facebook_account_scraping.py --cookies facebook_cookies.txt --reactions --comments --pages 1000 meemoo.be.

Het resultaat is een JSON Lines-bestand met o.m. de tekst van een post, de comments en reacties.

Facebook-scraper 4.png

Troubleshooting

Facebook-scraper geeft een error: raise exceptions.InvalidCookies(f"Cookies are not valid")

Dit betekent waarschijnlijk dat je je afgemeld hebt van Facebook nadat je je cookies gemaakt hebt. Daardoor is de sessie verlopen en zijn de cookies niet meer geldig. Exporteer terug de cookies zoals in Stap 2 en blijf aangemeld zolang je met deze cookies wil scrapen.