如何使用 Python 搜刮 Reddit

方法, 蟒蛇, 搜索, Nov-15-20225 分钟阅读

人们可以轻松地从 Facebook、Reddit 和 Twitter 等多个来源收集和搜刮信息。你可以把搜刮器看作是一种专门的工具,它能准确、快速地从网页中提取数据。搜刮 API 可以帮助搜刮者避免被网站设置的反搜刮技术禁止。但是

目录

人们可以轻松地从 Facebook、Reddit 和 Twitter 等多个来源收集和搜刮信息。你可以把搜刮器看作是一种专门的工具,它能准确、快速地从网页中提取数据。搜刮 API 可以帮助搜刮者避免被网站设置的反搜刮技术禁止。不过,与自己管理的代理工具相比,使用 API 的成本较高。

您使用过 Reddit 吗?如果你是一个社会研究者,并且经常上网,那么你很可能听说过 Reddit。Reddit 自诩为 "互联网的头版"。它是一个在线讨论论坛,人们在这里分享内容和新闻,或对其他人的帖子发表评论。因此,对于互联网营销人员和社会研究人员来说,它是一个令人难以置信的数据来源。 

Reddit 有一个名为 Python Reddit API Wrapper(简称 PRAW)的 API,用于抓取数据。在本博客中,我将向你展示如何使用 python 抓取 Reddit 的步骤。但在此之前,你需要知道为什么要抓取 Reddit。

为什么需要搜索 Reddit?

如果我们谈论 Reddit 的设计,那么它被分成几个社区,称为 "subreddits"。你可以在互联网上找到与你感兴趣的话题相关的任何子红地毯。社会研究人员在提取 Reddit 上关于特定主题的讨论时,会进行分析、推断并实施可行的计划。 

您可以从 Reddit 上获取大量数据,例如

  • 链接
  • 评论
  • 图片
  • 子论坛列表
  • 每个子论坛的提交内容
  • 用户名
  • 向上投票
  • 向下投票

您可以从 Reddit 搜刮任何与您业务相关的信息,因为您有以下需求:

  • 构建 NLP 应用程序
  • 跟踪客户情绪
  • 紧跟市场趋势
  • 消费者研究
  • 监测营销活动的效果

例如 

  • 时尚品牌需要搜索时尚子论坛中的所有评论文本、标题、链接、图片和标题,以便 制定正确的定价策略识别色彩趋势发现时尚达人对不同品牌的痛点
  • 制定正确的定价策略
  • 识别色彩趋势
  • 通过各种品牌发现时尚达人的痛点
  • 新闻和新闻从业人员必须收集带有博客链接的作者文章,以训练自动文本摘要的机器学习算法。
  • 投资和交易公司必须搜索与 "股票市场 "相关的 subreddits,通过解读正在讨论的股票来制定投资计划。

搜索 Reddit 所面临的挑战

Reddit 搜刮使用网络搜刮器(计算机程序)从 Reddit 网站上提取公开可用的数据。由于使用 Reddit 官方 API 时必然会遇到限制,因此你需要使用 Reddit 搜刮工具。但是,如果你使用不使用 Reddit API 的网络搜刮工具从 Reddit 提取数据,就会违反 Reddit 的使用条款。但这并不意味着网络搜刮是非法的。

要想无障碍地进行搜索,你必须避开 Reddit 设置的反搜索系统。Reddit 最常用的反搜索技术包括

  • IP 跟踪
  • 验证码

您可以借助代理和 IP 轮换来解决 IP 跟踪问题。另一方面,您可以使用 Captcha 解决方案(如 2Captcha)来解决验证码问题。

如何使用 Python 搜刮 Reddit

搜索 Reddit 有五种方法:

  • 手动抓取 - 这是最简单但在速度和成本方面效率最低的方法。不过,它产生的数据一致性很高。
  • 使用 Reddit API - 使用 Reddit API 搜刮 Reddit 数据需要基本的编码技能。它能提供数据,但限制 Reddit 主题中的帖子数量为 1000 个。
  • 糖衣第三方应用程序接口 - 这是一种有效且可扩展的方法,但成本效益不高。
  • 网络抓取工具 - 这些工具具有可扩展性,只需掌握使用鼠标的基本技能。
  • 自定义抓取脚本 - 它们具有高度的可定制性和可扩展性,但需要较高的编程能力。

让我们看看如何在以下步骤的帮助下使用 Reddit API 搜刮 Reddit。

创建 Reddit API 账户

在继续前行之前,您需要创建一个 Reddit 账户。要使用 PRAW,您必须通过链接注册 Reddit API。

导入软件包和模块

首先,我们将导入 Pandas 内置模块(例如,datetime)以及两个第三方模块(PRAW 和 Pandas),如下所示:

导入praw
importpandasaspd
importdatetimeasdt

获取 Reddit 和 subreddit 实例

你可以使用 Praw(Python Reddit API Wrapper 的缩写)访问 Reddit 数据。首先,你需要调用 praw.Reddit 函数连接 Reddit 并将其存储在变量中。然后,你必须向函数传递以下参数。

