跳至主要内容

Snscrape 教程:如何用 Python 抓取社交媒体数据

本教程将帮助您安装、使用并排查 snscrape。您将学会抓取推文、Facebook 帖子、Instagram 话题标签或 Subreddit。
· 8分钟 阅读

使用 AI 探索

Snscrape 是一个强大的 Python 库,可用于从 Facebook、Twitter、Instagram、Reddit 等各类社交网络服务(SNS)中抓取数据。

对社交媒体的专注使 snscrape 能在通用爬虫工具可能吃力的领域表现出色。社交平台往往有独特的数据结构和 API,而 snscrape 对此了然于心。

与需要绕开平台特性限制的通用爬虫相比,这通常意味着更干净、更可靠的数据提取。

如果您想进一步了解通用网页抓取,请查看这些课程:用 Python 进行网页抓取 和 用 R 进行网页抓取。

Snscrape 一览

下面是我们可以用 snscrape 抓取的内容概览:

  • 用户资料: 跨多个平台收集公共资料信息,包括个人简介、粉丝数和发帖历史。
  • 帖子与内容: 根据平台不同,可抓取推文、Instagram 帖子、Reddit 贴文等。您还可以按特定话题标签、地点或搜索条件定向收集数据。
  • 社群与社区: 深入 Facebook 群组、Reddit 子版块或 Telegram 频道,分析群体讨论与互动。

以下是各平台支持的数据类型摘要(基于 snscrape 官方文档):

Platform

Supported Data

Facebook

User profiles, Groups, Communities

Instagram

User profiles, Hashtags, Locations

Mastodon

User profiles, Toots (single or thread)

Reddit

Users, Subreddits, Searches

Telegram

Channels

Twitter

Users, User profiles, Hashtags, Searches, Tweets (single or thread), List posts, Communities, Trends

VKontakte

User profiles

Weibo (Sina Weibo)

User profiles

如何安装 Snscrape

要开始使用 snscrape,首先需通过 pip 或 conda 安装:

$ pip install snscrape

如果您使用 conda,只需将上述代码片段中的 pip 替换为 conda。

Snscrape 需要 Python 3.8 或更高版本,您可能还需要安装 libxml2 和 libxslt 库。

安装完成后,我们就可以开始抓取社交媒体数据了。

如何使用 Snscrape

Snscrape 的优势之一是其命令行界面(CLI),能够简洁高效地获取社交媒体数据。

我们先以抓取 Facebook 数据为例。

不过在继续之前,如果您计划跟着实操,请先阅读当前的 服务条款 和 robots.txt。服务条款的更新可能表明,包括爬取在内的自动化数据收集,未经事先书面同意目前不被允许。

现在,假设我们希望收集某个页面的 Facebook 帖子。

您可以使用 snscrape 的命令行界面(CLI)来实现:

$ snscrape facebook-page "page_url" > posts.txt

在此示例中,我们可以将 “page_url” 替换为想要抓取的 Facebook 页面 URL。结果将保存在名为 posts.txt 的文件中。

如果您和我一样,可能更偏好用脚本来处理复杂或重复的任务。幸运的是,您可以轻松在 Python 脚本中使用 snscrape:

import os

# Define the Facebook page URL
page_url = "your_page_url_here"

# Execute the snscrape command to retrieve posts
os.system(f"snscrape facebook-page {page_url} > posts.txt")

# Posts are saved in the 'posts.txt' file
print(f"Posts from '{page_url}' have been saved to 'posts.txt'.")

请注意,包括 Facebook 在内的许多社交媒体平台通常不鼓励未经授权的抓取,并积极采取措施对抗此类行为。您可以在这篇文章中阅读 Facebook 对此的看法。

Snscrape:进阶技巧

Snscrape 为我们提供了用于微调数据收集过程的高级功能。例如,我们可以指定抓取结果数量、按日期范围筛选,或定向抓取特定用户或话题标签。

以下是按特定日期范围抓取帖子的示例:

$ snscrape facebook-page "page_url" --since 2023-01-01 --until 2023-12-31 > posts.txt

我们也可以用类似命令从其他平台(如 Reddit)抓取数据,但需按照各平台的语法进行调整。正如前文所述,snscrape 目前支持从以下平台抓取:

  1. Facebook
  2. Instagram
  3. Mastodon
  4. Reddit
  5. Telegram
  6. Twitter
  7. VKontakte
  8. Weibo (Sina Weibo)

全局选项

Snscrape 提供多种全局选项,便于我们自定义抓取。

例如,如果我们需要 JSON Lines 而非 .txt 文件,可以使用 jsonl 全局选项,将抓取结果保存为该文件类型:

$ snscrape facebook-page "page_url" --jsonl > posts.jsonl

另一个示例是使用 max-results 选项限制收集的结果数量。如果我们的计算资源有限,或目标页面数据量较大,这尤其有用:

$ snscrape facebook-page "page_url" --max-results 50 > limited_posts.txt

我们还可以通过收集实体信息来抓取每条帖子关联的额外信息,例如用户资料和话题标签:

$ snscrape facebook-page "page_url" --with-entity > posts_with_entity.txt

Snscrape 的应用场景

Snscrape 从社交平台提取数据的能力,为各个领域的应用打开了大门。让我们探讨一些对研究者和企业都很有吸引力的用例。

科研与学术

抓取社交网络服务在科研与学术方面有以下用例:

  • 社会聆听与情感分析: Snscrape 使研究者能够分析公众对特定事件的看法与情绪——从全球会议、政治辩论到自然灾害。此类数据可用于理解公众感知、识别新兴趋势并为决策提供依据。提取的信息对股票交易者也具有价值,可用于预测市场对相关事件的反应。
  • 网络分析与社区识别: 通过抓取社交关系与互动,研究者可以绘制社交网络、识别关键影响者,并理解信息在社区中的传播方式。这对研究线上运动、社会影响力以及信息扩散具有参考意义。

企业与营销

抓取社交数据可帮助企业:

  • 品牌监测与声誉管理: 企业可借助 snscrape 跟踪线上对其品牌的提及并监测客户情绪,从而识别潜在危机、及时回应客户关切,并评估营销活动成效。
  • 竞品分析与市场研究: 通过抓取竞争对手资料与行业论坛的数据,企业可获得关于对手策略、客户偏好以及市场新趋势的洞见,用以优化营销策略、打造竞争优势并改进产品方案。

伦理考量

在抓取数据时,维护用户隐私与遵循伦理标准至关重要。

在启动任何抓取项目之前,请阅读平台的服务条款,并制定保护用户数据隐私的方案。您有责任确保数据收集活动遵循各平台的使用政策与指南,例如速率限制、数据访问限制和内容使用许可。遵守这些服务条款可避免潜在法律风险,并在数据收集实践中维护伦理标准。

伦理考量也延伸至对抓取数据的负责处理与存储。为保护敏感信息,您应实施稳健的数据管理实践,包括加密、匿名化与安全存储协议。一旦获得数据,确保其不被滥用亦是您的责任。

Snscrape:问题与排查

尽管 snscrape 为抓取社交媒体数据提供了强大功能,我们仍可能遇到各类问题。

身份验证错误

我们可能会遇到与无效用户名、密码或 API 密钥(取决于平台)相关的错误。

需要再次检查凭据是否有拼写错误或令牌是否过期。我们也可以参考官方文档,了解各平台的特定认证要求。

速率限制

社交平台通常设有速率限制以防过度抓取。我们可能会看到提示在一定时间内请求次数超限的错误消息。

需要留意速率限制并相应调整抓取速度。Snscrape 提供了如 --wait 等选项来在请求之间引入延迟。我们也可考虑分批、分时段抓取数据。

数据解析错误

平台结构或布局的意外变化可能导致解析错误,使 snscrape 难以解释提取的数据。

需要及时关注 snscrape 的最新版本,因为开发者常会在平台更新后修复此类问题。我们可以查阅 GitHub 仓库中的已报告问题及可能的解决方案。

访问被拒

在某些情况下,平台可能会完全阻止抓取尝试。

需要尊重各平台的服务条款,避免过度抓取或针对敏感数据。如果抓取被严格禁止,需要考虑替代数据来源或调整研究方案。

排查建议

以下是一些让抓取更顺畅的好建议:

  • 从小处着手: 先进行小规模抓取任务,以测试命令并在大规模收集前识别潜在问题。
  • 阅读文档: snscrape 官方文档提供了关于各抓取器选项与最佳实践的宝贵信息。经常参考它以排查问题并优化抓取体验。
  • 加入社区: GitHub 上的 snscrape 社区是寻找常见问题解决方案并向其他用户经验学习的优质资源。

结语

在本教程中,我们介绍了使用 snscrape 从各类社交网络服务中提取数据的基础知识。我们学习了通过 CLI 与 Python 安装和使用 snscrape,并探讨了应用场景、伦理考量与排查技巧。

您可以继续深入学习情感分析、数据伦理或社交媒体数据分析等主题:

Amberle McKee

作者

Amberle McKee

我拥有博士学位,在生物研究环境中从事数据相关工作已有13年。我使用包括 Python、MATLAB 和 R 在内的多种编程语言开发软件。我热衷于与世界分享我对学习的热爱。

主题