在这篇博文中,我们将构建一个 Reddit Scraper,用于使用 Python 从 Reddit 中提取数据,重点是使用 Crawlbase Crawling API 从 Reddit 获取重要信息。 如果您想知道如何收集 Reddit 数据进行分析或研究,那么您来对地方了。 我们将引导您完成构建 Reddit Scraper 的步骤,因此无论您是新手还是经验丰富的人,它都会很容易理解。

直接进入 Reddit 抓取步骤, 点击这里.

或者如果您想要视频教程,这里是:

了解 Reddit 数据

Reddit 就像一个包含各种内容的大集合——帖子、评论等等。 这是查找爬取数据的好地方,尤其是在使用 Reddit Scraper 时。 在开始抓取 Reddit 之前,了解那里有哪些类型的数据并弄清楚您到底想要删除什么非常重要。

从 Reddit 抓取的数据类型

可用于抓取 Reddit 的数据类型:

  1. 帖子和评论: 这些是人们在 Reddit 上分享和讨论的内容。 他们会告诉你很多有趣的事情或趋势。 例如,80% 的 Reddit 活动涉及帖子和评论。
  2. 用户资料: 从用户个人资料中获取信息可以帮助您了解人们喜欢什么、做过什么以及他们如何属于不同的群体。 52 年,Reddit 上有 2022 万活跃用户。
  3. 赞成票和反对票: 这显示了人们喜欢或不喜欢帖子和评论的程度,让您了解什么是流行的。 Reddit 上互动的 60% 都是点赞。
  4. 子版块信息: 每个 Reddit 子版块就像一个小社区。 获取 Reddit 子版块的信息可以帮助您了解每个组的不同之处。如果您使用 Reddit Scraper,您可以收集有关各个 Reddit 子版块特征的宝贵见解。
  5. 时间戳记: 了解帖子和评论何时发生有助于跟踪趋势以及用户在不同时间的活跃程度。使用 Reddit Scraper 时,时间戳数据对于分析一段时间内的用户活动模式特别有用。

识别提取的目标数据:

目标数据提取
  1. 定义你的目的: 弄清楚为什么您需要 Reddit Scraper。 您是否正在寻找趋势、用户的行为或某些主题的详细信息?
  2. 选择相关子版块: 选择您感兴趣的 Reddit 特定部分。这可以帮助您获取对您真正重要的数据。
  3. 指定时间范围: 确定您需要最近的信息还是过去的数据。 设定时间范围可以帮助您专注于您需要的事情。
  4. 考虑用户交互: 考虑一下您想了解哪种互动,例如哪些帖子受欢迎、用户如何参与或人们在评论中说了些什么。

了解 Reddit 拥有哪些数据并决定您想要获取什么数据是智能抓取和获取所需信息的第一步。

抓取 Reddit 数据:分步指南

设置环境

如何为 Reddit 设置 Crawlbase

要在 Crawlbase 上创建免费帐户并接收您的私人令牌,只需转到您的帐户文档部分 爬网仪表板.

请按照以下步骤安装 Crawlbase Python 库:

  • 确保您的计算机上安装了 Python。 如果没有,您可以从Python官方网站下载并安装。
  • 确认已安装 Python 后,打开终端并运行以下命令:

pip install crawlbase

  • 此命令将在您的系统上下载并安装 Crawlbase Python 库,使其为您的网页抓取项目做好准备。
  • 要创建名为“reddit-scraper.py”的文件,您可以使用文本编辑器或集成开发环境 (IDE)。 以下是使用标准命令行方法创建文件的方法:
  • 运行以下命令:

touch reddit-scraper.py

  • 执行此命令将在指定目录中生成一个空的 reddit-scraper.py 文件。 然后,您可以使用您喜欢的文本编辑器打开此文件,并添加用于网页抓取的 Python 代码。

使用 Crawling API 获取 HTML

获得 API 凭据后,安装 Crawlbase Python 库,并创建了一个名为 reddit-scraper.py 的文件,选择要抓取的 Reddit 帖子页面。 在本例中,我们选择了包含最佳技术帖子的 Reddit 页面。

