跳到内容

抓取 Facebook 帖子的完整指南

社交媒体蕴藏着宝贵的公共数据金矿,对于那些知道如何提取的人来说。这本权威的 4000 多字指南将教您如何使用适当的工具和技术有效地抓取 Facebook 帖子。

网页抓取的重要性日益增加

网页抓取是指通过脚本和软件工具从网站自动提取数据。据 Insider Intelligence 称,超过 80% 的组织现在以某种形式利用网络抓取来实现商业智能目的。

随着在线发布的有价值的数据量持续呈指数级增长,网络抓取对于利用这些数据变得至关重要。零售商抓取产品列表,金融公司抓取财报电话会议记录,招聘人员抓取招聘信息,申请不断涌现。

根据 Meticulous Research 的数据,网络抓取行业预计将以超过 20% 的复合年增长率增长,到 13.9 年将达到 2026 亿美元。显然,网络抓取对于竞争性业务变得至关重要。

许多网站在其服务条款 (ToS) 中禁止网页抓取。脸书也不例外。这引发了有关网络抓取合法性的问题。

好消息是,在 Facebook 总部所在的美国,几项法院裁决确认,可公开访问的网站上的数据是可以公平提取的,并且服务条款中的禁令不是具有法律效力的合同。

例如,在 2020 年 HiQ Labs 诉 LinkedIn 的裁决中,第九巡回上诉法院维持了 HiQ 抓取公共 LinkedIn 页面的权利,并指出:

“我们的结论是,HiQ 提出了一个严重的问题,即双方是否签订了一份可执行的合同,禁止 HiQ 访问 LinkedIn 的公开数据。”

只要您像普通用户一样通过公共界面访问数据,不规避技术障碍,根据美国判例法,网络抓取似乎是合法的。

也就是说,道德也很重要。以下是一些需要遵循的最佳实践:

  • 只抓取公共数据
  • 不影响正常交通
  • 尊重 robots.txt 规则
  • 使用代理并限制速率
  • 信用来源
  • 不再需要时删除数据

Facebook 对网页抓取的立场

Facebook 的服务条款规定:

未经我们事先许可,您不得使用自动化方式(例如收获机器人、机器人、蜘蛛或抓取工具)收集用户的内容或信息,或以其他方式访问 Facebook。

这意味着他们不鼓励刮擦。然而,他们的主要担忧似乎是:

  • 抓取私人用户数据
  • 虚假账户/机器人滥用平台
  • 破坏 Facebook 的基础设施

根据公共先例,以非侵入性方式抓取公共页面内容似乎不是一个问题。许多第三方工具和服务专门支持 Facebook 抓取。

Facebook 要求抓取机器人获得“事先许可”,从而使其具有开放性。但如今并没有以任何透明、实用的方式主动授予许可。

最好的方法是根据前面概述的最佳实践,以道德和负责任的方式进行刮擦。假设您坚持使用公共页面和数据,抓取适量的数据就不会引起担忧。但当平台政策模糊时,就不可能做出明确的保证。

现在让我们看看如何实际抓取 Facebook 帖子......

使用无头浏览器抓取 Facebook

最直接的方法是通过脚本直接控制浏览器。现代无头浏览器库(如 Puppeteer 和 Playwright)提供对浏览器功能的 API 访问。

让我们来看一个使用的示例 木偶戏 – 由于其功能和简单性的平衡而成为最受欢迎的选择之一。

首先我们需要安装 Puppeteer:

npm install puppeteer  

然后我们可以写一个这样的脚本:

// puppeteer-scraper.js

const puppeteer = require(‘puppeteer‘);

