تعلّم كيفية استخراج فيديوهات TikTok باستخدام Python

آخر تحديث في April 14, 2026

يضمّ TikTok اليوم ما يقارب ، ويُقدَّر أن المبدعين يرفعون نحو 23 مليون فيديو كل يوم. وإذا سبق لك أن حاولت جمع بيانات حتى من جزء بسيط من هذا السيل الهائل، فأنت تعرف تمامًا قدّ إيش الموضوع متعب.

غالبًا يصير السيناريو كذا: تبحث عن "scrape TikTok videos with Python"، تنسخ مقطعًا من أحد الشروحات (أو تطلب من ChatGPT يكتبه)، ثم تشغّله وتنتظر… ولا يطلع لك شيء. HTML فاضي. خطأ 403. أو الرسالة المزعجة "Process finished with exit code 0" من غير أي مخرجات. شفت هذا التكرار في عشرات مشكلات GitHub ونقاشات Reddit، ولهذا كتبت هذا الدليل. هنا بنغطي ثلاث طرق باستخدام Python تشتغل فعلًا في عام 2025، مع شرح كامل لتنزيل ملفات الفيديو .mp4 نفسها (مو بس البيانات الوصفية، وهو الشيء اللي تتوقف عنده أغلب الشروحات الثانية)، بالإضافة إلى جدول مقارنة يساعدك تختار الطريقة الأنسب لحالتك. وإذا ما كنت تحتاج Python أصلًا، فبأعرض لك أيضًا بدائل بدون كود مثل تعطيك نفس البيانات تقريبًا في خطوتين.

ماذا يعني فعلًا "استخراج فيديوهات TikTok"؟

قبل ما نبدأ بالكود، لازم نوضح المقصود بعبارة "scrape TikTok videos"، لأن المصطلح هذا يشير لشيئين مختلفين جدًا:

  1. استخراج البيانات الوصفية للفيديو: مثل الوصف، الوسوم، عدد الإعجابات، التعليقات، المشاركات، المشاهدات، تاريخ النشر، ومعلومات صاحب الحساب. وهذا هو الشيء اللي تركز عليه أغلب الشروحات.
  2. تنزيل ملفات الفيديو نفسها (.mp4): يعني حفظ الفيديو فعليًا على جهازك. وهذا غالبًا هو اللي يريده الناس فعليًا لما يكتبون "scrape TikTok videos" — وهو الجزء اللي نادرًا ما أحد يشرحه.

هذا الدليل يغطي الاثنين معًا. كل طريقة هنا تقدر تستخرج البيانات الوصفية وتعطيك أيضًا روابط التنزيل اللي تحتاجها لحفظ ملفات .mp4.

لماذا تستخدم Python لاستخراج فيديوهات TikTok؟

مع ومع تحقيق TikTok Shop لأكثر من ، صارت قيمة بيانات TikTok التجارية ضخمة جدًا. وهنا أكثر حالات الاستخدام شيوعًا:

| حالة الاستخدام | ما الذي تستخرجه | لمن يناسب | |---|---|---| | أبحاث المؤثرين والتسويق | معدلات التفاعل، عدد المتابعين، صيغ المحتوى، أداء الوسوم | فرق التسويق، الوكالات | | استراتيجية المحتوى | الوسوم الرائجة، صيغ الفيديو الفيروسية، وتيرة النشر | صنّاع المحتوى، مدراء وسائل التواصل | | مراقبة العلامة التجارية | الإشارات، وصول الحملات، مشاعر الجمهور | مدراء العلامات التجارية، فرق العلاقات العامة | | الذكاء التنافسي | أداء فيديوهات المنافسين، المواد الإعلانية، قوائم TikTok Shop | التجارة الإلكترونية، فرق المنتجات | | أبحاث السوق | الاتجاهات الناشئة، سلوك الجمهور، اكتشاف المنتجات | المحللون، صناديق التحوط، شركات الأبحاث | | الأرشفة والامتثال | ملفات الفيديو للمراجعة الداخلية أو حفظ السجلات | الشؤون القانونية، الامتثال، الوكالات |

الرهان التجاري هنا حقيقي: من المتوقع أن تصل عائدات إعلانات TikTok في الولايات المتحدة إلى 23.4 مليار دولار في 2026، كما أن المبدعين المعتمدين على التسويق بالعمولة يحققون في أبرز فئات TikTok Shop. إذا كنت تعمل في التجارة الإلكترونية أو تسويق المؤثرين، فهذه البيانات تساوي فلوسًا فعلية.

لماذا يفشل كود Python البسيط على TikTok؟

إذا جرّبت شيء مشابه من قبل وما وصلت لنتيجة، فأنت لست وحدك:

1import requests
2from bs4 import BeautifulSoup
3resp = requests.get("https://www.tiktok.com/@someuser")
4soup = BeautifulSoup(resp.text, "html.parser")
5# ...then nothing useful is in the HTML

السبب بسيط: TikTok من أصعب المنصات في الاستخراج. فالأمر الأساسي requests.get() غالبًا يرجّع لك غلاف HTML شبه فاضي، لأن المحتوى الفعلي ينرسم عبر JavaScript داخل المتصفح. وفوق هذا، TikTok يطبّق نظام قوي لمكافحة الروبوتات يشمل اكتشاف السلوك، وبصمة TLS، و تولّد توقيعات الطلبات، بالإضافة إلى محددات CSS ديناميكية تتغير بدون أي تنبيه.