reddit= praw.Reddit(client_id='PERSONAL_USE_SCRIPT_14_CHARS', \
                    client_secret='SECRET_KEY_27_CHARS', \
                    user_agent='YOUR_APP_NAME', (用户名
                    username='YOUR_REDDIT_USER_NAME', (用户名
                    password='YOUR_REDDIT_LOGIN_PASSWORD')

现在,你可以获取你所选择的 subreddit。因此,从 reddit(变量)中调用 .subreddit 实例,并传入你想访问的 subreddit 的名称。例如,你可以使用 r/Nootropics 子红人区。

subreddit= reddit.subreddit('Nootropics')

访问主题

每个子红人区都有以下五种不同的方式来组织 Redditor 创建的主题:

  • .new
  • .热
  • .有争议
  • .镀金
  • .顶部

您可以抓取获得最高票数的主题:

top_subreddit= subreddit.top()

您将获得一个列表式对象,其中包含 r/Nootropics 中提交次数最多的 100 篇文章。不过,Reddit 的请求限制是 1000,因此您可以通过向 .top 传递限制来控制样本大小:

top_subreddit=subreddit.top(limit=600)

解析和下载数据

您可以搜刮任何您想要的数据。不过,我们将采集以下有关主题的信息:

  • 本我
  • 标题
  • 总谱
  • 创建日期
  • 正文

我们将在字典中存储数据,然后使用 for 循环,如下图所示。

topics_dict = { "title":[], \
                "score":[], \
                "id":[], "url":[], \
                "created": [], \
                "body":[]}

现在,我们可以从 Reddit API 抓取数据。我们将通过遍历 top_subreddit 对象把信息添加到字典中。

forsubmissionintop_subreddit:
    topics_dict["id"].append(submission.id)
    topics_dict["title"].append(submission.title)
    topics_dict["score"].append(submission.score)
    topics_dict["created"].append(submission.created)
    topics_dict["body"].append(submission.selftext)

现在,我们将数据放入 Pandas Dataframes,因为 Python 字典不容易读取。

topics_data= pd.DataFrame(topics_dict)

导出 CSV

在 Pandas 中创建各种格式的数据文件非常容易,因此我们使用以下代码行将数据导出为 CSV 文件。

topics_data.to_csv('FILENAME.csv',index=False)

2021 年最佳 Reddit 代理

Reddit 对代理的使用限制并不严格。但是,如果你在不使用代理的情况下在 Reddit 上自动进行操作,就有可能被发现并受到惩罚。 

因此,让我们来看看 Reddit 的一些最佳代理,它们可分为两类:

住宅代理 - 这是互联网服务提供商(ISP)分配给特定物理位置设备的 IP 地址。这些代理会显示用户用来登录网站的设备的实际位置。

数据中心代理 - 这些 IP 地址并非来自任何互联网服务提供商。我们从云服务提供商处获取这些地址。

以下是一些适用于 Reddit 的顶级住宅和数据中心代理。

智能代理

Smartproxy是顶级的高级住宅代理服务提供商之一,因为它对 Reddit 自动化非常有效。它拥有广泛的 IP 池,一旦您订购了它的服务,就可以访问所有 IP。 

Stormproxy

Stormproxies的定价和无限带宽使其成为一个不错的选择。它们价格合理,使用成本低廉。他们的代理服务器适用于各种使用情况,并为 Reddit 自动化提供最佳的住宅代理服务器。

ProxyScrape

ProxyScrape是最受欢迎的代理服务提供商之一,专注于提供搜索代理服务。它还提供专用数据中心代理服务器和共享数据中心代理服务器。它有超过 40k 个数据中心代理,您可以用它们从互联网上的网站搜刮数据。

ProxyScrape 为用户提供三类服务,即 

高参数

Highproxies 与 Reddit 合作,代理类别如下:

  • 共享代理
  • 私人代理
  • 分类网站代理
  • 票务代理
  • 媒体代理

即时代理

您还可以使用Instantproxies实现 Reddit 自动化,因为它们非常安全、可靠、快速,正常运行时间约为 99.9%。它们是所有数据中心代理中最便宜的。

为什么使用 Reddit 代理?

在 Reddit 上使用一些自动工具时,你需要使用代理。因为 Reddit 是一个非常敏感的网站,它很容易检测到自动操作,并阻止你的 IP 访问该平台。 因此,如果你要自动执行一些任务,如投票、发帖、加入/退出群组以及管理多个账户,你肯定需要使用代理来避免不良后果。

Scrape Reddit 的替代解决方案

如果您的 Reddit 搜索需求较小,您可以选择手动搜索。但如果需求量大,你就必须利用自动搜索方法,如网络搜索工具和自定义脚本。事实证明,当你每天的搜刮需求在几百万个帖子以内时,网络搜刮工具既节省成本,又节省资源。

因此,让我们来看看一些最好的 Reddit 搜刮工具,它们是搜刮大量 Reddit 数据的最佳解决方案。

Scrapestrom

Scrapestorm是市场上最好的搜刮工具之一,因为它在搜刮 Reddit 时非常有效。它利用人工智能自动识别网页上的关键数据点。

Apify 的 Reddit 搜索器

Apify 的 Reddit scraper可让您轻松提取数据,而无需使用 Reddit API。这意味着您无需开发人员 API 令牌和 Reddit 授权,即可下载数据用于商业用途。您还可以使用 Apify 平台的集成代理服务来优化您的搜刮。 

结论

我们讨论了五种刮取 Reddit 数据的方法,其中最简单的是使用 Reddit API,因为它只需要基本的编码技能。PRAW 是 Reddit API 的 Python 封装器,能让你在简洁的 Python 界面上使用 Reddit API。但是,当你有大量 Reddit 搜刮需求时,你可以借助 Reddit 搜刮工具从 Reddit 网站上提取公开可用的数据。要自动执行 Reddit 网站上的操作,你需要使用数据中心住宅代理