(async () => {

  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.goto(‘https://www.facebook.com/nasa/‘);

  // Wait for posts to load
  await page.waitForSelector(‘.userContentWrapper‘); 

  // Extract post data
  const posts = await page.$$eval(‘.userContentWrapper .permalinkPost‘, posts => {

    return posts.map(post => {

      return {

        text: post.querySelector(‘.userContent‘)?.textContent ?? ‘‘,  
        date: post.querySelector(‘.timestampContent‘)?.textContent ?? ‘‘,
        reactions: post.querySelector(‘.likeCount‘)?.textContent ?? ‘‘,
        comments: post.querySelector(‘.commentCount‘)?.textContent ?? ‘‘,
        shares: post.querySelector(‘.shareCount‘)?.textContent ?? ‘‘

      };

    });

  });

  console.log(posts);

  await browser.close();

})();

这是发生的事情:

  1. 使用 Puppeteer 启动无头 Chrome 浏览器。

  2. 打开 NASA 的 Facebook 页面。

  3. 等待初始帖子加载。

  4. 使用 page.$$eval 评估所有匹配的元素 .userContentWrapper .permalinkPost 选择器。

  5. 提供一个回调函数,将每个帖子元素映射到我们想要的数据——文本、日期、反应等。

  6. 打印提取的 posts 数组。

运行时,此脚本将输出一组对象,其中包含每个抓取的帖子的文本、日期和参与数据。

我们现在可以轻松地将抓取的帖子保存为 JSON:

const fs = require(‘fs‘);

// ...scrape posts

fs.writeFileSync(‘nasa-posts.json‘, JSON.stringify(posts, null, 2)); 

或者我们可以将每篇文章作为一行附加到 CSV 文件中。可能性是无止境!

木偶师与剧作家的比较

傀儡师很棒,但是 剧作家 是另一个优秀的无头浏览器选项,具有一些独特的优势:

  • 除了 Chromium 之外,还支持 Firefox 和 WebKit。
  • 页面加载时间稍快一些。
  • 对分页、iframe 和弹出窗口更好的内置支持。
  • 用于预览抓取数据的 UI。
    -更平滑的异步/等待语法。

例如,以下是 Playwright 中的相同脚本:

const { chromium } = require(‘playwright‘); 

(async () => {

  const browser = await chromium.launch();

  const context = await browser.newContext();

  const page = await context.newPage();

  await page.goto(‘https://www.facebook.com/nasa/‘);

  const posts = await page.$$eval(‘.userContentWrapper .permalinkPost‘, posts => {

    // Map elements to data  

  });

  await browser.close();

})();

剧作家的用法基本相同。根据您的喜好,这两个库都是不错的选择。

现在让我们看看如何使用代理来更有效地抓取......

通过代理抓取

为了大规模有效地抓取 Facebook,强烈建议使用代理来分发请求并避免检测。

住宅代理 效果最好,因为它们提供来自家庭/移动设备的真实 IP,以获得与普通用户相同的结果。 数据中心代理 更便宜,但更有可能被检测和阻止。

以下是如何配置 Puppeteer 以使用住宅代理:

const puppeteer = require(‘puppeteer-extra‘);
const pluginStealth = require(‘puppeteer-extra-plugin-stealth‘);

// Enable stealth plugin  
puppeteer.use(pluginStealth());

(async () => {

  const browser = await puppeteer.launch({
    headless: true, 
    args: [
      ‘--proxy-server=http://USER:PASS@PROXY:PORT‘ 
    ]
  });

// ...rest of script

})();

我们只需通过 --proxy-server 与我们的代理提供商凭据的争论。这将通过代理 IP 路由所有流量。

puppeteer-extra-plugin-stealth 模块在通过代理时应用各种技术来逃避机器人检测。

顶级住宅代理服务包括:

  • Smartproxy – 套餐 75 美元/月起,提供 40 GB 流量。可用API。

  • GeoSurf – 套餐 50 美元/月起。与 Puppeteer 无缝集成。

  • Luminati – 计划起价为 500 美元/月。庞大的IP池。

  • Oxylabs – 计划从 100 欧元/月起。提供API。

住宅代理的起价为每 GB 3-5 美分,比数据中心代理贵得多,但对于认真的抓取来说非常值得。

经常轮换代理 IP,以最大限度地提高结果并最大限度地减少检测。将代理管理负担减轻给服务提供商。

使用真实浏览器抓取 Facebook

在某些情况下,24/7 服务器端运行抓取脚本可能并不理想或不可行。

从实际浏览器中抓取 在您自己的计算机上是另一种选择。它降低了小型刮刀的复杂性。

像工具一样 八度分析, 解析中心导入 提供浏览器扩展,以便在您自然浏览 Facebook 时抓取内容。

例如,以下是使用 Octoparse 进行抓取的步骤:

  1. Install浏览器扩展。

  2. 导航至目标页面。

  3. 单击扩展图标。

  4. 选择要抓取的元素。

  5. 提取数据。

浏览器抓取很容易设置,但不如提供完全编程控制的脚本灵活。根据您的用例考虑所有选项。

使用工具和 API 抓取 Facebook

除了脚本之外,许多工具都是专门用于抓取 Facebook 的:

爬虫 API 喜欢 德西, 刮痧英雄服务端 为您处理抓取工作,以便您可以专注于使用数据。例如:

import dexi 

data = dexi.FacebookPage(
  page_urls=[‘https://www.facebook.com/nasa‘]
).get_posts()

print(data)

谷歌表格插件 喜欢 导入Facebook社会影响 让您将 Facebook 数据直接提取到 Google Sheets 中进行即时分析。

Facebook API 提供官方编程访问,但与抓取相比非常有限,因为它限制了您可以提取的数据量。

DIY 浏览器扩展 喜欢 Facebook刮板 无需编码即可进行抓取。

根据您的预算、技术专长和用例评估选项。

您实际上可以从 Facebook 获取哪些数据?

虽然我们关注的是帖子,但实际上可以从 Facebook 中抓取许多数据类型:

  • 页面元数据 – 姓名、类别、关注者数量等。

  • 帖子 – 文本内容、日期、反应、评论。

  • 评论 – 评论文本、评论者姓名、日期、反应。

  • 评论 – 评论文本、图像、评级、评论者姓名。

  • 展会活动 – 标题、描述、地点、日程、与会者信息。

  • 组别 – 群组信息、成员列表、帖子、评论。

  • 市场列表 – 标题、描述、价格、图片、卖家。

  • 广告 – 广告创意、文字、图像、定位标准。

但是,请仅关注您合理需要的内容。切勿抓取个人用户数据 - 仅限公共页面和帖子。

负责任地抓取 Facebook

Facebook 提供了大量的公共数据。但必须负责任地收获:

  • 尊重robots.txt: Facebook 的 robots.txt 允许抓取页面和帖子。但要遵守所有被封锁的道路。

  • 限制请求频率: 不要每秒发出数百个请求来轰炸页面。讲道理。

  • 使用代理: 轮换 IP 以分配负载。住宅代理效果最好。

  • 仅抓取公共数据:切勿以个人资料或私人信息为目标。

  • 信用来源: 如果重新发布抓取的内容,请适当注明来源。

  • 删除不需要的数据:删除不再需要的已抓取数据。

  • 遵循道德规范:仅抓取您有合法权益使用或分析的数据。

数据抓取绝不能破坏 Facebook 的基础设施或损害用户隐私。我们只是提取 国家 Facebook已经公开的数据。

抓取 Facebook:关键要点

  • 网络抓取可以从 Facebook 中提取有价值的公共数据以供商业用途。
  • 专注于抓取公共页面和帖子,而不是个人资料。
  • 遵守负责任的抓取最佳实践。
  • 使用 Puppeteer、Playwright、scraper API 等工具。
  • 轮换住宅代理以避免被发现。
  • 仅收集您可以合法使用的数据。
  • 不再需要时删除已抓取的数据。

我的 4000 多字指南到此结束,该指南旨在有效且合乎道德地抓取 Facebook 帖子。希望你觉得它有用!如果您有任何其他问题,请联系我们。

加入谈话

您的电邮地址不会被公开。 必填带 *