tiktok-anti-bot-wall.webp

ووفقًا لتقرير Imperva 2025 Bad Bot، تجاوزت حركة المرور الآلية حركة البشر لأول مرة في 2024 — يعني صار الروبوت يمثلون . وTikTok واعي بهذا الشيء وبنى دفاعاته على هذا الأساس.

هنا جدول تشخيصي سريع يساعدك تعرف وين المشكلة وتروح للطريقة المناسبة:

| العَرَض | السبب المحتمل | الطريقة التي تحل المشكلة | |---|---|---| | HTML فارغ / لا توجد بيانات | المحتوى يُرسم عبر JavaScript؛ وrequests لا ينفّذ JavaScript | الطريقة 1 (JSON المخفي) أو الطريقة 3 (Playwright) | | 403 / تم رفض الوصول | رؤوس طلبات مفقودة أو غير صحيحة؛ أو اكتشاف مكافحة الروبوتات | الطريقة 1 مع رؤوس صحيحة | | يعمل مرة واحدة ثم يتوقف | تحديد المعدل / حظر عنوان IP | تدوير البروكسيات (في كل الطرق) | | تظهر شاشة تسجيل الدخول | الحاجة إلى جلسة/ملفات تعريف ارتباط | الطريقة 3 (المتصفح مع جلسة محفوظة) | | كود من ChatGPT لا يرجّع شيء | تغيّرت بنية TikTok منذ بيانات تدريب النموذج | الطرق الثلاث كلها (أساليب محدثة) |

عتبة تحديد المعدل تقريبًا 30–60 طلبًا في الدقيقة لكل عنوان IP قبل ما تبدأ الحواجز الخفيفة أو اختبارات CAPTCHA بالظهور. وعناوين IP الخاصة بمراكز البيانات تُحظر خلال دقائق، لذلك صارت البروكسيات السكنية أو المحمولة شبه ضرورية لأي حجم عمل حقيقي.

نظرة عامة: 3 طرق لاستخراج فيديوهات TikTok باستخدام Python

هذه هي الخريطة العامة. لكل طريقة مزايا وقيود مختلفة، وأنا بشرح الطرق الثلاث كلها مع كود يشتغل فعلًا:

  1. استخراج JSON المخفي — تحليل وسم <script> المدمج في صفحات TikTok والذي يحمل الاسم __UNIVERSAL_DATA_FOR_REHYDRATION__. هذه أسرع وأسهل طريقة وما تحتاج متصفح.
  2. واجهة TikTok الداخلية — استدعاء نقطة النهاية غير الموثقة /api/post/item_list/ مباشرةً للحصول على بيانات جماعية مع ترقيم يعتمد على cursor.
  3. أتمتة المتصفح باستخدام Playwright — عرض الصفحات داخل متصفح headless للتعامل مع التمرير اللانهائي، والمحتوى الديناميكي، وشاشات تسجيل الدخول.

تقدر أيضًا تستخدم الطرق الثلاث لتنزيل ملفات الفيديو .mp4 نفسها — وبشرح هذا في قسم مخصص بعد ما نخلص الطرق. وفي النهاية بتلقى جدول مقارنة كامل عشان تقدر تتخذ قرار واضح.

الطريقة 1: استخراج فيديوهات TikTok باستخدام JSON المخفي (مناسبة للمبتدئين)

هذه هي الطريقة اللي أنصح تبدأ بها. TikTok يضمّن كتلة ضخمة من JSON داخل وسم <script> يحمل المعرّف __UNIVERSAL_DATA_FOR_REHYDRATION__ في أغلب عمليات تحميل الصفحات. هذه الكتلة تحتوي على كل بيانات الملف الشخصي والفيديو التي كان JavaScript في الواجهة الأمامية سيعرضها عادةً — وهذا يعني أنك تقدر تحصل عليها بطلب HTTP واحد فقط، من دون الحاجة إلى متصفح.

ما الذي تحتاجه؟

  • Python 3.8+
  • requests (أو httpx)
  • beautifulsoup4 (أو parsel)
  • رؤوس طلبات مناسبة: User-Agent، وReferer، وAccept-Language

ثبّت الحزم المطلوبة:

1pip install requests beautifulsoup4

خطوة بخطوة: استخراج بيانات فيديو TikTok من وسم script

الخطوة 1: أرسل طلب GET مع رؤوس متصفح واقعية.

هنا أغلب المبتدئين يتعثرون. إذا أرسلت requests.get() عادي بدون رؤوس، فغالبًا TikTok يرجّع 403 أو صفحة CAPTCHA. تحتاج على الأقل User-Agent حديث خاص بمتصفح، ومعه رأس Referer.

1import requests
2from bs4 import BeautifulSoup
3import json
4url = "https://www.tiktok.com/@charlidamelio"
5headers = {
6    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
7    "Referer": "https://www.tiktok.com/",
8    "Accept-Language": "en-US,en;q=0.9",
9}
10resp = requests.get(url, headers=headers)

الخطوة 2: حلّل HTML وحدد وسم hydration script.

