تدفع Google نحو 60 مليون دولار سنويًا مقابل ترخيص بيانات Reddit. ويُقال إن صفقة OpenAI تصل إلى 70 مليون دولار. هذا وحده يكفي لتدرك أن ما يوجد داخل سلاسل التعليقات يستحق هذا الاهتمام. وإذا سبق أن حاولت جمع سلاسل النقاش أو التعليقات أو بيانات المشاعر من Reddit يدويًا، فأنت تعرف جيدًا حجم الإحباط: تمرير لا ينتهي، نسخ ولصق متكرر، وفوضى تبويبات لا تنتهي.
قضيت جزءًا كبيرًا من الربع الماضي وأنا أساعد فريق Thunderbit في البحث عن الطرق التي يستخدمها الناس فعليًا لاستخراج بيانات Reddit في 2025. لقد تغيّر المشهد بشكل كبير منذ إعادة تسعير واجهة Reddit البرمجية في 2023، ومعظم الأدلة المتاحة على الإنترنت إما قديمة أو تشرح طريقة واحدة فقط. لذلك جمعت لك كل ما يعمل بالفعل الآن — أربع طرق مختلفة، من البرمجة الكاملة بـ Python إلى الاستخراج بدون كود — لتختار ما يناسب مستوى خبرتك وحالتك العملية. سواء كنت تبني مجموعة بيانات NLP، أو تراقب subreddit لرصد الإشارات إلى علامتك التجارية، أو تريد فقط جدولًا يحتوي على المنشورات الرائجة، فهذا الدليل سيفيدك.
ما المقصود باستخراج بيانات Reddit، ولماذا هو مهم؟
استخراج بيانات Reddit هو عملية جمع المنشورات والتعليقات وبيانات المستخدمين والبيانات الوصفية من صفحات Reddit أو من واجهته البرمجية بشكل آلي. بدلًا من التصفح اليدوي للخيوط ونسخ النصوص، تستخدم سكربتًا أو أداة لجمع بيانات منظمة على نطاق واسع.
ولماذا تهتم أصلًا؟ يستضيف Reddit أكثر من ويولّد ما يُقدّر بنحو . إنه المكان الذي يشارك فيه الناس آراءهم الصريحة حول المنتجات والخدمات والمنافسين والاتجاهات — وهي إشارات حقيقية يصعب جدًا العثور عليها في مواقع المراجعات المصقولة أو المدونات المؤسسية. وتدفع Google قرابة للحصول على ترخيص محتوى Reddit، بينما تُقال قيمة صفقة OpenAI بنحو . إذا كانت أكبر شركات الذكاء الاصطناعي في العالم تدفع أرقامًا بهذا الحجم مقابل هذه البيانات، فمن المفيد أن تتعلم كيف تصل إليها بنفسك.
لماذا تستخدم Python لاستخراج بيانات Reddit في 2025؟
Python هي اللغة الافتراضية لاستخراج بيانات Reddit — فمكتبات PRAW وrequests وBeautifulSoup وpandas تغطي كل خطوة من استدعاءات API إلى تصدير البيانات. لكن السبب يتجاوز الأدوات نفسها.
هذه أبرز حالات الاستخدام التي أراها في فرق الأعمال والبحث:
| حالة الاستخدام | من يستفيد | مثال |
|---|---|---|
| أبحاث السوق والتحقق من الفكرة | مدراء المنتجات، المؤسسون | تحليل r/SaaS أو r/Entrepreneur لاستخراج المشكلات المتكررة |
| تحليل المشاعر | فرق التسويق والعلامة التجارية | تتبع كيفية حديث الناس عن منتجك مقارنةً بالمنافسين |
| توليد العملاء المحتملين | فرق المبيعات | العثور على منشورات مثل "أبحث عن أداة تنجز X" في مجتمعات متخصصة |
| أفكار المحتوى | مسوقو المحتوى | رصد الأسئلة والموضوعات الرائجة في r/marketing أو r/SEO |
| الأبحاث الأكاديمية / NLP | الباحثون وعلماء البيانات | بناء مجموعات بيانات موسومة من خيوط التعليقات لتصنيف المشاعر |
| استخبارات تنافسية | فرق الاستراتيجية والعمليات | مراقبة شكاوى المستخدمين المتكررة في مجتمعات المنافسين |
وصلت قاعدة مستخدمي Reddit إلى ما يُقدّر بنحو ، مع — بزيادة 24% على أساس سنوي. وبعد تحديث Google الأساسي في أغسطس 2024، أصبح محتوى Reddit أكثر ظهورًا بحوالي في نتائج البحث العضوية.
الخلاصة: البيانات التي تستخرجها من Reddit هي بشكل متزايد نفس البيانات التي تعرضها Google للباحثين.
أي طريقة يجب أن تستخدم لاستخراج Reddit؟ (مقارنة سريعة)
السؤال الأكثر شيوعًا في منتديات استخراج Reddit هو حرفيًا: "أي طريقة يجب أن أستخدم؟" لذلك أعددت هذا الجدول. اختر صفّك وانطلق.
| المعيار | PRAW | نقطة نهاية .json | BeautifulSoup (HTML) | بدون كود (Thunderbit) |
|---|---|---|---|---|
| تعقيد الإعداد | متوسط (تطبيق API + تثبيت pip) | لا شيء (مجرد رابط) | متوسط (pip + فحص DOM) | منخفض جدًا (إضافة Chrome) |
| هل يتطلب مفتاح API؟ | نعم | لا | لا | لا |
| استخراج التعليقات | عميق (أشجار متداخلة) | محدود (الطبقة العليا) | تحليل يدوي | منظم بالذكاء الاصطناعي |
| الترقيم الصفحي | مدمج | يدوي (معامل after) | يدوي | تلقائي |
| تحديد المعدل | 100 طلب/دقيقة (يديره PRAW) | ~10 طلب/دقيقة (بدون مصادقة) | خطر حظر IP | تتكفل به الأداة |
| الأفضل لـ | مشاريع كاملة المزايا، والبحث | سحب سريع لمرة واحدة | التعلم/التخصيص | غير المبرمجين، والتصدير السريع |
| خيارات التصدير | CSV، JSON (كود يدوي) | JSON (خام) | مخصص (كود يدوي) | Excel، Google Sheets، Airtable، Notion |
إذا كنت تريد مشاريع Python متكاملة مع استخراج عميق للتعليقات، فابدأ بالطريقة الأولى (PRAW). إذا كنت تحتاج إلى سحب سريع للبيانات خلال 10 دقائق دون أي إعداد، فجرب الطريقة الثانية (حيلة .json). وإذا كنت تريد تعلم HTML scraping أو تحتاج حقولًا مخصصة، فاختر الطريقة الثالثة (BeautifulSoup). أمّا إذا كنت تفضّل تجاوز Python بالكامل والحصول على البيانات مباشرة، فانتقل إلى الطريقة الرابعة ().
ما الذي تغيّر: تحديث تسعير API في Reddit بين 2023 و2024 (وما الذي لا يزال مجانيًا)
تكاد لا تتحدث أي إرشادات عن هذا — وهو أهم سياق يجب معرفته لمن يستخدّم Reddit اليوم.
في يونيو 2023، قدّم Reddit لأول مرة منذ 2008 مستويات مدفوعة للوصول إلى API. وكانت النتيجة كبيرة:
- توقّف Pushshift عن الاستخدام العام. سحب Reddit وصول Pushshift إلى API في مايو 2023. الباحثون الذين اعتمدوا عليه (وقد استشهدت به أكثر من ) فقدوا مصدرهم الرئيسي للبيانات بين ليلة وضحاها. البديل للبيانات التاريخية هو ، لكن لا يوجد بديل عام مباشر للـ API الحي.
- توقفت تطبيقات الطرف الثالث. أُغلقت Apollo وReddit is Fun وSync وBaconReader وغيرها جميعًا بحلول 30 يونيو 2023، بعد أن ذكر Reddit لمطور Apollo رسوم API قد تصل إلى .
- أكثر من 8,500 subreddit أُغلقت احتجاجًا، بما في ذلك r/funny (40 مليون مشترك) وr/gaming وr/science ().
ما يزال مجانيًا في 2025:
لا تزال متاحة للاستخدام غير التجاري والشخصي والأكاديمي — بمعدل 100 طلب في الدقيقة لكل OAuth client ID. تعمل PRAW بشكل ممتاز ضمن هذه الفئة للاستخراج المتوسط الحجم. أمّا الوصول غير الموثق (بما في ذلك نقطة نهاية .json) فمحدد بحوالي 10 طلبات في الدقيقة.
الخلاصة العملية: بالنسبة لمهام الاستخراج الصغيرة إلى المتوسطة، تكفي الفئة المجانية وأكثر. أمّا للاستخدام واسع النطاق أو التجاري، فستحتاج إما إلى التواصل مع Reddit للحصول على وصول مؤسسي، أو استخدام نقطة نهاية .json أو BeautifulSoup (وهما لا يحتاجان إلى API keys)، أو استخدام أداة مثل Thunderbit لا تعتمد أصلًا على API الخاص بـ Reddit.
قبل أن تبدأ
- مستوى الصعوبة: من مبتدئ إلى متوسط (يختلف حسب الطريقة)
- الوقت المطلوب: حوالي 15–30 دقيقة للطرق 1–3؛ وحوالي 5 دقائق للطريقة 4
- ما ستحتاج إليه:
- تثبيت Python 3.8+ (للطرق 1–3)
- حساب Reddit (للطريقة 1)
- متصفح Chrome (للطريقة 4)
- (للطريقة 4)
الطريقة 1: كيفية استخراج Reddit باستخدام Python عبر PRAW (خطوة بخطوة)
تُعد PRAW (اختصار Python Reddit API Wrapper) أشهر وأفضل طريقة موثقة لاستخراج Reddit باستخدام Python. فهي تتولى المصادقة، وتحديد المعدل، والترقيم الصفحي نيابةً عنك، وهي ما تزال مدعومة بنشاط — أحدث إصدار مستقر هو PRAW 7.8.1 (أكتوبر 2024)، ويدعم Python من 3.8 إلى 3.13.
الخطوة 1: أنشئ تطبيق Reddit واحصل على بيانات API الخاصة بك
اذهب إلى وانزل إلى الأسفل. اضغط "are you a developer? create an app..."
املأ النموذج:
- الاسم: أي اسم وصفي (مثل: "my-reddit-scraper")
- نوع التطبيق: اختر script
- Redirect URI: أدخل
http://localhost:8080(مطلوب لكنه غير مستخدم لتطبيقات script) - الوصف: اختياري
اضغط Create app. ستظهر لك بيانات الاعتماد:
- client_id — السلسلة المكونة من 14 حرفًا الموجودة مباشرة تحت اسم التطبيق (وموسوعة بـ "personal use script")
- client_secret — الحقل المسمى "secret"
ستحتاج أيضًا إلى قبول و قبل اكتمال إنشاء التطبيق.
ملاحظة مهمة: منذ أواخر 2024، قد يحتاج المطورون الجدد إلى تقديم طلب وصول والانتظار حتى تتم الموافقة. هذه هي أكبر نقطة احتكاك لمستخدمي PRAW لأول مرة، ولا توجد طريقة لتجاوزها.
الخطوة 2: ثبّت PRAW وأنشئ مثيل Reddit
افتح الطرفية ونفّذ:
1pip install praw pandas
ثم أنشئ مثيل Reddit للقراءة فقط:
1import praw
2reddit = praw.Reddit(
3 client_id="YOUR_CLIENT_ID",
4 client_secret="YOUR_CLIENT_SECRET",
5 user_agent="python:reddit-scraper:v1.0 (by u/yourname)",
6)
7# reddit.read_only يكون True افتراضيًا لتطبيقات script بدون كلمة مرور
تنسيق user_agent مهم. Reddit يحدّ من السلاسل العامة مثل python-requests/2.x بشكل نشط. استخدم التنسيق الذي يوصي به Reddit: platform:app_id:version (by u/username).
الخطوة 3: اسحب المنشورات من subreddit
إليك كيفية جلب أفضل المنشورات من r/python خلال الشهر الماضي وتخزينها في DataFrame باستخدام pandas:
1import pandas as pd
2subreddit = reddit.subreddit("python")
3rows = []
4for post in subreddit.top(time_filter="month", limit=500):
5 rows.append({
6 "id": post.id,
7 "title": post.title,
8 "selftext": post.selftext,
9 "score": post.score,
10 "upvote_ratio": post.upvote_ratio,
11 "num_comments": post.num_comments,
12 "author": str(post.author) if post.author else "[deleted]",
13 "created_utc": post.created_utc,
14 "url": post.url,
15 "permalink": f"https://reddit.com{post.permalink}",
16 })
17df = pd.DataFrame(rows)
18print(df.head())
يمكنك استبدال .top() بـ .hot() أو .new() أو .controversial()، كما يقبل time_filter القيم "all" أو "day" أو "hour" أو "month" أو "week" أو "year".
تنبيه مهم: Reddit يفرض حدًا يقارب 1000 عنصر على أي قائمة، بغض النظر عن قيمة limit التي تحددها. هذا حد من جهة Reddit نفسه، وليس من PRAW.
الخطوة 4: صدّر بيانات Reddit إلى CSV أو Excel
1df.to_csv("reddit_python_top.csv", index=False)
2df.to_json("reddit_python_top.json", orient="records", lines=True)
تتعامل PRAW مع تحديد المعدل تلقائيًا — فهي تقرأ رؤوس X-Ratelimit-Remaining وX-Ratelimit-Reset في كل استجابة وتنتظر بين الطلبات عند الحاجة. بالنسبة للاستخراج المتوسط، نادرًا ما تحتاج إلى إضافة تأخيرات يدوية.
كيفية استخراج تعليقات Reddit باستخدام Python (خيوط متداخلة عميقة)
استخراج التعليقات هو المكان الذي يتعثر فيه معظم الناس.
Reddit يخزن التعليقات على شكل شجرة: يمكن لكل تعليق أن يضم تعليقات فرعية، وبعض الفروع تكون مطوية خلف روابط "load more comments". وفي عالم PRAW، تُجسَّد هذه الفروع المخفية على هيئة كائنات MoreComments.
إليك الصورة الذهنية:
1Submission (t3_abc123)
2├── Comment A (top-level)
3│ ├── Reply A1
4│ │ └── Reply A1a
5│ └── Reply A2
6├── Comment B (top-level)
7│ └── MoreComments (hidden — "load more comments")
8└── MoreComments (hidden — "continue this thread")
استخدام replace_more() لجلب كل التعليقات المخفية
تقوم الدالة replace_more() بالتنقل داخل شجرة التعليقات واستبدال كل عنصر نائب من نوع MoreComments بالتعليقات الفعلية التي يشير إليها:
1submission = reddit.submission(id="abcdef")
2submission.comments.replace_more(limit=10) # حد عملي للخيوط الكبيرة
3all_comments = submission.comments.list() # مسطحة بنمط breadth-first
عند ضبط limit=None سيتم استبدال كل عقدة MoreComments — لكن في خيط يحتوي على أكثر من 5,000 تعليق، قد يستغرق ذلك عدة دقائق لأن كل استبدال هو طلب API واحد يعيد نحو 100 تعليق كحد أقصى. بالنسبة للخيوط الكبيرة، أنصح بالبدء بـ limit=10 أو limit=20 وزيادة الرقم فقط إذا كنت بحاجة إلى اكتمال أكبر.
تسطيح التعليقات المتداخلة إلى جدول
1rows = []
2for c in all_comments:
3 rows.append({
4 "comment_id": c.id,
5 "parent_id": c.parent_id, # t1_xxx = تعليق أب، t3_xxx = المنشور
6 "depth": c.depth,
7 "author": str(c.author) if c.author else "[deleted]",
8 "body": c.body,
9 "score": c.score,
10 "created_utc": c.created_utc,
11 "is_submitter": c.is_submitter,
12 })
13comments_df = pd.DataFrame(rows)
التعليقات من المستوى الأول يكون parent_id الخاص بها يبدأ بـ t3_ (الاسم الكامل للمنشور). يوضح عمود depth مدى عمق كل تعليق داخل الشجرة — وهو مفيد للتصفية أو التصور. وأحد الأمور التي يجب الانتباه لها: عادةً لن يطابق len(all_comments) قيمة submission.num_comments لأن التعليقات المحذوفة أو المزالة أو التي تم تصفيتها من قِبل النظام لا تُدرج في الشجرة.
الطريقة 2: حيلة نقطة نهاية .json — استخراج Reddit بدون مفتاح API
أضف .json إلى أي رابط من روابط Reddit. هذا كل شيء. ستحصل على JSON منظم — دون مصادقة، أو تسجيل تطبيق، أو تثبيت pip.
مثال: https://www.reddit.com/r/python/hot.json
يتحدث المستخدمون عن هذه الحيلة كثيرًا، ومع ذلك تكاد لا تتناولها أي شروحات.
مقتطف Python يعمل بالفعل
1import requests
2headers = {"User-Agent": "python:reddit-scraper:v1.0 (by /u/yourname)"}
3r = requests.get(
4 "https://www.reddit.com/r/python/hot.json",
5 headers=headers,
6 params={"limit": 100},
7)
8data = r.json()
9for post in data["data"]["children"]:
10 p = post["data"]
11 print(p["title"], p["score"], p["num_comments"], p["author"])
رأس User-Agent بالغ الأهمية. Reddit يحظر أو يبطئ المستخدمين الذين يستعملون سلاسل عامة مثل python-requests/2.31.0 — وكما وثّق ، "هذا التحديد للمعدل يعتمد على user-agent." استخدم نفس التنسيق الوصفي المستخدم في PRAW.
كيفية التعامل مع الترقيم الصفحي باستخدام معامل after
نقطة نهاية .json تعيد حوالي 25 نتيجة افتراضيًا (وبحد أقصى 100 لكل طلب). للحصول على المزيد، استخدم المؤشر after من الاستجابة:
1import requests, time
2headers = {"User-Agent": "python:reddit-scraper:v1.0 (by /u/yourname)"}
3after = None
4all_posts = []
5for _ in range(10): # حتى ~1000 منشور
6 r = requests.get(
7 "https://www.reddit.com/r/python/hot.json",
8 headers=headers,
9 params={"limit": 100, "after": after},
10 )
11 data = r.json()
12 all_posts.extend(data["data"]["children"])
13 after = data["data"].get("after")
14 if not after:
15 break
16 time.sleep(6) # حوالي 10 طلبات في الدقيقة = طلب كل 6 ثوانٍ
قيمة after هي رمز مؤشر (cursor token) بصيغة t3_xxxxxx. ومثل PRAW، الحد الأقصى الصلب يقارب 1000 عنصر إجمالًا عبر الطلبات المتعددة.
قيود طريقة .json
- لا تتيح الوصول العميق لشجرة التعليقات — تحصل على التعليقات من المستوى الأول مع مستوى واحد فقط من عناصر "more"، لكن من دون توسيع تلقائي كما في
replace_more()الخاصة بـ PRAW - للقراءة فقط — لا تصويت، ولا نشر، ولا إدارة
- حوالي 10 طلبات في الدقيقة لحركة المرور غير الموثقة — الحلقات العدوانية تؤدي إلى أخطاء 429
- نفس حد 1000 عنصر الموجود في الـ API الموثق
هذه الطريقة مناسبة أكثر لعمليات سحب سريعة لمرة واحدة، أو النمذجة الأولية، أو الحالات التي لا تريد فيها تسجيل تطبيق API.
الطريقة 3: كيفية استخراج Reddit باستخدام BeautifulSoup (تحليل HTML)
إذا سبق لك القيام بأي نوع من استخراج البيانات من الويب، فربما تعرف BeautifulSoup جيدًا. الفكرة الأساسية هنا بالنسبة لـ Reddit تحديدًا: استخدم old.reddit.com بدل الواجهة الجديدة المبنية على React. الواجهة القديمة تُعرض من الخادم، أخف، وأسهل بكثير في التحليل — وتؤكد أنها ما تزال تعمل وسهلة على أدوات الاستخراج.
إعداد Requests وBeautifulSoup
1pip install requests beautifulsoup4
1import requests
2from bs4 import BeautifulSoup
3headers = {"User-Agent": "python:reddit-scraper:v1.0 (by /u/yourname)"}
4r = requests.get("https://old.reddit.com/r/python/", headers=headers)
5soup = BeautifulSoup(r.text, "html.parser")
استخراج بيانات المنشورات من DOM
في old.reddit.com، يوجد كل منشور داخل <div> يحمل الفئة thing. وأكثر المحددات ثباتًا هي خصائص data-*:
1for thing in soup.select("div#siteTable > div.thing"):
2 title_el = thing.select_one("a.title")
3 print({
4 "title": title_el.get_text(strip=True) if title_el else None,
5 "author": thing.get("data-author"),
6 "score": thing.get("data-score"),
7 "comments": thing.get("data-comments-count"),
8 "domain": thing.get("data-domain"),
9 "url": title_el.get("href") if title_el else None,
10 })
يفضّل الاعتماد على خصائص data-* بدل المحددات المتداخلة المبنية على الفئات — فقد عدّل Reddit أسماء الفئات عبر السنوات، لكن خصائص البيانات تُولد من القالب نفسه ونادرًا ما تتغير.
التعامل مع الترقيم الصفحي في old.reddit.com
1import time
2url = "https://old.reddit.com/r/python/"
3all_rows = []
4while url:
5 r = requests.get(url, headers=headers)
6 soup = BeautifulSoup(r.text, "html.parser")
7 for thing in soup.select("div#siteTable > div.thing"):
8 title_el = thing.select_one("a.title")
9 all_rows.append({
10 "title": title_el.get_text(strip=True) if title_el else None,
11 "author": thing.get("data-author"),
12 "score": thing.get("data-score"),
13 "comments": thing.get("data-comments-count"),
14 "url": title_el.get("href") if title_el else None,
15 })
16 nxt = soup.select_one("span.next-button a")
17 url = nxt["href"] if nxt else None
18 time.sleep(2) # تأخير احترامًا للموقع
متى تستخدم BeautifulSoup بدل PRAW؟
تعد BeautifulSoup خيارًا جيدًا عندما تريد تعلّم استخراج DOM، أو لا ترغب في تسجيل تطبيق OAuth، أو تحتاج إلى حقول مخصصة لا تعرضها PRAW. لكنها أكثر هشاشة — قد يتغير هيكل HTML دون إنذار، وحظر الـ IP أصبح أكثر صرامة في 2025 مما كان عليه سابقًا، وعليك كتابة كل منطق الترقيم الصفحي ومعالجة الأخطاء بنفسك. من ناحية الاعتمادية والعمق، تتفوق PRAW.
الطريقة 4: كيفية استخراج Reddit بدون كود باستخدام Thunderbit
اعتراف صغير: كثير من الناس الذين يبحثون عن "how to scrape Reddit with Python" لا يريدون كتابة Python أصلًا. إنهم يريدون البيانات. إذا كنت واحدًا منهم، فهذا القسم هو مخرجك السريع.
هو امتداد Chrome مدعوم بالذكاء الاصطناعي بنيناه خصيصًا لهذا النوع من الاستخدام — استخراج بيانات منظمة من صفحات الويب من دون كتابة كود.
الخطوة 1: ثبّت Thunderbit وافتح صفحة Reddit
ثبّت ، ثم انتقل إلى أي صفحة subreddit أو منشور على Reddit (مثلًا: reddit.com/r/python).
لا حاجة لمفتاح API، ولا بيئة Python، ولا أوامر طرفية.
الخطوة 2: اضغط "AI Suggest Fields" ودع الذكاء الاصطناعي يقرأ الصفحة
انقر على أيقونة Thunderbit في شريط أدوات المتصفح، ثم اضغط "AI Suggest Fields." يقوم الذكاء الاصطناعي في Thunderbit بفحص الصفحة واقتراح أعمدة تلقائيًا مثل عنوان المنشور، اسم المستخدم، عدد التصويتات، عدد التعليقات، تاريخ النشر، وصف المنشور، اسم المجتمع، ورابط المنشور.
يمكنك إضافة الأعمدة أو حذفها أو إعادة تسميتها حسب الحاجة. مثلًا، إذا كان يهمك فقط عنوان المنشور والنتيجة، فاحذف الحقول الأخرى.
الخطوة 3: اضغط "Scrape" وصدّر بياناتك
اضغط "Scrape" فيستخرج Thunderbit البيانات مع التعامل مع الترقيم الصفحي تلقائيًا. وبمجرد امتلاء الجدول، يمكنك التصدير مباشرة إلى Excel أو Google Sheets أو Airtable أو Notion — من دون كتابة أي كود CSV.
وللحصول على بيانات أعمق، تتيح لك ميزة subpage scraping في Thunderbit الدخول إلى كل خيط على حدة وإثراء الجدول ببيانات التعليقات تلقائيًا. من الناحية المفاهيمية، هذا شبيه بدالة replace_more() في PRAW — لكن من دون كتابة سطر واحد من الكود.
ميزة إضافية: استخراج مجدول للمراقبة المستمرة على Reddit
إذا كنت بحاجة إلى متابعة subreddit يوميًا — مثل مراقبة الإشارات إلى العلامة التجارية في r/SaaS أو متابعة نقاشات المنافسين في مجتمع متخصص — فإن المجدول في Thunderbit يتولى عمليات التشغيل المتكررة. أنت تصف الفترة الزمنية بلغة بسيطة (مثل: "كل يوم عمل في الساعة 9 صباحًا")، والأداة تتكفل بالباقي، وتسلّم البيانات الجديدة إلى جدول البيانات أو قاعدة البيانات المتصلة.
يمكنك معرفة المزيد عن قدرات Thunderbit في استخراج Reddit عبر .
نصائح وأفضل الممارسات لاستخراج Reddit باستخدام Python
تعلمت معظم هذه الدروس بالطريقة الصعبة — وهي تنطبق بغض النظر عن الطريقة التي اخترتها أعلاه.
احترم شروط الخدمة وحدود المعدل في Reddit
تنص الخاصة بـ Reddit صراحةً على حظر الاستخراج التجاري من دون موافقة خطية — وهذا ينطبق على جميع طرق الوصول، وليس على الـ API فقط. للاستخدام الشخصي والأكاديمي والبحث الداخلي، تُعد فئة OAuth المجانية وسير العمل في Thunderbit ضمن الحدود المعقولة للاستخدام.
ملخص سريع لحدود المعدل:
| الحالة | الحد | ما الذي يحدث؟ |
|---|---|---|
| مصادَق عليه (OAuth) | 60–100 طلب/دقيقة | تديرها PRAW تلقائيًا |
| غير مصادَق عليه (.json, HTML) | حوالي 10–30 طلب/دقيقة | خطأ 429 Too Many Requests |
| User-Agent عام | تقييد شديد | خطأ 403 Forbidden أو حظر صامت |
احرص دائمًا على تعيين سلسلة User-Agent وصفية. هذا هو السبب الأكثر شيوعًا في ظهور أخطاء 429 أو 403 لدى من يجربون الاستخراج لأول مرة.
خزّن بياناتك ونظّمها بشكل نظيف
- استخدم DataFrames في pandas مع ترتيب أعمدة واضح لتسهيل التصدير إلى CSV/Excel بشكل متوقع
- حوّل
created_utcإلى طابع زمني مقروء:pd.to_datetime(df["created_utc"], unit="s") - أزل التكرارات بالاعتماد على
idعند الاستخراج عبر عدة ترتيبات فرز (hot وnew وtop غالبًا تتداخل) - تعامل مع المؤلفين المحذوفين هكذا:
str(post.author) if post.author else "[deleted]"
تعامل مع الأخطاء الشائعة بسلاسة
| الخطأ | السبب | الحل |
|---|---|---|
| 429 Too Many Requests | تجاوز حد المعدل (60-100 طلب/دقيقة لـ OAuth) | طبّق exponential backoff؛ وافحص رأس X-Ratelimit-Reset |
| 403 Forbidden | User-Agent سيئ أو IP محظور | استخدم User-Agent فريدًا وواضحًا؛ وتأكد من أن تطبيق OAuth نشط |
المؤلف None | حساب محذوف أو موقوف | استخدم if post.author else "[deleted]" |
prawcore.TooManyRequests | تم تشغيل حد التخزين المؤقت للمعدل في PRAW | زد ratelimit_seconds أو وزّع الطلبات بالتساوي |
| أخطاء 5xx أو 413 في الأشجار الكبيرة | ضغط على خوادم Reddit في الخيوط العميقة | لفّ replace_more() بمنطق إعادة المحاولة؛ وقلّل عمق التكرار |
حالات استخدام استخراج Reddit: ماذا يمكنك أن تفعل بالبيانات؟
الاستخراج هو الخطوة الأولى فقط. إليك ما يحقق الأثر فعلًا:
- فرق المبيعات: راقب مجتمعات مثل r/SaaS وr/smallbusiness وr/Entrepreneur بحثًا عن منشورات من نوع "أبحث عن أداة تنجز X". ثم مرّر المطابقات إلى قوائم العملاء المحتملين أو مسارات العمل في CRM. استخدم المجدول في Thunderbit للمراقبة اليومية.
- فرق التسويق والمحتوى: تتبع الإشارات إلى العلامة التجارية، وحلّل اتجاهات المشاعر، واستخرج الأسئلة الرائجة لأفكار المحتوى. ويمكنك دمج صادرات Reddit مع Google Sheets لتعاون الفريق.
- التجارة الإلكترونية والعمليات: راقب نقاشات المنتجات المنافسة لاكتشاف الشكاوى المتكررة. تعد مجتمعات مثل r/BuyItForLife والمجتمعات المتخصصة في المجالات المختلفة كنوزًا من ملاحظات المنتجات.
- الباحثون والمحللون: ابنِ مجموعات بيانات NLP — فقد استخدمت أوراق أكاديمية في 2024 مجموعات بيانات من إلى لتصنيف المشاعر والانفعالات. كما أن جمع بيانات PRAW يمكن الاستشهاد به في المراجعة العلمية.
إذا كنت تريد التعمق أكثر في كيفية أو ، فقد تناولنا هذه المسارات بالتفصيل في مدونة Thunderbit.
الخلاصة
استخراج Reddit في 2025 لا يشبه إطلاقًا ما كان عليه قبل عامين. تغييرات API في 2023 قضت على Pushshift، وأغلقت تطبيقات الطرف الثالث المحبوبة، وقدّمت مستويات مدفوعة.
لكن الفئة المجانية ما تزال حية ومناسبة للاستخدام الشخصي والأكاديمي، وهناك طرق أكثر من أي وقت مضى للحصول على البيانات.
إليك خلاصة سريعة لكل طريقة:

سواء كنت محترف Python أو تفضّل جدول بيانات قبل الغداء، فإحدى هذه الطرق الأربع ستوصلك إلى هدفك. وإذا كنت تفضّل تجاوز الكود تمامًا، يمكنك ورؤية كيف يتعامل مع Reddit خلال بضع نقرات فقط. وإذا أردت مواصلة تحسين مهاراتك في استخراج البيانات بـ Python، فاحفظ هذا الدليل في مفضلاتك — سأقوم بتحديثه مع استمرار تطور مشهد Reddit.
ولمزيد من المعلومات عن أساليب استخراج البيانات من الويب، اطّلع على أدلتنا حول ، و، و.
الأسئلة الشائعة
هل من القانوني استخراج بيانات Reddit باستخدام Python؟
تنص الخاصة بـ Reddit على حظر الاستخراج التجاري دون موافقة خطية. وتتوفر فئة OAuth المجانية للاستخدام الشخصي وغير التجاري والأكاديمي. ويشمل هذا الإطار القانوني جميع طرق الوصول، سواء استخدمت API أو نقطة نهاية .json أو استخراج HTML. تحقّق دائمًا من الشروط الحالية في Reddit قبل الاستخراج على نطاق واسع.
هل لا تزال PRAW تعمل بعد تغييرات API في Reddit عام 2023؟
نعم. ما تزال PRAW 7.8.1 (أكتوبر 2024) مدعومة بنشاط، وتعمل تلقائيًا ضمن . وقد أثّرت تغييرات التسعير في 2023 أساسًا على الاستخدام التجاري وعالي الحجم، لا على أنماط الاستخراج المعتادة عبر PRAW.
هل يمكنني استخراج Reddit من دون مفتاح API؟
نعم — كل من نقطة نهاية .json وتحليل HTML عبر BeautifulSoup يعملان من دون مفاتيح API. كما أن لا يحتاج إلى مفتاح API أيضًا. ومع ذلك، تبقى الطرق الثلاث جميعها خاضعة لشروط خدمة Reddit عند الاستخدام التجاري.
كيف أستخرج تعليقات Reddit وليس المنشورات فقط؟
باستخدام PRAW، استعمل submission.comments.replace_more(limit=10) ثم submission.comments.list() لتسطيح شجرة التعليقات المتداخلة إلى قائمة. ومع Thunderbit، استخدم subpage scraping لإغناء استخراج قائمة المنشورات تلقائيًا ببيانات التعليقات من كل خيط.
ما أسرع طريقة لاستخراج Reddit بدون برمجة؟
يتيح لك استخراج منشورات وتعليقات Reddit خلال نقرتين وتصديرها مباشرة إلى Excel أو Google Sheets أو Airtable أو Notion — من دون Python، ولا مفتاح API، ولا أي إعداد مطلوب.
اعرف المزيد