0%

爬取Facebook广告素材库(附工具)

Facebook广告库工具,小破站配置低,仅开放两天给看官体验下。如有定制需求可以私聊哦~

前些天,有同学问我能不能抓取Facebook广告库中的广告素材,根据需要每天自动发送指定产品的新素材。

Facebook的广告库理论上列出了所有在Facebook上展示的广告素材,大家通常会去它的网页端直接查看。但是如果同时在关注很多款产品,一个个地看过来的确会占用很多时间。

那既然有这需求了,咱就动手吧。在广告库网页的左下角有一个Ad Library API的链接,这么简单的吗,接口居然这么明晃晃地给出来了?我感觉事情远没有这么简单……

成与不成,试试再说。打开Facebook Graph API Explorer,按照文档中的说明,随便找个产品的粉丝页ID,填入相应参数:

果然报错了,提示是:

For access to the API you need to be authorized and logged into Facebook.To begin authorization, you can visit facebook.com/ID.

需要验证账户。访问它给的这个链接地址,跳转到了如下页面:

(我已经尝试过进行验证,所以最下面有记录)

居然要先通过一个身份审核,这个审核是为了在Facebook上投放政治类广告。感觉不太对啊,调用个查询广告的接口而已,我不花钱投放啊!

人在屋檐下不得不低头,审核就审核吧,点击开始验证:

没有中国!?我就是要调个接口怎么这么难!

行吧,只能拿起媳妇的Facebook账号和台湾护照,提交审核。过了1天,审核通过了。我们继续。

(此处本应有截图)

WTF,又报错了。本来应该放个截图,但是懒得换账号再试一次,就不截了。总之,瞎折腾了两天才发现通过这个接口只能查询政治类广告,难怪要通过之前的审核。

所以你这接口的参数放了这么多选项干啥?明明只能选择政治类广告。这么看来,Facebook开放这一接口只是迫于政治和舆论压力,普通广告主就别想通过这个接口轻松获得其他广告商的素材了。

既然这样,通过调用接口实现开篇说的需求是没办法了。我也不打算去破解Facebook的加密算法,那就简单粗暴祭出Puppeteer吧。

Puppeteer
Puppeteer is a project from the Google Chrome team which enables us to control a Chrome (or any other Chrome DevTools Protocol based browser) and execute common actions, much like in a real browser - programmatically, through a decent API. Put simply, it’s a super useful and easy tool for automating, testing and scraping web pages over a headless mode or headful either.
Puppeteer是Google Chrome团队推出的一个工具,允许我们通过调用API来模拟在Chrome浏览器中的真实操作。它被广泛用于自动化测试和网页爬虫。

思路很简单,访问

1
https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=ALL&impression_search_field=has_impressions_lifetime&view_all_page_id=

这个链接,将粉丝页的ID加到链接最后面,即可看到该粉丝页的所有广告。Facebook采用Ajax来展示和加载数据,因此需要不断将页面滚动到最下面来获取更多数据。

(滚动到页面最下方加载更多)

每个广告元素都和这个类似:

我们可以通过归纳,抓取到每个广告的ID、上线时间、标题、描述以及视频/图片链接。

最后,每天定时爬取指定的粉丝页,将上线时间为昨天的广告通过邮件发送给自己。

由于项目代码比较冗长,此处不再上传。