1soup = BeautifulSoup(resp.text, "html.parser")
2script_tag = soup.find("script", id="__UNIVERSAL_DATA_FOR_REHYDRATION__")

إذا كانت قيمة script_tag هي None، فإما أن TikTok حظرك (تحقق من رمز الحالة)، أو أنه غيّر معرّف الوسم (وهذا نادر لكنه ممكن).

الخطوة 3: حمّل محتوى script بوصفه JSON.

1data = json.loads(script_tag.string)

الخطوة 4: تنقّل داخل بنية JSON لاستخراج بيانات الفيديو.

الهيكل يتفرع تحت __DEFAULT_SCOPE__. وفي صفحة الملف الشخصي للمستخدم:

1user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
2user_info = user_detail["userInfo"]
3# إحصاءات الملف الشخصي
4stats = user_info["stats"]
5print(f"Followers: {stats['followerCount']}, Likes: {stats['heartCount']}")
6# قائمة الفيديوهات (الصفحة الأولى فقط)
7item_list = user_detail.get("itemList", [])
8for video in item_list:
9    print(video["desc"])  # الوصف
10    print(video["stats"]["playCount"])  # المشاهدات
11    print(video["video"]["playAddr"])  # رابط تنزيل الفيديو (بدون علامة مائية)
12    print(video["video"]["downloadAddr"])  # رابط تنزيل الفيديو (مع العلامة المائية)

الخطوة 5: استخرج روابط تنزيل الفيديو.

غالبًا playAddr يوفّر نسخة أنظف من الفيديو (وعادة بدون شعار TikTok)، بينما downloadAddr يحتوي على العلامة المائية المعتادة. وكلا الرابطين يودّي مباشرة إلى ملف .mp4 — لكن يحتاجان إلى رؤوس محددة عند التنزيل (وبشرح هذا في قسم التنزيل أدناه).

الآن المفروض عندك قائمة بكائنات بيانات الفيديو، وكل واحد فيها يحتوي على الوصف، والإحصاءات، ووقت الإنشاء، والوسوم (داخل challenges[] وtextExtra)، وروابط الفيديو المباشرة.

حدود طريقة JSON المخفي

  • تلتقط فقط بيانات التحميل الأول للصفحة — غالبًا أول نحو 30 فيديو في الملف الشخصي
  • ما تتعامل مع التمرير اللانهائي أو الترقيم الصفحي (ما فيه "صفحة تالية" تطلبها)
  • إذا غيّر TikTok معرّف وسم script أو بنية JSON، بيتعطل المحلل — وهذا يصير بشكل دوري، و يساعدك تكتشفه بدري
  • الأفضل لـ: الاستخراج السريع لملف شخصي، أو سحب بيانات لمرة واحدة، أو لما تحتاج فقط أحدث الفيديوهات

الطريقة 2: استخراج فيديوهات TikTok عبر الواجهة الداخلية (API)

الواجهة الأمامية في TikTok ما تحمّل كل الفيديوهات دفعة وحدة — بل تسوي طلبات XHR إلى نقاط نهاية داخلية أثناء التمرير. وأهم نقطة لنشر فيديوهات المستخدمين هي /api/post/item_list/. تقدر تستدعي هذه النقطة مباشرة من Python، وهذا يعطيك ترقيمًا يعتمد على cursor وإمكانية الوصول إلى كل فيديوهات الملف الشخصي، مو بس الصفحة الأولى.

كيف تعثر على نقطة نهاية الـ API الداخلية

افتح Chrome DevTools في صفحة ملف شخصي على TikTok، وروح إلى تبويب Network، ثم فعّل فلتر XHR، وبعدها مرّر لأسفل. بتشوف طلبات إلى روابط مثل:

1https://www.tiktok.com/api/post/item_list/?WebIdLastTime=...&aid=1988&count=35&cursor=0&secUid=...

المعلمات المهمة هي:

  • secUid — المعرّف الفريد للملف الشخصي (تقدر تستخرجه من JSON في الطريقة 1، ضمن userInfo.user.secUid)
  • cursor — موضع الترقيم الصفحي (يبدأ من 0، وكل استجابة ترجع قيمة المؤشر التالية)
  • count — عدد العناصر في الصفحة (غالبًا 30–35)

خطوة بخطوة: استعلم عن الواجهة الداخلية لـ TikTok باستخدام Python

الخطوة 1: احصل على secUid الخاص بالملف المستهدف.

تقدر تجيبه من JSON المخفي (الطريقة 1) أو من HTML صفحة الملف الشخصي.

الخطوة 2: أنشئ طلب الـ API وأرسله.

1import requests
2import json
3sec_uid = "MS4wLjABAAAA..."  # من الطريقة 1
4api_url = "https://www.tiktok.com/api/post/item_list/"
5params = {
6    "aid": "1988",
7    "secUid": sec_uid,
8    "count": 35,
9    "cursor": 0,
10}
11headers = {
12    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
13    "Referer": "https://www.tiktok.com/",
14}
15resp = requests.get(api_url, params=params, headers=headers)
16data = resp.json()

الخطوة 3: حلّل الاستجابة.

