关于Radlibrary无法获取Meta/Facebook广告库全部广告的技术问询
问题:Radlibrary爬取Facebook广告出现部分时段/全部广告缺失
使用R的Radlibrary包爬取丹麦(DK)地区政党Facebook页面广告时,出现广告缺失情况:
- 部分政党仅缺失2022年4月的少量广告
- 某政党缺失2021年1月1日之后的全部广告
两类情况均能获取到部分广告,该问题与项目GitHub的issue#103描述一致。已确认缺失的广告真实存在:
- 浏览器版广告库及Facebook广告库下载的CSV文件中均可查看到
- 数月前的爬取操作已成功获取到这些广告
当前代码仅返回210条广告中的117条,代码如下:
library("Radlibrary") query_ad <- adlib_build_query(ad_reached_countries = 'DK', ad_active_status = 'ALL', search_terms = "NULL", search_page_ids = "223040066022", fields = c( "id", "ad_creation_time", "ad_creative_bodies", "ad_delivery_start_time", "ad_delivery_stop_time", "ad_snapshot_url", "currency", "page_id", "page_name", "publisher_platforms", "impressions", "spend" )) response_ad <- adlib_get_paginated(query_ad, max_gets = 10, token = token) results_tibble_ad <- as_tibble(response_ad, type = "ad", censor_access_token = NULL)
可能的修复方案
1. 增大分页请求上限
当前max_gets = 10限制了分页请求的数量,Facebook广告库的分页数据可能需要更多请求才能完整获取。尝试提高该参数值:
response_ad <- adlib_get_paginated(query_ad, max_gets = 50, token = token)
2. 更新Radlibrary包
项目的issue#103可能已在后续版本中修复,检查并更新到最新版:
# 查看当前版本 packageVersion("Radlibrary") # 从CRAN更新 install.packages("Radlibrary") # 或安装GitHub开发版 devtools::install_github("facebook/Radlibrary")
3. 拆分时间范围查询
针对特定时段广告缺失的情况,将查询拆分为多个时间区间分别请求,避免单次查询覆盖过大范围导致数据截断:
# 示例:单独查询2021年的广告 query_2021 <- adlib_build_query( ad_reached_countries = 'DK', ad_active_status = 'ALL', search_terms = NULL, search_page_ids = "223040066022", ad_delivery_date_min = "2021-01-01", ad_delivery_date_max = "2021-12-31", fields = c("id", "ad_creation_time", "ad_creative_bodies", ...) # 保留原字段 ) response_2021 <- adlib_get_paginated(query_2021, max_gets = 50, token = token) # 同理构建2022年及之后的查询,最后合并结果 results_combined <- dplyr::bind_rows(as_tibble(response_2021, type = "ad"), ...)
4. 修正查询参数细节
- 将
search_terms = "NULL"改为search_terms = NULL(避免将字符串"NULL"作为无效搜索条件) - 尝试单独指定
ad_active_status = 'ACTIVE'或'INACTIVE'分别查询,再合并结果,确认是否因状态过滤导致数据缺失
5. 验证API令牌有效性
确保使用的API令牌未过期,且拥有ads_read等访问广告库的必要权限,可尝试重新生成令牌后再次请求。
内容的提问来源于stack exchange,提问作者Mads F. Hove
相关产品推荐
相关产品推荐

