Ziel dieses Projekts ist es, eine durchsuchbare und vollständige Kopie der politischen Anzeigen in der Facebook-Werbebibliothek bereitzustellen
Seit dem 17.08.2023 sind auch in der EU geschaltete Anzeigen enthalten, die nicht älter als dieses Datum sind. Sie können die zusätzlichen Felder unten sehen.
Facebook stellt all diese Daten bereits über seine Weboberfläche zur Verfügung. Das Problem dabei ist, dass es kaum durchsuchbar ist und daher keinen wirklichen Nutzen für die Analyse politischer Werbung hat. Darüber hinaus ist die API schwer zugänglich und in vielerlei Hinsicht eingeschränkt.
Diese Daten sind bereits für die Öffentlichkeit bestimmt, daher trägt dieser Datensatz nur dazu bei, die Transparenz zu schaffen, die Facebook Meta bieten möchte.
Website für Live-Zugriff auf die Daten: https://ad-archive.nexxxt.cloud
Die Daten werden direkt von ihrer offiziellen API geladen.
Ab V3 werden die Anzeigen mit einer leeren Abfrage (*) länderübergreifend gecrawlt. Diese Abfrage erwies sich als recht zuverlässig und liefert alle Anzeigen aller Seiten zurück
Zuvor wurden die Daten von page_id heruntergeladen, die aus den Anzeigenberichten stammt. Diese sollten nur Seiten enthalten, die sich auf Politik oder Themen von politischer Bedeutung beziehen, aber nicht alle sind eindeutig gekennzeichnet.
Da diese Berichte vom Benutzer generierte Seitennamen und Haftungsausschlüsse enthalten, können einige Namen oder Haftungsausschlüsse durch seltsame Zeichen beschädigt sein.
Außerdem ist mir aufgefallen, dass einige Anzeigen (oder ganze Seiten?) vorübergehend (oder dauerhaft?) nicht anhand der Seiten-ID durchsucht werden können, die sie veröffentlicht hat. Sie können sie identifizieren, indem Sie die angegebene Anzahl an Anzeigen im Bericht mit der tatsächlich geladenen Anzahl an Anzeigen im Datensatz vergleichen. Oft führt dies auch dazu, dass Seiten scheinbar keine Anzeigen enthalten. Sie können sie daran erkennen, dass das Feld msg leer ist (msg="").
Ein weiteres Problem besteht darin, dass Anzeigen von page_id=0-Seiten nicht anhand ihrer page_id gecrawlt werden können. Diese beziehen sich oft nur auf einen „Instagram-Benutzer irgendeiner ID“ oder andere Benutzer der Facebook-Plattform. Weitere Informationen finden Sie in den Berichten, die ich verwendet habe. UPDATE: Sie werden mit dem leeren Abfragetrick gecrawlt. Später wurde mir auch klar, dass beim Crawlen sehr große Websites leer sind, obwohl sie eigentlich Werbung enthalten sollten.
Letztendlich führte dies dazu, dass die Anzeigen in diesem Datensatz den Berichten zufolge geringer ausfielen, als sie sein sollten. Sollte jetzt ziemlich genau sein.
id("_id" in der Tabelle)
ad_creation_time
ad_creative_bodies
ad_creative_link_captions
ad_creative_link_descriptions
ad_creative_link_titles
ad_delivery_start_time
ad_delivery_stop_time
Sprachen
page_id
Seitenname
editor_platforms
Bylines
Währung
Lieferung_nach_Region
demografische_Verteilung
geschätzte_Publikumsgröße
Eindrücke
ausgeben
Zielorte
target_gender
target_ages
eu_total_reach
begünstigte_zahler
age_country_gender_reach_breakdown
gerendert (definiert, ob die gerenderte Version verfügbar ist) (VERALTET seit V5!)
rendering_started (wird verwendet, um die Anzeigen für das Rendern in die Warteschlange zu stellen) (VERALTET seit Version 5!)
verloren (True, wenn die Anzeige beim Rendern nicht gefunden wurde)
_last_updated (enthält das Datum, an dem die Anzeige zuletzt gecrawlt/aktualisiert wurde)
Das Feld ad_snapshot_url
wird nicht gecrawlt, da es lediglich eine Kombination aus der ID und Ihrem Zugriffstoken ist:
https://www.facebook.com/ads/archive/render_ad/?id=<id>&access_token=<token>
Um zur Anzeige zu gelangen, wenn Sie kein Zugriffstoken haben, können Sie diesen Link verwenden:
https://www.facebook.com/ads/library/?id=<id>
Um die Anzeige tatsächlich ohne Zugriffstoken zu rendern, können Sie meinen Cloudflare-Worker als Proxy für die Daten verwenden: https://render-facebook-ad.lejo.workers.dev/<id>
Möglicherweise müssen Sie einige Datenschutzeinstellungen deaktivieren, da Browser ( wie Firefox) blockieren seitenübergreifende Facebook-Anfragen.
Weitere Informationen finden Sie in der Datei example.json
oder in der Beschreibung der Felder auf der offiziellen API.
Das Skript aus dem Ordner preview_renderer
wird verwendet, um einen Screenshot der relevanten Elemente aus der ad_snapshot_url
jeder Anzeige zu erstellen. Die separate render_queue
Datenbank wird zum Einreihen der Anzeigen in die Warteschlange für das Rendern verwendet. Nach dem Rendern werden die Bilder einen Monat lang gespeichert, können aber jederzeit erneut gerendert werden.
Nach dem Rendern können Sie sie hier ansehen: https://facebook-ad-previews.nexxxt.cloud/<id>.jpg
Die aktuell zu einer Anzeige gespeicherten Daten können Sie jederzeit unter https://ad-archive.nexxxt.cloud/ad/<AD_ID>
abrufen. Dieser Endpunkt kann auch für automatisierte Downloads von Werbeinformationen verwendet werden und ermöglicht ursprungsübergreifende Anfragen. Bitte beachten Sie, dass es einige Zeit dauern kann, bis neue Anzeigen gecrawlt und zur Datenbank hinzugefügt werden.
Am 17.08.2023 erschienen alle EU-Anzeigen seit diesem Datum in der Datenbank. Mittlerweile ist es mehr als doppelt so groß wie zuvor. EU-Anzeigen enthalten zusätzliche Felder, wie oben angegeben.
Die zum Rendern verwendeten Felder wurden entfernt (außer verloren) und werden nun separat behandelt.
Metadaten herunterladen (02.11.2023) kaggle
Metadaten herunterladen (01.03.2024) kaggle
Das Herunterladen der Datenbank in eine JSON-Datei und das Komprimieren dauerte immer länger. Deshalb bin ich auf komprimierte BSON-Dateien (bson.gz) umgestiegen. Diese stammen ursprünglich aus Mongodb und können viel schneller und zuverlässiger erstellt werden.
Diese werden mit dem Tool mongodump erstellt und können mit mongorestore in Ihre eigene Mongodb geladen werden. Sie können sie auch mit dem Bsondump-Tool in normale JSON-Dateien konvertieren.
Darüber hinaus können Sie die Metadatendatei verwenden, um die in meiner Datenbank verwendeten Indizes wiederherzustellen.
Einige dieser Datensätze sind auch auf kaggle verfügbar.
Metadaten herunterladen (07.09.2022)
Metadaten herunterladen (22.10.2022) kaggle
Metadaten herunterladen (30.12.2022) kaggle
Metadaten herunterladen (15.03.2023) kaggle
Metadaten herunterladen (06.08.2023) kaggle
Anzeigen wurden mit der leeren Abfrage (*) in allen Ländern gecrawlt. Sollte theoretisch jetzt alle Anzeigen in der Bibliothek enthalten.
Für die Vorschauen wurde ein rendered
Feld hinzugefügt.
Keine todo.json
Sammlungsdatei, da die Statistiken falsch sind und für diesen Crawl nicht relevant waren.
Herunterladen (09.02.2022)
Herunterladen (03.04.2022)
Herunterladen (26.05.2022)
V2 und älter:
todo.json
-Datei: basiert auf den Anzeigenberichten und enthält alle gecrawlten Seiten mit dem Zeitstempel des letzten Crawls und dem Paging-Cursor (danach)
Enthält außerdem Seitenstatistiken für mehrere Haftungsausschlüsse und Länder. Große Seiten sollten jetzt vollständig sein. Für die Aktualisierung wurden mehrere Berichte unterschiedlicher Datumsangaben verwendet.
Herunterladen
Ich habe zuerst die Deutsche und US-Bibliothek gecrawlt und mich dann entschieden, einen vollständigen Crawl zu erstellen.
Für diesen Crawl enthält todo.json
ein lang
-Feld, das den Bericht angibt, aus dem die Seite stammt. Die Berichte wurden alle automatisch mit dem Skript import_reports.py
in die Datenbank geladen.
Berichte herunterladen
Die Daten dieser Länder sind auch auf kaggle.com verfügbar
Deutschland (DE) Bericht herunterladen
USA (USA) Bericht herunterladen
Bisher erfolgte das Crawling auf Grundlage der offiziellen Berichte von Facebook. Ich habe sie in eine Mongodb geladen und das alte crawl.py
-Skript hat die Daten von der API abgerufen und sie der Anzeigensammlung hinzugefügt. Jetzt verwende ich einfach den Trick mit leeren Abfragen (*), um Anzeigen von allen Seiten in allen Ländern herunterzuladen, siehe: crawlall.py
Dazu benötigen Sie einen (oder besser Mehrfach-)Zugriffstoken. Das Skript übernimmt automatisch die Ratenbegrenzung, aber Sie können möglicherweise nicht mehrere Threads abrufen, wenn Sie nicht über genügend Token verfügen.
Für weitere Informationen schauen Sie sich einfach die Datei crawlall.py
an.
Wenn Sie weitere Informationen zur Facebook-API/-Bibliothek haben oder der Meinung sind, dass es rechtliche Probleme mit der Verbreitung dieser Daten gibt, kontaktieren Sie mich bitte: [email protected] oder eröffnen Sie ein Problem!