كل عنصر داخل data["itemList"] يحتوي على نفس البنية الموجودة في الطريقة 1 — مثل desc، وstats، وvideo.playAddr، وvideo.downloadAddr، وغيرها.

الخطوة 4: انتقل عبر جميع الفيديوهات.

1all_videos = []
2cursor = 0
3has_more = True
4while has_more:
5    params["cursor"] = cursor
6    resp = requests.get(api_url, params=params, headers=headers)
7    data = resp.json()
8    items = data.get("itemList", [])
9    all_videos.extend(items)
10    has_more = data.get("hasMore", False)
11    cursor = data.get("cursor", 0)
12    print(f"Fetched {len(items)} videos, total: {len(all_videos)}, hasMore: {has_more}")
13print(f"Total videos scraped: {len(all_videos)}")

في كل دورة، بتاخذ دفعة جديدة ومؤشر cursor جديد. وتستمر الحلقة إلى أن تصير hasMore بقيمة False.

حدود طريقة الواجهة الداخلية

  • TikTok يغيّر هذه النقاط النهائية والمعلمات المطلوبة باستمرار — لذلك هذه من أكثر الطرق احتياجًا للصيانة. في الأشهر الأخيرة، بدأت بعض الطلبات تتطلب msToken أو X-Bogus أو غيرها من معلمات التوقيع التي يولدها (وموضوع محاكاتها ببايثون خالص مو سهل أبدًا).
  • قد تحتاج إلى ملفات تعريف ارتباط جلسة أو رموز إضافية لبعض أنواع البيانات
  • تحديد المعدل بناءً على عنوان IP ما زال ساريًا — لذلك يفضّل تدوير البروكسيات
  • إذا بدأت تحصل على مصفوفات itemList فارغة، فغالبًا msToken صار قديمًا (ويتغير تقريبًا كل 10 ثوانٍ في المتصفح)
  • الأفضل لـ: استخراج البيانات بالجملة لما تحتاج كل فيديوهات الملف الشخصي، وليس بس الصفحة الأولى

الطريقة 3: استخراج فيديوهات TikTok باستخدام Playwright (أتمتة المتصفح)

لما تصطدم الطريقتان الأولى والثانية بعوائق — مثل الحاجة إلى تسجيل الدخول، أو CAPTCHA، أو معلمات توقيع ما تقدر تعيد إنتاجها — هنا Playwright يصير خيارك البديل. فهو يشغّل متصفحًا حقيقيًا (headless)، ويتنقل في TikTok مثل المستخدم العادي، ويقدر يتعامل مع عرض JavaScript، والتمرير اللانهائي، وحتى الجلسات المصادق عليها.

إعداد Playwright لاستخراج TikTok

ثبّت Playwright وملفات المتصفح الثنائية الخاصة به:

1pip install playwright
2playwright install firefox

أنصح باستخدام Firefox بدل Chromium لاستخراج TikTok. اختبارات المجتمع تُظهر باستمرار في Firefox، كما أن نظام TikTok لمكافحة الروبوتات يكون أشد ضد المتصفحات headless المبنية على Chromium.

ولمزيد من التخفي، تقدر تدمج Playwright مع (نسخة معدلة من Playwright) أو (نسخة Firefox معدلة على مستوى C++ لمكافحة الاكتشاف). ووفقًا ، يحقق Camoufox درجات تخفٍ شبه مثالية أمام أشهر خدمات اكتشاف الروبوتات.

خطوة بخطوة: استخراج فيديوهات ملف TikTok باستخدام Playwright

الخطوة 1: شغّل متصفح Firefox headless وانتقل إلى الملف الشخصي.

1import asyncio
2from playwright.async_api import async_playwright
3import json
4async def scrape_tiktok_profile(username):
5    async with async_playwright() as p:
6        browser = await p.firefox.launch(headless=True)
7        context = await browser.new_context(
8            user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0",
9            viewport={"width": 1280, "height": 720},
10        )
11        page = await context.new_page()
12        await page.goto(f"https://www.tiktok.com/@{username}", wait_until="networkidle")

الخطوة 2: انتظر حتى يتم تحميل شبكة الفيديوهات.

1        # انتظار ظهور عناصر الفيديو
2        await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)

إذا عرض TikTok طبقة "Something went wrong"، فقد تحتاج إلى النقر على زر إعادة المحاولة:

1        retry_btn = page.locator('button:has-text("Retry")')
2        if await retry_btn.count() &gt; 0:
3            await retry_btn.click()
4            await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)

الخطوة 3: استخرج البيانات من JSON المخفي حتى داخل Playwright.

أكثر طريقة موثوقة تظل هي سحب JSON الخاص بالتهيئة، حتى لو كنت تستخدم المتصفح:

1        script_el = page.locator("#__UNIVERSAL_DATA_FOR_REHYDRATION__")
2        raw_json = await script_el.inner_text()
3        data = json.loads(raw_json)
4        # نفس التنقل داخل JSON كما في الطريقة 1
5        user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
6        videos = user_detail.get("itemList", [])

الخطوة 4: تعامل مع التمرير اللانهائي للحصول على المزيد من الفيديوهات.

إذا كنت تحتاج أكثر من أول نحو 30 فيديو، فمرّر للأسفل والتقط استجابات XHR الإضافية:

1        all_videos = list(videos)
2        # اعتراض استجابات الـ API أثناء التمرير
3        api_responses = []
4        async def capture_response(response):
5            if "/api/post/item_list" in response.url:
6                try:
7                    body = await response.json()
8                    api_responses.append(body)
9                except:
10                    pass
11        page.on("response", capture_response)
12        # التمرير لأسفل لتحفيز المزيد من التحميل
13        for _ in range(5):  # عدّل عدد مرات التمرير حسب الحاجة
14            await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
15            await asyncio.sleep(2)
16        # جمع الفيديوهات من الاستجابات المعترضة
17        for api_resp in api_responses:
18            items = api_resp.get("itemList", [])
19            all_videos.extend(items)
20        print(f"Total videos: {len(all_videos)}")
21        await browser.close()
22        return all_videos
23# تشغيل الدالة
24videos = asyncio.run(scrape_tiktok_profile("charlidamelio"))

الآن المفروض عندك قائمة بكائنات الفيديو من تحميل الصفحة الأول، بالإضافة إلى أي صفحات ثانية تم تحميلها عبر التمرير.

حدود طريقة Playwright

  • أبطأ طريقة بشكل واضح (عرض الصفحة كاملًا، وعمليات الشبكة، وتأخيرات التمرير)
  • تستهلك موارد أكثر — فكل متصفح يستهلك قدرًا ملحوظًا من الذاكرة والمعالج
  • ما زالت عرضة للحظر المعتمد على عنوان IP عند التوسع — لذلك استخدم تدوير البروكسيات
  • الأفضل لـ: التفاعلات المعقدة، أو المحتوى المحمي بتسجيل الدخول، أو التعامل مع CAPTCHA، أو عندما تفشل الطريقتان 1 و2

كيفية تنزيل فيديوهات TikTok (.mp4) باستخدام Python

هذا هو القسم اللي يسدّ أكبر فجوة في أغلب شروحات TikTok الثانية. فمجرد استخراج البيانات الوصفية مفيد، لكن أغلب الناس اللي يبحثون عن "scrape TikTok videos" يريدون ملفات الفيديو نفسها.

TikTok يضمّن روابط التنزيل داخل كائن بيانات الفيديو:

  • playAddr — عادةً النسخة بدون علامة مائية أو بعلامة مائية أقل
  • downloadAddr — النسخة التي يقصد TikTok استخدامها في التنزيل داخل التطبيق (وتتضمن شعار TikTok)

كلا الرابطين مرتبط بالوقت وينتهي صلاحيته بعد فترة قصيرة (غالبًا بضع ساعات)، لذلك لازم التنزيل بسرعة بعد استخراجها.

خطوة بخطوة: تنزيل ملف فيديو TikTok

الخطوة 1: استخرج رابط الفيديو باستخدام أي من الطرق الثلاث أعلاه.

1video_url = video["video"]["playAddr"]  # النسخة بدون علامة مائية
2# أو
3video_url = video["video"]["downloadAddr"]  # مع العلامة المائية

الخطوة 2: أرسل طلب GET مع الرؤوس الصحيحة.

هذه الخطوة تربك كثيرين. إذا استخدمت فقط requests.get(video_url) فغالبًا بتاخذ 403. TikTok يتحقق من رأس Referer ويتوقع User-Agent يشبه المتصفح.

1import requests
2headers = {
3    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
4    "Referer": "https://www.tiktok.com/",
5}
6resp = requests.get(video_url, headers=headers, stream=True)

الخطوة 3: اكتب المحتوى المستلم إلى ملف .mp4.

استخدم stream=True واكتب على دفعات — لأن فيديوهات TikTok قد تكون كبيرة، وما تبي تحمل الملف كاملًا في الذاكرة:

1video_id = video["id"]
2filename = f"tiktok_{video_id}.mp4"
3with open(filename, "wb") as f:
4    for chunk in resp.iter_content(chunk_size=1024 * 1024):  # أجزاء بحجم 1MB
5        if chunk:
6            f.write(chunk)
7print(f"Downloaded: {filename}")

الآن المفروض صار عندك ملف .mp4 يشتغل على جهازك المحلي.

التنزيل مع العلامة المائية وبدونها

TikTok يخزن نسختين من كل فيديو: نسخة بعلامة مائية ونسخة بدونها. غالبًا playAddr يوفّر نسخة أنظف (وهي التي يستخدمها المشغل)، بينما downloadAddr يحتوي على شعار TikTok مع اسم المستخدم الخاص بالمبدع.

ملاحظة سريعة حول الأخلاقيات: وجود العلامة المائية هدفه نسبة المحتوى إلى صاحبه. إذا كنت تنزّل الفيديوهات لأغراض البحث أو التحليل أو المراجعة الداخلية، فعادةً ما تكون مشكلة. أما إذا كنت تعيد نشر المحتوى أو توزّعه، فإزالة نسبته إلى صاحبه تفتح أسئلة أخلاقية وحقوق نشر. وبنرجع لهذا في قسم القانون أدناه.

ولإنشاء مسار تنزيل أكثر متانة، تقدر تستخدم — لأنه يتعامل مع مستخرج TikTok وحسابات التوقيع وحل الروابط تلقائيًا، فلا تحتاج تدير الرؤوس أو انتهاء صلاحية الرموز بنفسك.