Reddit 帖子页面

要设置 Crawlbase 爬取 API,请按照以下简单步骤操作:

  1. 确保您已按照前面的说明创建了 reddit-scraper.py 文件。
  2. 只需将我们在下面提供的脚本复制并粘贴到该文件中即可。
  3. 使用命令“python reddit-scraper.py”在终端中运行脚本。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 爬行基地 进口 抓取API

# 设置您的 Crawlbase 令牌
抓取基础令牌 = 'YOUR_CRAWLBASE_TOKEN'

# 要抓取的 Reddit 页面的 URL
reddit_page_url = 'https://www.reddit.com/t/technology/'

# 使用您的令牌初始化 Crawling API
api = 爬行API({'令牌':crawlbase_token})

# 获取爬取URL的请求
响应 = api.get(reddit_page_url)
if 回复['状态代码'] == 200:
打印(回复['身体'])
其他:
打印(f“错误: {回复['状态代码']}")

上面的代码指导您使用 Crawlbase 的 Crawling API 从 Reddit 帖子页面收集信息。 您必须安排 API 令牌,指定您想要抓取的 Reddit 页面 URL,然后发出 GET 请求。 当您执行此代码时,它将在您的终端上显示 Reddit 页面的基本 HTML 内容。

使用 Crawlbase 抓取 API 获取 HTML

使用爬取 API 参数抓取有意义的数据

在前面的示例中,我们了解了如何获取 Reddit 帖子页面的基本结构。 然而,大多数时候,我们需要的不仅仅是基本代码; 我们需要网页上的具体详细信息。 好消息是 Crawlbase 爬行 API 有一个 特殊参数 称为“自动解析”,可以轻松地从 Reddit 页面中提取关键详细信息。 要使用此功能,您需要在使用 Crawling API 时包含“autoparse”。 此功能简化了以 JSON 格式收集最重要信息的过程。 为此,您需要对 reddit-scraper.py 文件进行一些更改。 让我们看一下下一个示例,看看它是如何工作的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 爬行基地 进口 抓取API
进口 JSON

# 设置您的 Crawlbase 令牌
抓取基础令牌 = 'YOUR_CRAWLBASE_TOKEN'

# 要抓取的 Reddit 页面的 URL
reddit_page_url = 'https://www.reddit.com/t/technology/'

# 抓取 API 的选项
选项= {
'自动解析': '真的',
}

# 使用您的令牌初始化 Crawling API
api = 爬行API({'令牌':crawlbase_token})

# 获取爬取URL的请求
响应= api.get(reddit_page_url,选项=选项)

尝试:
# 解析 JSON 响应并打印它
if 回复['状态代码'] == 200:
parsed_response = json.loads(响应['身体'])
打印(解析响应)
其他:
打印(f“错误: {回复['状态代码']}")
json.JSONDecodeError as e:
打印(f"解码 JSON 时出错: {e}")

JSON 响应:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
{
“原始状态”: 200,
“电脑状态”: 200,
“网址”: “https://www.reddit.com/t/technology/?rdt=65470”,
“身体”: {
“警报”: “已选择通用网络抓取工具。如果您需要针对给定 URL 的更详细的抓取工具,请联系支持人员。”,
“标题”: “Reddit - 深入研究任何事物”,
“图标”: "",
“元”: {
“说明”: "",
“关键词”: ""
},
“内容”: “Reddit 及其合作伙伴使用 cookie 和类似技术为您提供更好的体验。 接受所有 cookie,即表示您同意我们使用 cookie 来提供和维护我们的服务和网站,提高 Reddit 的质量,个性化 Reddit 内容和广告,以及衡量广告的有效性。 通过拒绝非必要的 cookie,Reddit 仍可能使用某些 cookie 来确保我们平台的正常功能。 打开菜单 打开导航 展开用户菜单 打开设置菜单 或在应用程序商店中查看 技术会员在线 • FDA 考虑第一个可以治愈镰状细胞的 CRISPR 基因编辑疗法 在线会员 • 在人体试验中追踪体内生命体征的可吞咽设备 | 该设备是不断发展的可摄入设备领域的一部分,可以在体内执行各种功能。 • 数据恢复公司Members Online 表示,SanDisk 的SSD 故障受到重大硬件缺陷的影响 • 280 亿辆电动自行车对石油需求的削减远远超过电动汽车 Members Online 会员在线 • 谷歌研究人员对人工智能即将智胜的理论进行了重大打击人类会员在线 • Chipotle 的创始人正在开设一家名为 Kernel 的新公司,这是一家素食快餐连锁店,主要由机器人经营。 在线会员 • OpenAI 总裁格雷格·布罗克曼 (Greg Brockman) 因员工紧张召开全体会议而辞职 在线会员 • 喷气式飞机:自 200 年以来,已有 11 架名人的飞机总共飞行了 2022 年。 艺人、首席执行官、寡头和亿万富翁的喷气式飞机产生的排放量相当于近 40,000 辆 • PlayStation 5 在大多数欧洲在线会员中的表现继续优于 Xbox Series X 和 S • YouTube 将加载时间缓慢归咎于广告拦截器,但它没有任何理由使用您的浏览器做| 这种延迟是故意的,但针对的是继续使用广告拦截器的用户,而不是专门绑定到任何浏览器。 会员在线 • 比尔·盖茨表示,每周工作 3 天,“机器可以制造所有的食物和东西”并不是一个坏主意 会员在线 • YouTube 警告说,如果您不关闭广告,可能会让您的观看体验变得更糟-blocker 会员在线 • 独家:马斯克支持反犹太主义帖子后,苹果将暂停在 X 上做广告 会员在线 • 新泽西州从 2035 年起禁止销售新的燃气动力汽车 | 新规定规定,从 42 年开始,该州至少 2027% 的新车销售必须是零排放。 ,
“典范”: "",
“图片”: [],
“视频”: [],
“分组图像”: {},
“og_images”: [],
“链接”: [
“https://reddit.com/en-us/policies/cookies”,
“https://reddit.com/en-us/policies/privacy-policy”,
“https://www.reddit.com/”,
“https://www.reddit.com/login”,
“https://ads.reddit.com?utm_source=web3x_consumer&utm_name=user_menu_cta”,
“https://www.reddit.com/avatar/shop”,
“https://play.google.com/store/apps/details?id=com.reddit.frontpage”,
“https://apps.apple.com/US/app/id1064216828”,
“https://www.reddit.com/r/tech/comments/180crnc/fda_considers_first_crispr_gene_editing_treatment/”,
“https://www.reddit.com/r/tech/”,
“https://edition.cnn.com/2023/10/31/health/fda-considers-crispr-treatment-cure-sickle-cell/index.html”,
“https://www.reddit.com/r/tech/comments/17xmvmg/swallowable_device_tracking_vital_signs_inside/”,
“https://interestingengineering.com/health/swallowable-device-tracking-vital-signs-inside-the-body-in- human-Trial”,
“https://www.reddit.com/r/gadgets/comments/17xkdy8/sandisk_failing_ssds_affected_by_major_hardware/”,
“https://www.reddit.com/r/gadgets/”,
“https://www.techspot.com/news/100880-sandisk-defective-ssds-affected-major-hardware-flaws-data.html”,
“https://www.reddit.com/r/Futurology/comments/17yjd8s/280_million_ebikes_are_slashing_oil_demand_far/”,
“https://www.reddit.com/r/Futurology/”,
“https://arstechnica.com/cars/2023/11/280-million-e-bikes-are-slashing-oil-demand-far-more-than-electric-vehicles/”,
“https://www.reddit.com/r/Futurology/comments/17xq0aj/sam_altman_fired_as_ceo_of_open_ai/”,
“https://www.theverge.com/2023/11/17/23965982/openai-ceo-sam-altman-fired”,
“https://www.reddit.com/r/gadgets/comments/182a6nn/jetpack_features_glock_autopistol_aimed_by_moving/”,
“https://www.thedrive.com/the-war-zone/jetpack-features-glock-autopistol-aimed-by-moving-your-head”,
“https://www.reddit.com/r/Futurology/comments/17yyu5n/google_researchers_deal_a_major_blow_to_the/”,
“https://www.businessinsider.com/google-researchers-have-turned-agi-race-upside-down-with-paper-2023-11”,
“https://www.reddit.com/r/Futurology/comments/17znndx/the_Founder_of_chipotle_is_opening_a_new_endeavor/”,
“https://ny.eater.com/2023/11/14/23960928/kernel-restaurant-robots-nyc-opening-steve-ells”,
“https://www.reddit.com/r/Futurology/comments/17xtw06/openai_president_greg_brockman_quits_as_nervous/”,
“https://arstechnica.com/information-technology/2023/11/openai-president-greg-brockman-quits-as-nervous-employees-hold-all-hands-meeting/”,
“https://www.reddit.com/r/Futurology/comments/180is46/the_jet_set_200_celebrities_aircraft_have_flown/”,
"https://www.theguardian.com/environment/2023/nov/21/the-jet-set-200-celebrities-aircraft-have-flown-for-combined-total-of-11-years-since-2022",
“https://www.reddit.com/r/gadgets/comments/182bftm/playstation_5_continues_to_outperform_the_xbox/”,
“https://www.techspot.com/news/100945-sony-playstation-5-continues-outperform-xbox-series-x.html”,
“https://www.reddit.com/r/technology/comments/180f4is/youtube_blames_ad_blockers_for_slow_load_times/”,
“https://www.reddit.com/r/technology/”,
“https://www.androidauthority.com/youtube-blames-ad-blockers-slow-load-times-3387523/”,
“https://www.reddit.com/r/technology/comments/181q3m4/bill_gates_says_a_3day_work_week_where_machines/”,
“https://www.businessinsider.com/bill-gates-comments-3-day-work-week-possible-ai-2023-11”,
"https://external-i.redd.it/bill-gates-says-a-3-day-work-week-where-machines-can-make-v0-lIu3sSx7Ox5k6AEZRJycQKp1fViwjZFaBOKppK-psh4.jpg?s=76aef656244424048a2957ff8419718fac84a7cb",
“https://www.reddit.com/r/technology/comments/180ped0/youtube_warns_it_might_make_your_viewing/”,
“https://www.businessinsider.com/youtube-warns-worse-viewing-experience-ad-blocker-2023-11”,
“https://www.reddit.com/r/technology/comments/17xniv6/exclusive_apple_to_pause_advertising_on_x_after/”,
“https://www.axios.com/2023/11/17/apple-twitter-x-advertising-elon-musk-antisemitism-ads”,
“https://www.reddit.com/r/technology/comments/17zq1jj/youtube_is_reportedly_slowing_down_videos_for/”,
“https://www.androidauthority.com/youtube-reportedly-slowing-down-videos-firefox-3387206/”,
“https://www.reddit.com/r/Futurology/comments/181iot8/new_jersey_moves_to_ban_new_gas_powered_vehicle/”,
“https://www.motor1.com/news/697490/new-jersey-bans-ice-vehicles-2035/”,
“https://www.reddit.com/r/technology/comments/17x2v2l/ibm_suspends_advertising_on_x_after_report_says/”,
“https://www.cnbc.com/2023/11/16/ibm-stops-advertising-on-x-after-report-says-ads-ran-by-nazi-content.html”,
“https://www.reddit.com/r/gadgets/comments/17zbqoh/the_magic_mouse_has_been_fixed_but_not_by_apple/”,
“https://www.digitaltrends.com/computing/magic-mouse-fixed-not-by-apple/?utm_source=reddit&utm_medium=pe&utm_campaign=pd”,
“https://www.reddit.com/r/technology/comments/17yeugr/elon_musk_vows_thermonuclear_lawsuit_as/”,
“https://reddit.com/t/walgreens/”,
“https://reddit.com/t/best_buy/”,
“https://reddit.com/t/novavax/”,
“https://reddit.com/t/spacex/”,
“https://reddit.com/t/tesla/”,
“https://reddit.com/t/cardano/”,
“https://reddit.com/t/dogecoin/”,
“https://reddit.com/t/algorand/”,
“https://reddit.com/t/bitcoin/”,
“https://reddit.com/t/litecoin/”,
“https://reddit.com/t/basic_attention_token/”,
“https://reddit.com/t/bitcoin_cash/”,
“https://reddit.com/t/the_real_housewives_of_atlanta/”,
“https://reddit.com/t/the_bachelor/”,
“https://reddit.com/t/sister_wives/”,
“https://reddit.com/t/90_day_fiance/”,
“https://reddit.com/t/wife_swap/”,
“https://reddit.com/t/the_amazing_race_australia/”,
“https://reddit.com/t/married_at_first_sight/”,
“https://reddit.com/t/the_real_housewives_of_dallas/”,
“https://reddit.com/t/my_600lb_life/”,
“https://reddit.com/t/last_week_tonight_with_john_oliver/”,
“https://reddit.com/t/kim_kardashian/”,
“https://reddit.com/t/doja_cat/”,
“https://reddit.com/t/iggy_azalea/”,
“https://reddit.com/t/anya_taylorjoy/”,
“https://reddit.com/t/jamie_lee_curtis/”,
“https://reddit.com/t/natalie_portman/”,
“https://reddit.com/t/henry_cavill/”,
“https://reddit.com/t/millie_bobby_brown/”,
“https://reddit.com/t/tom_hiddleston/”,
“https://reddit.com/t/keanu_reeves/”,
“https://www.redditinc.com”,
“https://ads.reddit.com?utm_source=web3x_consumer&utm_name=left_nav_cta”,
“https://www.reddithelp.com”,
“https://redditblog.com/”,
“https://www.redditinc.com/careers”,
“https://www.redditinc.com/press”,
“https://redditinc.com”
]
}
}

处理速率限制和错误

了解 Reddit 和 Crawlbase 的速率限制

  1. Reddit API 速率限制
  • Reddit API限速政策说明
  • 不同类型请求的不同速率限制(例如,读取与写入操作)
  • 如何检查您的应用程序的当前速率限制状态
  1. Crawlbase 抓取 API 速率限制
  • Crawlbase 施加的速率限制概述
  • 了解基于订阅计划的速率限制
  • 监控使用情况和可用配额

在 Python 脚本中实现速率限制处理

  1. Reddit API 的节奏请求
  • 调整请求以遵守速率限制的策略
  • 使用 Python 库(例如, time.sleep())用于有效的速率限制
  • 演示正确的速率限制处理的代码示例
  1. Crawlbase API 速率限制集成
  • 在对 Crawlbase API 的请求中合并速率限制检查
  • 调整Python脚本以动态调整请求率
  • 确保最佳使用而不超出分配的配额

处理常见错误和异常

  1. Reddit API 错误
  • Reddit API 返回的常见错误代码的识别
  • 处理 429(请求过多)和 403(禁止)等情况
  • 针对特定错误的故障排除和解决技术
  1. Crawlbase API 错误处理
  • 识别 Crawlbase 抓取 API 返回的错误
  • 优雅地处理 Python 脚本中的错误的策略
  • 有效解决问题的日志记录和调试实践
  1. 错误处理的一般最佳实践
  • 在 Python 脚本中实现健壮的 try- except 块
  • 记录执行后分析的错误
  • 将自动重试与指数退避策略相结合

数据处理与分析

以适当的格式存储抓取的数据

  1. 选择数据存储格式
  • 常见数据存储格式概述(JSON、CSV、SQLite等)
  • 基于数据结构影响存储格式选择的因素
  • 高效存储和检索的最佳实践
  1. 用Python实现数据存储
  • 演示如何以不同格式存储数据的代码示例
  • 使用Python库(例如json、csv、sqlite3)进行数据持久化
  • 处理大型数据集并优化存储效率

清理和预处理 Reddit 数据

  1. 数据清理技术
  • 识别和处理丢失或不一致的数据
  • 删除重复条目和不相关信息
  • 解决数据质量问题以进行准确分析
  1. Reddit 数据的预处理步骤
  • 文本数据的标记化和文本处理(帖子、评论)
  • 处理特殊字符、表情符号和 HTML 标签
  • 将时间戳转换为日期时间对象以进行时间分析

使用 Python 库进行基本数据分析

  1. 用于数据分析的 Pandas 简介
  • 用于数据操作和分析的 pandas 库概述
  • 将 Reddit 数据加载到 pandas DataFrames 中
  • 用于探索和汇总统计的基本 DataFrame 操作
  1. 使用 Matplotlib 和 Seaborn 分析 Reddit 数据
  • 创建可视化以了解数据模式
  • 绘制直方图、条形图和散点图
  • 定制可视化以有效讲述故事
  1. 从 Reddit 数据中提取见解
  • 对评论和帖子进行情绪分析
  • 识别流行话题和趋势
  • 提取用户参与度指标以获取更深入的见解

结论

我希望本指南可以帮助您使用 Python 和 Crawlbase Crawling API 有效地抓取 Reddit 数据。 如果您有兴趣将数据提取技能扩展到 Twitter、Facebook 和 Instagram 等其他社交平台,请查看我们的附加指南。

📜 如何抓取 Facebook

📜 如何抓取 Instagram

📜 如何抓取 Twitter

📜 如何抓取 Linkedin

📜 如何在 MySQL 中存储 Linkedin 个人资料

我们知道网络抓取可能很棘手,我们随时为您提供帮助。 如果您需要更多帮助或遇到任何问题,我们的 Crawlbase支持团队 已准备好提供专家帮助。 我们很高兴能够帮助您完成网络抓取项目!

常见问题

我可以在不违反 Reddit 服务条款的情况下抓取 Reddit 吗?

要在不违反规则的情况下抓取 Reddit,您必须严格遵守 Reddit 的政策。 Reddit 允许您使用公共信息,但如果您使用自动抓取,请遵守他们的 API 规则。 不要走得太快,遵循限制,并牢记用户的隐私。

如果您未经许可进行抓取,尤其是金钱内容,您的帐户可能会被暂停。 阅读并遵守 Reddit 规则非常重要,确保您以良好且合法的方式获取数据。 请密切关注其规则的任何变化,以确保您在负责网络抓取的同时仍然正确行事。

如何避免在抓取 Reddit 时被屏蔽?

为了确保您在抓取 Reddit 时不会被屏蔽,只需遵循一些好习惯即可。 首先,不要同时向 Reddit 的服务器发送太多请求,保持合理。 像人一样行事,在请求之间随机休息,并且在繁忙时间不要浪费太多时间。 遵守规则,不要抓取任何私人或敏感内容。 保持你的抓取代码是最新的,以防 Reddit 发生变化。 通过负责任地抓取,您可以增加保持畅通的机会。

如何分析和可视化抓取的 Reddit 数据?

要了解从 Reddit 获得的信息,您需要执行一些步骤。 首先,将数据整齐地分组,例如帖子、评论或用户内容。 使用 Pandas 等 Python 工具来清理数据。 使用 Matplotlib 和 Seaborn 制作图表,看看发生了什么。 通过查看数字来了解趋势、热门话题或用户的参与情况。

为了捕捉内容的氛围,TextBlob 等工具可以帮助进行词云和情感分析。 使用 Plotly 通过交互式内容让您的数据看起来很酷。 简而言之,通过混合数据组织、数字内容和炫酷图片,您可以从抓取的 Reddit 信息中学到很多东西。

我可以使用网络抓取从 Reddit 中提取哪些类型的数据?

在抓取 Reddit 时,您可以从帖子、评论和用户页面中获取大量信息,以及人们喜欢或不喜欢某事物的程度。 您可以选择想要获取信息的 Reddit 子版块、时间或用户。 这有助于收集不同的详细信息,例如流行的内容、用户喜欢的内容以及社区如何互动。 请记住,在这样做的同时遵守 Reddit 规则至关重要,以保持事情公平公正。 坚持正确的做法,你就会在 Reddit 上的网络抓取中处于有利的地位。