이 프로젝트의 목표는 Facebook 광고 라이브러리에서 검색 가능하고 완전한 정치 광고 사본을 제공하는 것입니다.
2023년 8월 17일 이후에는 해당 날짜보다 오래되지 않은 EU에서 실행되는 광고도 포함됩니다. 아래에서 추가 필드를 볼 수 있습니다.
Facebook은 이미 웹 인터페이스를 통해 이 모든 데이터를 제공하고 있습니다. 문제는 검색이 거의 불가능하여 정치 광고 분석에 실제로 사용되지 않는다는 것입니다. 게다가 API는 접근하기 어렵고 여러 면에서 제한됩니다.
이 데이터는 이미 공개될 예정이므로 이 데이터 세트는 Facebook Meta가 제공하고자 하는 투명성을 제공하는 데 도움이 될 뿐입니다.
데이터에 실시간으로 액세스할 수 있는 사이트: https://ad-archive.nexxxt.cloud
데이터는 공식 API에서 직접 로드됩니다.
V3부터 광고는 모든 국가에서 빈 검색어(*)를 사용하여 크롤링됩니다. 이 검색어는 매우 신뢰할 수 있는 것으로 나타났으며 모든 페이지의 모든 광고를 반환합니다.
이전에는 광고 보고서에서 얻은 page_id를 통해 데이터가 다운로드되었습니다. 여기에는 정치 또는 정치적으로 중요한 문제와 관련된 페이지만 포함되어야 하지만 모든 페이지에 명확하게 표시되어 있는 것은 아닙니다.
이러한 보고서에는 사용자가 생성한 페이지 이름과 면책 조항이 포함되어 있으므로 일부 이름이나 면책 조항은 이상한 문자로 인해 손상될 수 있습니다.
내가 깨달은 또 다른 사실은 일부 광고(또는 전체 페이지?)가 해당 광고를 게시한 page_id로 일시적으로(또는 영구적으로?) 검색할 수 없다는 것입니다. 보고서에서 지정된 광고 양과 데이터세트에 실제로 로드된 광고 양을 확인하여 이를 식별할 수 있습니다. 이로 인해 페이지에 광고가 0개 있는 것처럼 보이는 경우도 많습니다. msg 필드가 비어 있으면(msg="") 이를 식별할 수 있습니다.
또 다른 문제는 page_id=0 페이지의 광고가 해당 page_id로 크롤링될 수 없다는 것입니다. 이는 종종 "일부 ID의 인스타그램 사용자" 또는 다른 Facebook 플랫폼 사용자를 지칭합니다. 자세한 내용은 제가 사용한 보고서를 살펴보세요. 업데이트: 빈 쿼리 트릭을 사용하여 크롤링됩니다. 또한 나는 나중에 매우 큰 사이트를 크롤링할 때 광고가 포함되어야 함에도 불구하고 비어 있다는 것을 깨달았습니다.
결국 이로 인해 이 데이터세트의 광고 수가 보고서에 따른 것보다 적었습니다. 이제 꽤 정확할 것입니다.
id(테이블의 "_id")
ad_creation_time
ad_creative_bodies
ad_creative_link_captions
ad_creative_link_descriptions
ad_creative_link_titles
광고_배달_시작_시간
ad_delivery_stop_time
언어
페이지_ID
페이지_이름
게시자_플랫폼
작성자
통화
배송_지역별
인구통계_분포
estimate_audience_size
노출수
경비
target_locations
타겟_성별
대상_연령
eu_total_reach
수혜자_지불자
age_country_gender_reach_breakdown
렌더링됨(렌더링된 버전이 사용 가능한지 정의)(V5부터 사용되지 않음!)
render_started(렌더링을 위해 광고를 대기열에 넣는 데 사용됨)(V5부터 사용 중단됨!)
손실됨(True, 렌더링하는 동안 광고를 찾을 수 없는 경우)
_last_updated(광고가 마지막으로 크롤링/업데이트된 날짜 포함)
ad_snapshot_url
필드는 ID와 액세스 토큰의 조합일 뿐이므로 크롤링되지 않습니다.
https://www.facebook.com/ads/archive/render_ad/?id=<id>&access_token=<token>
액세스 토큰이 없는 경우 광고를 보려면 다음 링크를 사용하세요.
https://www.facebook.com/ads/library/?id=<id>
실제로 액세스 토큰 없이 광고를 렌더링하려면 내 cloudflare 작업자를 사용하여 데이터를 프록시할 수 있습니다. https://render-facebook-ad.lejo.workers.dev/<id>
브라우저에서 일부 개인 정보 보호 설정을 비활성화해야 할 수도 있습니다( Firefox와 마찬가지로) 교차 사이트 Facebook 요청을 차단합니다.
자세한 내용은 example.json
파일이나 공식 API의 필드 설명을 참조하세요.
preview_renderer
폴더의 스크립트는 각 광고의 ad_snapshot_url
에서 관련 요소의 스크린샷을 찍는 데 사용됩니다. 렌더링을 위해 광고를 대기열에 추가하는 데 별도의 render_queue
데이터베이스가 사용됩니다. 렌더링 후 이미지는 한 달 동안 저장되지만 언제든지 다시 렌더링할 수 있습니다.
렌더링 후에는 여기에서 볼 수 있습니다: https://facebook-ad-previews.nexxxt.cloud/<id>.jpg
언제든지 https://ad-archive.nexxxt.cloud/ad/<AD_ID>
에서 광고에 대해 저장된 현재 데이터에 액세스할 수 있습니다. 이 엔드포인트는 광고 정보의 자동 다운로드에도 사용될 수 있으며 교차 출처 요청을 허용합니다. 새 광고가 크롤링되어 데이터베이스에 추가되는 데는 다소 시간이 걸릴 수 있습니다.
2023년 8월 17일에 해당 날짜 이후의 모든 EU 광고가 데이터베이스에 나타났습니다. 지금은 이전보다 두 배 이상 크기가 커졌습니다. EU 광고에는 위에 명시된 추가 필드가 포함되어 있습니다.
렌더링에 사용된 필드가 제거되었으며(손실된 경우 제외) 이제 별도로 처리됩니다.
메타데이터 다운로드 (2023년 11월 2일) kaggle
메타데이터 다운로드 (2024년 1월 3일) kaggle
데이터베이스를 JSON 파일로 다운로드하고 압축하는 데 시간이 점점 더 오래 걸렸습니다. 그래서 압축된 BSON 파일(bson.gz)로 전환했습니다. 이는 mongodb에 기본으로 제공되며 훨씬 더 빠르고 안정적으로 생성될 수 있습니다.
이는 mongodump 도구를 사용하여 생성되며 mongorestore를 사용하여 자신의 mongodb에 로드할 수 있습니다. bsondump 도구를 사용하여 일반 json 파일로 변환할 수도 있습니다.
이 외에도 메타데이터 파일을 사용하여 내 데이터베이스에 사용된 인덱스를 복원할 수 있습니다.
이러한 데이터 세트 중 일부는 Kaggle에서도 사용할 수 있습니다.
메타데이터 다운로드 (2022.09.07)
메타데이터 다운로드 (2022.10.22) kaggle
메타데이터 다운로드 (2022.12.30) kaggle
메타데이터 다운로드 (2023년 3월 15일) kaggle
메타데이터 다운로드 (2023년 8월 6일) kaggle
모든 국가에서 빈 검색어(*)를 사용하여 광고가 크롤링되었습니다. 이론상으로는 이제 라이브러리의 모든 광고가 포함되어야 합니다.
미리보기를 위해 rendered
필드가 추가되었습니다.
통계가 잘못되었고 이 크롤링과 관련이 없으므로 todo.json
수집 파일이 없습니다.
다운로드 (2022.02.09)
다운로드 (2022.04.03)
다운로드 (2022.05.26)
V2 이상:
todo.json
-파일: 광고 보고서를 기반으로 하며 마지막 크롤링의 타임스탬프와 페이징 커서(이후)를 사용하여 크롤링된 모든 페이지를 포함합니다.
또한 여러 면책조항 및 국가에 대한 페이지 통계도 포함되어 있습니다. 이제 대형 페이지가 완료되었습니다. 업데이트에는 다양한 날짜의 여러 보고서가 사용되었습니다.
다운로드
먼저 독일과 미국 도서관을 크롤링한 다음 전체 크롤링을 만들기로 결정했습니다.
이 크롤링의 경우 todo.json
에는 페이지의 원본 보고서를 지정하는 lang
필드가 포함되어 있습니다. 보고서는 모두 import_reports.py
스크립트를 사용하여 db에 자동으로 로드되었습니다.
보고서 다운로드
이들 국가의 데이터는 kaggle.com에서도 확인할 수 있습니다.
독일(DE) 보고서 다운로드
미국(US) 보고서 다운로드
이전에는 Facebook의 공식 보고서를 기반으로 크롤링이 수행되었습니다. 나는 그것들을 mongodb에 로드했고 이전의 crawl.py
스크립트는 Api에서 데이터를 가져와 광고 컬렉션에 추가했습니다. 이제 저는 빈 검색어(*) 트릭을 사용하여 모든 국가의 모든 페이지에서 광고를 다운로드하고 있습니다. 다음을 참조하세요: crawlall.py
그렇게 하려면 (또는 더 나은 다중) 액세스 토큰이 필요합니다. 스크립트는 자동으로 속도 제한을 처리하지만 토큰이 충분하지 않으면 여러 스레드를 가져오지 못할 수도 있습니다.
자세한 내용은 crawlall.py
파일을 참조하세요.
Facebook의 API/라이브러리에 관한 추가 정보가 있거나 이 데이터 배포에 법적 문제가 있다고 생각되는 경우 저에게 연락하십시오: [email protected] 또는 문제를 열어주세요!