مقارنة مباشرة: أي طريقة Python يجب أن تستخدم؟

هذا هو جدول المقارنة اللي تمنيت ألقاه لما بدأت أشتغل على مشاريع استخراج TikTok:

| المعيار | الطريقة 1: JSON المخفي | الطريقة 2: الـ API الداخلية | الطريقة 3: Playwright | |---|---|---|---| | مستوى الصعوبة | مبتدئ | متوسط | متوسط | | السرعة | سريعة (طلب واحد لكل صفحة) | سريعة (واجهة JSON) | بطيئة (عرض كامل للصفحة) | | مقاومة مكافحة الروبوتات | متوسطة | منخفضة (النقاط النهائية تتغير) | عالية (تشبه المتصفح الحقيقي) | | تنزيل ملف الفيديو .mp4؟ | نعم (استخراج playAddr) | نعم (الرابط في الاستجابة) | نعم (اعتراض الشبكة) | | التعامل مع التمرير اللانهائي | لا (الصفحة الأولى فقط) | نعم (cursor pagination) | نعم (محاكاة التمرير) | | الحاجة إلى بروكسي عند التوسع | نعم | نعم | نعم | | متطلبات الصيانة | متوسطة (تغيّر بنية JSON) | عالية (تغيّر النقاط النهائية/التوقيعات كثيرًا) | منخفضة-متوسطة (المتصفح يتكيّف) | | الأفضل لـ | استخراج سريع لمرة واحدة لملف شخصي | استخراج جماعي للبيانات، كل الفيديوهات | المحتوى المحمي بتسجيل الدخول أو المعقد |

توصيتي:

  • إذا كنت تحتاج فقط إلى لقطة سريعة من ملف شخصي واحد؟ ابدأ بالطريقة 1. إعدادها يستغرق تقريبًا 30 ثانية، وترجع البيانات في أقل من ثانية لكل صفحة.
  • إذا كنت تحتاج كل فيديوهات ملف شخصي مع الترقيم الصفحي؟ الطريقة 2 هي الحل، لكن استعد لبعض الصيانة لما يغيّر TikTok معلمات الـ API.
  • إذا كنت تتعامل مع شاشات دخول، أو CAPTCHA، أو تحتاج أعلى قدر من الصمود؟ استخدم الطريقة 3 مع Playwright. هي أبطأ وأثقل، لكنها الأصعب على TikTok في الحظر.

عمليًا، غالبًا أبدأ بالطريقة 1 ثم أنتقل إلى الطريقة 2 أو 3 فقط إذا واجهت القيود. وهذا يخلّي البنية بسيطة والتكلفة منخفضة.

لا تحتاج إلى Python؟ استخرج فيديوهات TikTok بأدوات بدون كود

كثير من الناس اللي يبحثون عن "scrape TikTok videos with Python" ما يحتاجون Python فعلًا. هم يحتاجون البيانات. إذا كنت محلل تسويق يريد بيانات وصفية من بضعة ملفات منافسين، أو مدير علامة تجارية يتابع الإشارات، فإعداد بيئة Python مع تدوير البروكسيات ومعالجة التوقيعات يكون زيادة عن الحاجة.

python-vs-nocode-ai-comparison.webp

إليك مقارنة صادقة بين الأساليب:

| الأسلوب | مستوى المهارة | التكلفة | الصيانة | الأفضل لـ | |---|---|---|---|---| | Python (DIY) | متوسط فأعلى | مجاني (+ تكلفة بروكسي) | مرتفعة (السكربتات تتعطل) | تحكم كامل، ومسارات عمل مخصصة | | (إضافة Chrome) | مبتدئ | توجد باقة مجانية | لا شيء (الذكاء الاصطناعي يقرأ الموقع من جديد كل مرة) | استخراج سريع لبيانات الفيديو، والتصدير إلى Sheets/Excel | | Apify TikTok Scraper | مبتدئ | مدفوع (حسب التشغيل) | منخفضة (تتولى Apify صيانته) | تشغيلات جماعية تلقائية وفق جدول | | TikAPI | مطوّر | اشتراك مدفوع | متوسطة | بناء تطبيقات تعتمد على بيانات TikTok |

كيف يتعامل Thunderbit مع استخراج TikTok

هو AI web scraper بنيناه في Thunderbit، ويشتغل بطريقة مختلفة عن أدوات الاستخراج التقليدية. بدل ما يعتمد على محددات CSS جاهزة أو قواعد XPath (اللي تتعطل كل ما غيّر TikTok تصميمه)، الذكاء الاصطناعي في Thunderbit يقرأ بنية الصفحة من جديد في كل مرة ويقترح الأعمدة المناسبة — مثل الوصف، والإعجابات، والوسوم، ورابط الفيديو، وصاحب الحساب، وغيرها.

والسيرورة فعلًا من خطوتين:

  1. افتح ملف TikTok الشخصي في Chrome، ثم انقر على إضافة Thunderbit واضغط "AI Suggest Fields". بيقوم Thunderbit بفحص الصفحة ويقترح بنية جدول.
  2. راجع الأعمدة المقترحة، وعدّلها إذا لزم الأمر، ثم اضغط "Scrape".

البيانات تنصدر مباشرة إلى Google Sheets أو Excel أو Airtable أو Notion. لا محددات CSS تحتاج صيانة، ولا كود تحتاج تصحيحه، ولا إعدادات بروكسي معقدة. بالنسبة لمحلل التسويق اللي يحتاج بيانات وصفية من عدد محدود من الملفات، هذه الطريقة أسرع بشكل واضح من إعداد بيئة Python — وهي ما تتعطل كلما حدّث TikTok الواجهة الأمامية (وهو شيء يصير، بحسب تقارير المجتمع، كل بضعة أسابيع).

كذلك Thunderbit يدعم — يعني يقدر يزور صفحة كل فيديو على حدة لإثراء جدول البيانات بمزيد من التفاصيل مثل عدد التعليقات الكامل، أو معلومات الموسيقى، أو مدة الفيديو.

تقدر تجربته مجانًا عبر . ولمعرفة المزيد عن طريقة عمله، راجع .

الضوابط القانونية والأخلاقية عند استخراج TikTok

ولا واحد من الشروحات الأعلى ترتيبًا في هذا الموضوع يتطرق لمسألة القانونية، وهذا نقص مهم، خاصة أن TikTok اتخذ إجراءات قانونية نشطة ضد خدمات الاستخراج. إليك اللي تحتاج تعرفه.

شروط خدمة TikTok (§ 4.1) تحظر صراحةً الوصول الآلي. ومخالفة الشروط مو جريمة جنائية، لكنها قد تؤدي إلى حظر الحساب، أو حظر عنوان IP، أو اتخاذ إجراءات مدنية.

المشهد القانوني أكثر مرونة مما يظنه كثير من الناس عندما يتعلق الأمر بالبيانات العامة. وأبرز السوابق هي قضية Meta Platforms v. Bright Data (المحكمة الجزئية الشمالية في كاليفورنيا، يناير 2024)، حيث قررت المحكمة أن استخراج البيانات المتاحة علنًا أثناء تسجيل الخروج لا يخالف شروط خدمة Meta. وقد أسقطت Meta القضية وتنازلت عن الاستئناف. كما أن حكم hiQ v. LinkedIn السابق في الدائرة التاسعة (وأُعيد تأكيده بعد Van Buren) ثبّت أن استخراج البيانات العامة المتاحة لا يُعد انتهاكًا لقانون CFAA — رغم أن hiQ انتهت في النهاية إلى تسوية ودفع 500 ألف دولار والموافقة على أمر قضائي دائم، وهذا يوضح أن تطبيق شروط الخدمة قد تكون له تبعات واقعية.

تسري اللائحة العامة لحماية البيانات GDPR وقانون CCPA إذا كنت تجمع بيانات شخصية من مستخدمين في الاتحاد الأوروبي أو كاليفورنيا. فشيء واحد هو استخراج المنشورات العامة، وشيء مختلف تمامًا هو بناء قواعد بيانات فيها معلومات شخصية لأفراد بعينهم.

إرشادات عملية:

  • خل طلباتك بمعدل معقول ولا ترهق خوادم TikTok
  • لا تستخرج الحسابات الخاصة أو محتوى القاصرين
  • لا تعِد توزيع الفيديوهات المحمية بحقوق النشر لأغراض تجارية
  • احترم robots.txt (TikTok يمنع معظم الزحف الآلي)
  • تنزيل الفيديوهات للبحث أو التحليل الشخصي يختلف عن إعادة نشرها — لازم تفهم الفرق

تنبيه: هذا محتوى تعليمي وليس استشارة قانونية. إذا كنت تبني منتجًا تجاريًا يعتمد على بيانات TikTok المستخرجة، استشر محاميًا.

الخلاصة: أهم النقاط

استخراج TikTok في 2025 هدف متحرك. نظام TikTok لمكافحة الروبوتات من أكثر الأنظمة تطورًا على الويب، والأساليب الساذجة (مثل requests البسيط، أو المقاطع المولدة عبر ChatGPT، أو الشروحات القديمة) ستفشل. لكن مع الطريقة المناسبة، الموضوع ممكن بالكامل.

إليك ما لازم تتذكره:

  • الطريقة 1 (JSON المخفي) هي الأسرع والأسهل — ابدأ بها لاستخراج سريع من ملف شخصي.
  • الطريقة 2 (الـ API الداخلية) تعطيك الترقيم الصفحي والوصول الجماعي، لكنها تحتاج صيانة أكثر لأن النقاط النهائية ومتطلبات التوقيع تتغير باستمرار.
  • الطريقة 3 (Playwright) هي الأكثر صمودًا أمام وسائل الحماية، لكن على حساب السرعة واستهلاك الموارد.
  • الطرق الثلاث كلها تستطيع استخراج روابط تنزيل الفيديو — وهذا الدليل هو الوحيد تقريبًا الذي يشرح فعلًا كيفية تنزيل ملفات .mp4 مع الرؤوس الصحيحة.
  • للمستخدمين غير التقنيين، يقدم طريقًا أسرع فعلًا للوصول إلى نفس البيانات من دون كتابة كود أو صيانته. واعتماده على الذكاء الاصطناعي يعني أنه ما يتعطل لما يغيّر TikTok تصميمه — وهو شيء يحدث، حسب تقارير المجتمع، أكثر مما يرضي أحدًا.

إذا تبي تبدأ من غير أي إعدادات Python، جرّب — الباقة المجانية تكفي لتجربته على بضعة ملفات شخصية وتشوف إذا يناسب سير عملك. أما إذا قررت تمشي في طريق Python، فابدأ بالطريقة 1، وحقق من صحة بياناتك، ثم توسّع من هناك.

تبي تتعمق أكثر في تقنيات استخراج البيانات من الويب؟ اطلع على أدلتنا حول ، و، و.

الأسئلة الشائعة

هل من القانوني استخراج فيديوهات TikTok باستخدام Python؟

استخراج البيانات المتاحة علنًا يقع في منطقة قانونية رمادية، وليس انتهاكًا واضحًا. حكم Meta v. Bright Data (2024) يدعم الرأي القائل إن استخراج البيانات العامة أثناء تسجيل الخروج لا يخالف شروط خدمة المنصة. ومع ذلك، فإن شروط خدمة TikTok تحظر الوصول الآلي صراحةً، كما تنطبق التزامات GDPR/CCPA على البيانات الشخصية. الموضوع مو غير قانوني بالشكل اللي يخاف منه أغلب الناس، لكنه أيضًا مو خالٍ من المخاطر. استشر مختصًا قانونيًا حسب حالتك.

ما أفضل مكتبة Python لاستخراج TikTok؟

يعتمد ذلك على طريقتك. لاستخراج JSON المخفي (الطريقة 1)، يكفيك requests مع beautifulsoup4. ولطلبات الـ API الداخلية (الطريقة 2)، يشتغل requests أو httpx بشكل جيد. أما لأتمتة المتصفح (الطريقة 3)، فإن playwright هو المعيار الحالي — وقد تجاوز Selenium في مشاريع الاستخراج الجديدة، مع مقابل نحو 53 مليون لـ Selenium. كما أن غلاف TikTok-Api (حوالي 6.3 آلاف نجمة على GitHub) يستحق النظر إذا كنت تبغى واجهة أعلى مستوى، رغم أنه قد يكون هشًا.

هل يمكنني تنزيل فيديوهات TikTok بدون علامة مائية باستخدام Python؟

نعم. بيانات TikTok نفسها تتضمن رابط playAddr الذي يوفّر غالبًا نسخة من الفيديو بدون العلامة المائية القياسية. هذا الدليل يوضّح كيف تستخرج هذا الرابط من أي من الطرق الثلاث وتنزل ملف .mp4 مع الرؤوس الصحيحة. أما الحقل downloadAddr فعلى العكس، يحتوي على العلامة المائية.

لماذا يرجع أداة استخراج TikTok بيانات فارغة؟

السبب الأكثر شيوعًا هو أن TikTok يحتاج إلى JavaScript لعرض المحتوى. فطلب requests.get() الأساسي يجلب غلاف HTML فقط — أما البيانات الفعلية فإما تكون داخل وسم JSON مخفي (الطريقة 1) أو تُحمّل ديناميكيًا عبر JavaScript (الطريقة 3). إذا كانت النتائج فاضية، جرّب الطريقة 1 أولًا. وإذا ما نفع، افحص رؤوسك الخاصة (غياب Referer هو السبب الأول لأخطاء 403)، أو انتقل إلى الطريقة 3 باستخدام Playwright.

كيف أتجنب الحظر عند استخراج TikTok؟

استخدم رؤوس متصفح واقعية (بما فيها User-Agent وReferer وAccept-Language)، ودوّر البروكسيات السكنية أو المحمولة (فالعناوين الخاصة بمراكز البيانات تُكتشف خلال دقائق)، وأضف تأخيرات عشوائية بين الطلبات (من 1 إلى 3 ثوانٍ على الأقل)، وتجنب الاستخراج بأحجام ضخمة جدًا. توفّر الطريقة 3 (Playwright) أعلى قدرة على مقاومة الحظر لأنها تحاكي جلسة متصفح حقيقية. ولأي حجم عمل جدي، احسب تكلفة البروكسيات ضمن ميزانيتك — فالبروكسيات السكنية من الفئة الابتدائية تبدأ من نحو لدى كبار المزوّدين.

جرّب Thunderbit لاستخراج بيانات TikTok
Shuai Guan
Shuai Guan
Co-founder/CEO @ Thunderbit. Passionate about cross section of AI and Automation. He's a big advocate of automation and loves making it more accessible to everyone. Beyond tech, he channels his creativity through a passion for photography, capturing stories one picture at a time.
Topics
استخراج TikTok باستخدام Pythonاستخراج بيانات TikTok باستخدام Pythonسكربت Python لاستخراج TikTokكيفية استخراج فيديوهات TikTok باستخدام Python
جدول المحتويات

جرّب Thunderbit

اجمع العملاء المحتملين وبيانات أخرى في خطوتين فقط. مدعوم بالذكاء الاصطناعي.

احصل على Thunderbit مجاني
استخرج البيانات باستخدام الذكاء الاصطناعي
انقل البيانات بسهولة إلى Google Sheets أو Airtable أو Notion
PRODUCT HUNT#1 Product of the Week