Python से TikTok वीडियो कैसे Scrape करें, सीखें

अंतिम अपडेट April 15, 2026

TikTok पर अब लगभग हैं, और क्रिएटर्स हर दिन अनुमानित 2.3 करोड़ वीडियो अपलोड करते हैं। अगर आपने कभी इस भारी-भरकम डेटा स्ट्रीम का ज़रा-सा हिस्सा भी इकट्ठा करने की कोशिश की है, तो उसकी टेढ़ी-मेढ़ी मुश्किलें आप अच्छी तरह समझते होंगे।

आम तौर पर होता क्या है: आप "scrape TikTok videos with Python" सर्च करते हैं, किसी ट्यूटोरियल से एक कोड स्निपेट कॉपी करते हैं (या ChatGPT से लिखवाते हैं), उसे रन करते हैं, और फिर मिलता है… कुछ भी नहीं। खाली HTML। 403 error। या फिर वह डरावना संदेश: "Process finished with exit code 0" — लेकिन आउटपुट शून्य। मैंने यही पैटर्न दर्जनों GitHub issues और Reddit threads में देखा है, और इसी वजह से यह गाइड तैयार की गई है। इसमें हम 2025 में काम आने वाले तीन Python तरीकों को कवर करेंगे, असली .mp4 वीडियो फ़ाइलें डाउनलोड करने का पूरा तरीका बताएंगे (सिर्फ metadata नहीं — जो बाकी ज़्यादातर ट्यूटोरियल्स यहीं तक रुक जाते हैं), और एक comparison table भी देंगे ताकि आप अपनी ज़रूरत के हिसाब से सही तरीका चुन सकें। अगर आपको Python की ज़रूरत ही नहीं है, तो मैं जैसे no-code विकल्प भी बताऊँगा, जो आपको लगभग दो क्लिक में वही डेटा दिला सकते हैं।

"TikTok Videos Scrape करना" असल में क्या मतलब रखता है?

कोड शुरू करने से पहले यह साफ़ कर लेना ज़रूरी है कि लोग "scrape TikTok videos" से क्या समझते हैं — क्योंकि यह शब्द दो बिल्कुल अलग कामों के लिए इस्तेमाल होता है:

  1. Video metadata निकालना: captions, hashtags, like counts, comment counts, share counts, view counts, पोस्ट की तारीख, author info। ज़्यादातर ट्यूटोरियल्स इसी पर फोकस करते हैं।
  2. असल वीडियो फ़ाइलें (.mp4) डाउनलोड करना: वीडियो को अपने सिस्टम में सेव करना। यही वह चीज़ है जो ज्यादातर लोग वाकई चाहते हैं जब वे "scrape TikTok videos" लिखते हैं — और यही हिस्सा लगभग कोई नहीं कवर करता।

यह गाइड दोनों चीजें कवर करती है। नीचे दिए गए हर तरीके से आप metadata भी निकाल सकते हैं और .mp4 फ़ाइलें सेव करने के लिए ज़रूरी download URLs भी पा सकते हैं।

Python से TikTok Videos Scrape क्यों करें?

और TikTok Shop के जरिए बनने के साथ, TikTok data का बिज़नेस वैल्यू बहुत बड़ा है। सबसे आम use cases ये हैं:

Use Caseआप क्या Scrape कर रहे हैंयह किसके लिए है
Influencer और Marketing ResearchEngagement rates, follower counts, content formats, hashtag performanceMarketing teams, agencies
Content StrategyTrending hashtags, viral video formats, posting cadenceContent creators, social media managers
Brand MonitoringMentions, campaign reach, audience sentimentBrand managers, PR teams
Competitive IntelligenceCompetitor video performance, ad creatives, TikTok Shop listingsE-commerce, product teams
Market ResearchEmerging trends, audience behavior, product discoveryAnalysts, hedge funds, research firms
Archival और ComplianceInternal review या record-keeping के लिए video filesLegal, compliance, agencies

कमर्शियल दांव भी बहुत बड़ा है: 2026 में US TikTok ad revenue $23.4 billion तक जाने का अनुमान है, और affiliate creators top TikTok Shop categories में generate करते हैं। अगर आप e-commerce या influencer marketing में हैं, तो इस डेटा की सीधी monetary value है।

TikTok पर आपका Basic Python Code क्यों फेल हो जाता है

अगर आपने पहले कुछ ऐसा ट्राई किया है और कुछ हासिल नहीं हुआ, तो आप अकेले नहीं हैं:

1import requests
2from bs4 import BeautifulSoup
3resp = requests.get("https://www.tiktok.com/@someuser")
4soup = BeautifulSoup(resp.text, "html.parser")
5# ...और फिर HTML में कोई उपयोगी डेटा नहीं मिलता

कारण सीधा है: TikTok scrape करने के लिए सबसे कठिन platforms में से एक है। साधारण requests.get() से आपको ज्यादातर खाली HTML shell मिलता है, क्योंकि असली content browser में JavaScript द्वारा render किया जाता है। ऊपर से, TikTok के पास एक मजबूत anti-bot system है जिसमें behavioral detection, TLS fingerprinting, से request signatures बनाना, और ऐसे dynamic CSS selectors शामिल हैं जो बिना बताए बदल जाते हैं।

tiktok-anti-bot-wall.webp

Imperva 2025 Bad Bot Report के अनुसार 2024 में पहली बार automated traffic ने human traffic को पीछे छोड़ दिया — अब bots कुल internet traffic का हैं। TikTok को यह अच्छी तरह पता है, इसलिए उसने अपनी defenses उसी हिसाब से बनाई हैं।

यहाँ एक quick diagnostic table है, ताकि आप समझ सकें कि समस्या कहाँ है और कौन-सा method काम करेगा:

Symptomसंभावित कारणकौन-सा तरीका ठीक करेगा
Empty HTML / no dataJS-rendered content; requests JavaScript नहीं चला सकताMethod 1 (Hidden JSON) या Method 3 (Playwright)
403 / Access DeniedHeaders गलत या missing; anti-bot detectionसही headers के साथ Method 1
Data एक बार काम करता है, फिर बंद हो जाता हैRate limiting / IP blockProxy rotation (सभी methods में)
Login wall दिखाई देती हैSession/cookie requirementMethod 3 (saved session वाला browser)
ChatGPT-generated code कुछ नहीं लौटाताTikTok structure model training data के बाद बदल गईतीनों methods (up-to-date approaches)

Rate limit threshold लगभग 30–60 requests per minute per IP है, उसके बाद soft blocks या CAPTCHAs आने लगते हैं। Datacenter IPs कुछ ही मिनटों में flag हो जाते हैं — किसी भी बड़े volume के लिए residential या mobile proxies लगभग ज़रूरी हैं।

TikTok Videos Scrape करने के 3 Methods का Overview

यह है पूरा roadmap। हर method के अपने trade-offs हैं, और मैं तीनों को working code के साथ समझाऊँगा:

  1. Hidden JSON Extraction — TikTok pages में embedded __UNIVERSAL_DATA_FOR_REHYDRATION__ script tag parse करें। सबसे तेज़, सबसे सरल, browser की ज़रूरत नहीं।
  2. TikTok का Internal API — undocumented /api/post/item_list/ endpoint को सीधे call करें, cursor-based pagination के साथ bulk data लें।
  3. Playwright के साथ Browser Automation — headless browser में pages render करें ताकि infinite scroll, dynamic content, और login walls संभाली जा सकें।

तीनों methods से असली .mp4 video files download भी की जा सकती हैं — इसका अलग section नीचे दिया गया है। अंत में पूरी comparison table होगी ताकि आप सोच-समझकर फैसला कर सकें।

Method 1: Hidden JSON से TikTok Videos Scrape करना (Beginner-Friendly)

मैं शुरुआत इसी तरीके से करने की सलाह देता हूँ। TikTok लगभग हर page load पर <script> tag के अंदर एक बड़ा JSON blob embed करता है, जिसका id __UNIVERSAL_DATA_FOR_REHYDRATION__ होता है। इसमें profile और video data सब कुछ होता है जिसे front-end JavaScript आम तौर पर render करता है — यानी एक ही HTTP request से यह data मिल सकता है, browser की ज़रूरत नहीं।

आपको क्या चाहिए

  • Python 3.8+
  • requests (या httpx)
  • beautifulsoup4 (या parsel)
  • सही headers: User-Agent, Referer, Accept-Language

Dependencies install करें:

1pip install requests beautifulsoup4

Step-by-Step: Script Tag से TikTok Video Data निकालना

Step 1: Realistic browser headers के साथ GET request भेजें।

यहीं ज्यादातर beginners गलती करते हैं। अगर आप बिना headers के साधारण requests.get() भेजते हैं, तो TikTok 403 या CAPTCHA page लौटा सकता है। कम से कम एक current browser User-Agent और Referer header ज़रूरी है।

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)

Step 2: HTML parse करें और hydration script tag ढूँढें।

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

अगर script_tag None है, तो या तो TikTok ने आपको block कर दिया है (status code चेक करें), या script tag का id बदल गया है (कम होता है, लेकिन संभव है)।

Step 3: Script content को JSON के रूप में load करें।

1data = json.loads(script_tag.string)

Step 4: JSON structure में जाकर video metadata निकालें।

यह structure __DEFAULT_SCOPE__ के अंदर nested होता है। User profile page के लिए:

1user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
2user_info = user_detail["userInfo"]
3# Profile stats
4stats = user_info["stats"]
5print(f"Followers: {stats['followerCount']}, Likes: {stats['heartCount']}")
6# Video list (videos का पहला page)
7item_list = user_detail.get("itemList", [])
8for video in item_list:
9    print(video["desc"])  # Caption
10    print(video["stats"]["playCount"])  # Views
11    print(video["video"]["playAddr"])  # Video download URL (no watermark)
12    print(video["video"]["downloadAddr"])  # Video download URL (with watermark)

Step 5: Video download URLs निकालें।

playAddr फ़ील्ड आम तौर पर वीडियो का cleaner version देता है (अक्सर TikTok watermark overlay के बिना), जबकि downloadAddr standard watermark के साथ आता है। दोनों सीधे .mp4 फ़ाइलों के URLs हैं — लेकिन download करने के लिए खास headers चाहिए (नीचे download section में बताया गया है)।

अब आपके पास video metadata objects की एक list होनी चाहिए, जिसमें caption, stats, creation time, hashtags (challenges[] और textExtra में), और direct video URLs शामिल हों।

Hidden JSON Method की सीमाएँ

  • सिर्फ initial page load का data मिलता है — आम तौर पर profile के पहले ~30 videos
  • infinite scroll या pagination को handle नहीं कर सकता (कोई "next page" request नहीं होती)
  • अगर TikTok script tag ID या JSON structure बदल दे, तो parser टूट सकता है (यह समय-समय पर होता है — शुरुआती error पकड़ने में मदद करती है)
  • सबसे अच्छा उपयोग: quick profile scrapes, one-off data pulls, या जब आपको सिर्फ हाल के videos चाहिए हों

Method 2: Internal API के ज़रिए TikTok Videos Scrape करना

TikTok का front-end सारे videos एक साथ load नहीं करता — scrolling के साथ वह internal API endpoints पर XHR calls करता है। User videos के लिए मुख्य endpoint /api/post/item_list/ है। आप इसे Python से सीधे call कर सकते हैं, जिससे cursor-based pagination मिलती है और profile के सभी videos तक पहुँच बनती है, न कि सिर्फ पहले page तक।

Internal API Endpoint कैसे खोजें

Chrome DevTools में TikTok profile page खोलें, Network tab में जाएँ, XHR filter लगाएँ, और नीचे scroll करें। आपको ऐसे URLs पर requests दिखेंगी:

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

मुख्य parameters हैं:

  • secUid — profile की unique ID (इसे Method 1 की JSON से userInfo.user.secUid के अंदर निकाल सकते हैं)
  • cursor — pagination offset (0 से शुरू होता है, हर response अगला cursor देता है)
  • count — प्रति page items की संख्या (आमतौर पर 30–35)

Step-by-Step: Python से TikTok Internal API Query करना

Step 1: target profile का secUid लें।

इसे hidden JSON (Method 1) या profile page के HTML से निकाल सकते हैं।

Step 2: API request बनाकर भेजें।

1import requests
2import json
3sec_uid = "MS4wLjABAAAA..."  # Method 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()

Step 3: Response parse करें।

data["itemList"] में हर item की वही video structure होती है जो Method 1 में मिलती है — desc, stats, video.playAddr, video.downloadAddr, आदि।

Step 4: सभी videos के लिए pagination करें।

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)}")

हर iteration अगला batch और नया cursor देता है। Loop तब तक चलता रहता है जब तक hasMore False न हो जाए।

Internal API Method की सीमाएँ

  • TikTok इन endpoints और required parameters को बार-बार बदलता रहता है — इसलिए यह सबसे maintenance-heavy method है। हाल के महीनों में कुछ requests में msToken, X-Bogus, या दूसरी signature parameters की भी ज़रूरत पड़ने लगी है, जो TikTok की बनाती है (संकेत: इसे pure Python में replicate करना आसान नहीं है)।
  • कुछ data types के लिए session cookies या अतिरिक्त tokens चाहिए हो सकते हैं
  • IP-based rate limiting फिर भी लागू होता है — proxy rotation सुझाई जाती है
  • अगर itemList खाली आने लगे, तो आपका msToken शायद stale हो गया है (browser में यह लगभग हर 10 सेकंड में rotate होता है)
  • सबसे अच्छा उपयोग: bulk data extraction, जब आपको profile के सारे videos चाहिए हों और Method 1 की first-page-only सीमा पर्याप्त न हो

Method 3: Playwright के साथ TikTok Videos Scrape करना (Browser Automation)

जब पहले दो तरीके अटक जाएँ — login requirement, CAPTCHA, या ऐसे signature parameters जिन्हें आप replicate नहीं कर पा रहे — तो Playwright काम आता है। यह एक असली (headless) browser लॉन्च करता है, TikTok पर human user की तरह navigate करता है, और JavaScript rendering, infinite scroll, तथा authenticated sessions को संभाल सकता है।

TikTok Scraping के लिए Playwright सेट करना

Playwright और उसके browser binaries install करें:

1pip install playwright
2playwright install firefox

TikTok scraping के लिए मैं Chromium की बजाय Firefox की सलाह देता हूँ। Community testing में लगातार Firefox के साथ देखी गई है, और TikTok की bot detection विशेष रूप से Chromium-based headless browsers के खिलाफ सख्त है।

अतिरिक्त stealth के लिए, Playwright को (Playwright का patched fork) या (anti-detection के लिए C++ level पर बदला गया Firefox) के साथ जोड़ने पर विचार करें। में Camoufox प्रमुख bot detection services के खिलाफ लगभग perfect stealth scores देता है।

Step-by-Step: Playwright से TikTok Profile Videos Scrape करना

Step 1: headless Firefox browser लॉन्च करें और profile खोलें।

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")

Step 2: video grid load होने का इंतज़ार करें।

1        # Video items दिखाई देने तक wait करें
2        await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)

अगर TikTok "Something went wrong" overlay दिखाता है, तो आपको retry button क्लिक करना पड़ सकता है:

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)

Step 3: hidden JSON से data निकालें (Playwright में भी)।

सबसे भरोसेमंद तरीका अभी भी hydration JSON पकड़ना है, भले ही browser का उपयोग कर रहे हों:

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 navigation जो Method 1 में है
5        user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
6        videos = user_detail.get("itemList", [])

Step 4: more videos के लिए infinite scroll handle करें।

अगर आपको शुरुआती ~30 videos से ज़्यादा चाहिए, तो नीचे scroll करें और अतिरिक्त XHR responses capture करें:

1        all_videos = list(videos)
2        # Scroll करते समय API responses intercept करें
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        # और loads trigger करने के लिए नीचे scroll करें
13        for _ in range(5):  # ज़रूरत के अनुसार scroll count बदलें
14            await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
15            await asyncio.sleep(2)
16        # Intercept की गई responses से videos जोड़ें
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"))

अब आपके पास initial page load और scrolling के दौरान loaded additional pages, दोनों के video objects की list होनी चाहिए।

Playwright Method की सीमाएँ

  • सबसे धीमा तरीका है (full page render, network round-trips, scroll delays)
  • ज़्यादा resources लेता है — हर browser instance काफी memory और CPU उपयोग करता है
  • scale पर फिर भी IP-based blocking संभव है — proxy rotation के साथ इस्तेमाल करें
  • सबसे अच्छा उपयोग: complex interactions, login-walled content, CAPTCHAs, या जब Method 1 और 2 blocked हों

Python से TikTok Videos (.mp4) कैसे डाउनलोड करें

यही वह section है जो हर दूसरे TikTok scraping tutorial की सबसे बड़ी कमी पूरी करता है। Metadata निकालना उपयोगी है, लेकिन "scrape TikTok videos" सर्च करने वाले ज्यादातर लोग असली video files चाहते हैं।

TikTok video data object में download URLs embed करता है:

  • playAddr — आम तौर पर बिना watermark या कम watermark वाला version
  • downloadAddr — वह version जिसे TikTok in-app download के लिए मानता है (इसमें TikTok watermark overlay होता है)

दोनों URLs समय-संवेदनशील होते हैं और थोड़ी देर बाद expire हो जाते हैं (आमतौर पर कुछ घंटों में), इसलिए इन्हें निकालते ही जल्दी डाउनलोड करना चाहिए।

Step-by-Step: TikTok Video File डाउनलोड करना

Step 1: ऊपर बताए गए तीनों तरीकों में से किसी एक से video URL निकालें।

1video_url = video["video"]["playAddr"]  # No-watermark version
2# or
3video_url = video["video"]["downloadAddr"]  # With watermark

Step 2: सही headers के साथ GET request भेजें।

यहीं लोग अक्सर अटकते हैं। अगर आप सिर्फ requests.get(video_url) करेंगे, तो 403 मिलेगा। TikTok Referer header चेक करता है और browser-like 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)

Step 3: Response content को .mp4 फ़ाइल में लिखें।

stream=True इस्तेमाल करें और chunks में लिखें — TikTok videos बड़ी हो सकती हैं, और आप पूरी फ़ाइल memory में नहीं लाना चाहेंगे:

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 chunks
5        if chunk:
6            f.write(chunk)
7print(f"Downloaded: {filename}")

अब आपके local machine पर एक playable .mp4 फ़ाइल होनी चाहिए।

Watermark vs. No-Watermark Downloads

TikTok हर video के watermarked और non-watermarked दोनों versions रखता है। playAddr URL अक्सर cleaner version देता है (वही जो player इस्तेमाल करता है), जबकि downloadAddr में creator username के साथ TikTok watermark overlay होता है।

यहाँ ethics की छोटी-सी बात: watermark creator को credit देने के लिए होता है। अगर आप videos research, analysis, या internal review के लिए डाउनलोड कर रहे हैं, तो playAddr इस्तेमाल करना आम तौर पर ठीक है। लेकिन अगर आप content को फिर से distribute या repost कर रहे हैं, तो creator attribution हटाने से ethical और copyright, दोनों तरह की चिंताएँ उठती हैं। कानूनी section में इस पर और बात है।

ज़्यादा robust download pipeline के लिए पर विचार करें — इसका TikTok extractor signature math और URL resolution अपने आप संभाल लेता है, इसलिए आपको headers और token expiration खुद manage नहीं करना पड़ता।

Side-by-Side: कौन-सा Python Method इस्तेमाल करें?

यह comparison table वही है जो मुझे TikTok scraping projects शुरू करते समय चाहिए थी:

CriteriaMethod 1: Hidden JSONMethod 2: Internal APIMethod 3: Playwright
DifficultyBeginnerIntermediateIntermediate
SpeedFast (1 request per page)Fast (JSON API)Slow (full page render)
Anti-bot resilienceMediumLow (endpoints change)High (real browser जैसा व्यवहार)
वीडियो .mp4 डाउनलोड करता है?Yes (playAddr निकालकर)Yes (response में URL मिलता है)Yes (network intercept करके)
Infinite scroll handle करता है?No (सिर्फ first page)Yes (cursor pagination)Yes (scroll simulation)
Scale पर proxy चाहिए?YesYesYes
Maintenance requiredMedium (JSON structure बदल सकती है)High (endpoints/signatures अक्सर बदलते हैं)Low-Medium (browser खुद adapt करता है)
Best forQuick one-off profile scrapesBulk data extraction, all videosLogin-walled या complex content

मेरी recommendation:

  • किसी एक profile का तेज snapshot चाहिए? Method 1 से शुरुआत करें। इसे set up करने में लगभग 30 सेकंड लगते हैं और page के हिसाब से data एक सेकंड से कम में आ जाता है।
  • Pagination के साथ profile के सभी videos चाहिए? Method 2 सही रास्ता है, लेकिन TikTok के API parameters बदलने पर maintenance के लिए तैयार रहें।
  • Login walls, CAPTCHAs, या maximum resilience चाहिए? Method 3 with Playwright। यह धीमा और भारी है, लेकिन TikTok के लिए इसे block करना सबसे कठिन है।

Practical तौर पर मैं अक्सर Method 1 से शुरू करता हूँ और limitations आने पर ही Method 2 या 3 पर जाता हूँ। इससे infrastructure सरल रहता है और लागत कम।

Python नहीं चाहिए? No-Code Tools से TikTok Videos Scrape करें

बहुत से लोग जो "scrape TikTok videos with Python" search करते हैं, उन्हें वास्तव में Python नहीं चाहिए होता। उन्हें data चाहिए। अगर आप एक marketing analyst हैं जिसे कुछ competitor profiles से video metadata चाहिए, या brand manager हैं जो mentions track कर रहे हैं, तो Python environment, proxy rotation और signature handling सेट करना overkill है।

python-vs-nocode-ai-comparison.webp

यहाँ approaches की एक ईमानदार तुलना है:

ApproachSkill LevelCostMaintenanceBest For
Python (DIY)Intermediate+Free (+ proxy costs)High (scripts break)Full control, custom pipelines
Thunderbit (Chrome extension)BeginnerFree tier availableNone (AI हर बार site fresh पढ़ता है)Quick video data extraction, Sheets/Excel export
Apify TikTok ScraperBeginnerPaid (per-run)Low (Apify द्वारा maintained)Schedule पर bulk automated runs
TikAPIDeveloperPaid subscriptionMediumTikTok data पर apps बनाना

Thunderbit TikTok Scraping को कैसे संभालता है

वही AI web scraper है जो हमने Thunderbit में बनाया है, और यह traditional scraping tools से अलग काम करता है। पहले से बने CSS selectors या XPath rules पर निर्भर रहने के बजाय (जो TikTok का layout बदलते ही टूट जाते हैं), Thunderbit का AI हर बार page structure fresh पढ़ता है और relevant columns सुझाता है — caption, likes, hashtags, video URL, author, आदि।

इसका workflow सचमुच दो clicks में हो जाता है:

  1. Chrome में TikTok profile खोलें, Thunderbit extension क्लिक करें, और "AI Suggest Fields" दबाएँ। Thunderbit page scan करके table structure सुझाता है।
  2. सुझाए गए columns देखें, ज़रूरत हो तो edit करें, और "Scrape" पर क्लिक करें।

Data सीधे Google Sheets, Excel, Airtable, या Notion में export हो जाता है। कोई CSS selectors maintain करने की ज़रूरत नहीं, कोई code debug नहीं करना, कोई proxy configuration नहीं। जिस marketing analyst को कुछ profiles का video metadata चाहिए, उसके लिए यह Python environment set up करने से बहुत तेज़ है — और TikTok front-end बदलने पर भी नहीं टूटता (जो community reports के अनुसार हर कुछ हफ्तों में होता है)।

Thunderbit भी सपोर्ट करता है — यह हर individual video page पर जाकर आपके data table में comment counts, music info, या video duration जैसे अतिरिक्त details जोड़ सकता है।

आप इसे से free try कर सकते हैं। यह कैसे काम करता है, इसके लिए हमारा देखें।

इस विषय पर top-ranking tutorials में से लगभग किसी में legality पर चर्चा नहीं होती, जबकि TikTok ने scraping services पर कानूनी कार्रवाई भी की है। आपको क्या जानना चाहिए, वह यहाँ है।

TikTok's Terms of Service (§ 4.1) automated access को स्पष्ट रूप से prohibit करती हैं। TOS का उल्लंघन contract breach है, अपराध नहीं — लेकिन इससे account bans, IP blocks, या civil action हो सकती है।

Public data के लिए legal landscape उतना कठोर नहीं है जितना लोग समझते हैं। सबसे अहम precedent Meta Platforms v. Bright Data (N.D. Cal., Jan 2024) है, जहाँ अदालत ने कहा कि logged-out होकर publicly accessible data scrape करना Meta की Terms of Service का उल्लंघन नहीं है। Meta ने case वापस ले लिया और appeal भी छोड़ दी। इससे पहले hiQ v. LinkedIn Ninth Circuit ruling (post-Van Buren में फिर पुष्टि) ने तय किया था कि publicly accessible data scraping CFAA violation नहीं है — हालांकि hiQ अंततः settle हुआ, $500K चुकाया, और permanent injunction मानी, जिससे यह साफ़ है कि TOS enforcement फिर भी असर डाल सकता है।

अगर आप EU या California users का personal data collect कर रहे हैं, तो GDPR और CCPA लागू होते हैं। Public posts scrape करना एक बात है; individual users की personal information से database बनाना दूसरी बात है।

Practical guidelines:

  • Requests की speed सीमित रखें (TikTok servers पर भारी load न डालें)
  • Private accounts या minors की content scrape न करें
  • Copyrighted video content को commercial रूप से redistribute न करें
  • robots.txt का सम्मान करें (TikTok ज्यादातर automated crawling को disallow करता है)
  • Personal research या analysis के लिए वीडियो डाउनलोड करना reposting से अलग है — इस फर्क को समझें

Disclaimer: यह educational content है, legal advice नहीं। अगर आप scraped TikTok data पर commercial product बना रहे हैं, तो lawyer से सलाह लें।

निष्कर्ष: मुख्य बातें

2025 में TikTok scraping एक moving target है। Platform की anti-bot stack web पर सबसे advanced में से एक है, और naive approaches (साधारण requests, ChatGPT-generated snippets, पुराने ट्यूटोरियल्स) fail हो जाएंगे। लेकिन सही method के साथ यह पूरी तरह किया जा सकता है।

याद रखने वाली बातें:

  • Method 1 (Hidden JSON) सबसे तेज़ और सरल है — quick profile scrapes के लिए यहीं से शुरुआत करें।
  • Method 2 (Internal API) pagination और bulk access देता है, लेकिन endpoints और signature requirements बदलने पर सबसे ज़्यादा maintenance चाहिए।
  • Method 3 (Playwright) anti-bot measures के खिलाफ सबसे resilient है, लेकिन speed और resources की कीमत पर।
  • तीनों methods video download URLs निकाल सकतेTikTok에는 지금 거의 हैं, और क्रिएटर्स रोज़ाना अनुमानित 2.3 करोड़ वीडियो अपलोड करते हैं। अगर आपने कभी इस इतने बड़े डेटा स्ट्रीम का बस छोटा-सा हिस्सा भी इकट्ठा करने की कोशिश की है, तो आपको इसकी असली मुश्किल अच्छी तरह पता होगी।

आम तौर पर होता क्या है: आप "scrape TikTok videos with Python" सर्च करते हैं, किसी ट्यूटोरियल से एक कोड स्निपेट कॉपी करते हैं (या ChatGPT से लिखवाते हैं), उसे रन करते हैं, और फिर मिलता है… कुछ भी नहीं। खाली HTML। 403 error। या फिर वही डरावना संदेश: "Process finished with exit code 0" — लेकिन आउटपुट बिलकुल शून्य। मैंने यही पैटर्न दर्जनों GitHub issues और Reddit threads में देखा है, और इसी वजह से यह गाइड बनाई गई है। इसमें हम 2025 में काम आने वाले तीन Python तरीकों को कवर करेंगे, असली .mp4 वीडियो फ़ाइलें डाउनलोड करने का पूरा तरीका बताएंगे (सिर्फ metadata नहीं — जो बाकी ज़्यादातर ट्यूटोरियल्स यहीं तक रुक जाते हैं), और एक comparison table भी देंगे ताकि आप अपनी ज़रूरत के हिसाब से सही तरीका चुन सकें। अगर आपको Python की ज़रूरत ही नहीं है, तो मैं जैसे no-code विकल्प भी बताऊँगा, जो आपको लगभग दो क्लिक में वही डेटा दिला सकते हैं।

"TikTok Videos Scrape करना" असल में क्या मतलब रखता है?

कोड शुरू करने से पहले यह साफ़ कर लेना ज़रूरी है कि लोग "scrape TikTok videos" से क्या समझते हैं — क्योंकि यह शब्द दो बिल्कुल अलग कामों के लिए इस्तेमाल होता है:

  1. Video metadata निकालना: captions, hashtags, like counts, comment counts, share counts, view counts, पोस्ट की तारीख, author info। ज़्यादातर ट्यूटोरियल्स इसी पर फोकस करते हैं।
  2. असल वीडियो फ़ाइलें (.mp4) डाउनलोड करना: वीडियो को अपने सिस्टम में सेव करना। यही वह चीज़ है जो ज़्यादातर लोग वाकई चाहते हैं जब वे "scrape TikTok videos" लिखते हैं — और यही हिस्सा लगभग कोई नहीं कवर करता।

यह गाइड दोनों चीजें कवर करती है। नीचे दिए गए हर तरीके से आप metadata भी निकाल सकते हैं और .mp4 फ़ाइलें सेव करने के लिए ज़रूरी download URLs भी पा सकते हैं।

Python से TikTok Videos Scrape क्यों करें?

और TikTok Shop के जरिए बनने के साथ, TikTok data का बिज़नेस वैल्यू बहुत बड़ा है। सबसे आम use cases ये हैं:

Use Caseआप क्या Scrape कर रहे हैंयह किसके लिए है
Influencer और Marketing ResearchEngagement rates, follower counts, content formats, hashtag performanceMarketing teams, agencies
Content StrategyTrending hashtags, viral video formats, posting cadenceContent creators, social media managers
Brand MonitoringMentions, campaign reach, audience sentimentBrand managers, PR teams
Competitive IntelligenceCompetitor video performance, ad creatives, TikTok Shop listingsE-commerce, product teams
Market ResearchEmerging trends, audience behavior, product discoveryAnalysts, hedge funds, research firms
Archival और ComplianceInternal review या record-keeping के लिए video filesLegal, compliance, agencies

कमर्शियल दांव भी बहुत बड़ा है: 2026 में US TikTok ad revenue $23.4 billion तक जाने का अनुमान है, और affiliate creators top TikTok Shop categories में generate करते हैं। अगर आप e-commerce या influencer marketing में हैं, तो इस डेटा की सीधी monetary value है।

TikTok पर आपका Basic Python Code क्यों फेल हो जाता है

अगर आपने पहले कुछ ऐसा ट्राई किया है और कुछ हासिल नहीं हुआ, तो आप अकेले नहीं हैं:

1import requests
2from bs4 import BeautifulSoup
3resp = requests.get("https://www.tiktok.com/@someuser")
4soup = BeautifulSoup(resp.text, "html.parser")
5# ...और फिर HTML में कोई उपयोगी डेटा नहीं मिलता

कारण सीधा है: TikTok scrape करने के लिए सबसे मुश्किल platforms में से एक है। साधारण requests.get() से आपको ज़्यादातर खाली HTML shell मिलता है, क्योंकि असली content browser में JavaScript द्वारा render किया जाता है। ऊपर से, TikTok के पास एक मज़बूत anti-bot system है जिसमें behavioral detection, TLS fingerprinting, से request signatures बनाना, और ऐसे dynamic CSS selectors शामिल हैं जो बिना बताए बदल जाते हैं।

tiktok-anti-bot-wall.webp

Imperva 2025 Bad Bot Report के अनुसार 2024 में पहली बार automated traffic ने human traffic को पीछे छोड़ दिया — अब bots कुल internet traffic का हैं। TikTok को यह अच्छी तरह पता है, इसलिए उसने अपनी defenses उसी हिसाब से बनाई हैं।

यहाँ एक quick diagnostic table है, ताकि आप समझ सकें कि समस्या कहाँ है और कौन-सा method काम करेगा:

Symptomसंभावित कारणकौन-सा तरीका ठीक करेगा
Empty HTML / no dataJS-rendered content; requests JavaScript नहीं चला सकताMethod 1 (Hidden JSON) या Method 3 (Playwright)
403 / Access DeniedHeaders गलत या missing; anti-bot detectionसही headers के साथ Method 1
Data एक बार काम करता है, फिर बंद हो जाता हैRate limiting / IP blockProxy rotation (सभी methods में)
Login wall दिखाई देती हैSession/cookie requirementMethod 3 (saved session वाला browser)
ChatGPT-generated code कुछ नहीं लौटाताTikTok structure model training data के बाद बदल गईतीनों methods (up-to-date approaches)

Rate limit threshold लगभग 30–60 requests per minute per IP है, उसके बाद soft blocks या CAPTCHAs आने लगते हैं। Datacenter IPs कुछ ही मिनटों में flag हो जाते हैं — किसी भी बड़े volume के लिए residential या mobile proxies लगभग ज़रूरी हैं।

TikTok Videos Scrape करने के 3 Methods का Overview

यह है पूरा roadmap। हर method के अपने trade-offs हैं, और मैं तीनों को working code के साथ समझाऊँगा:

  1. Hidden JSON Extraction — TikTok pages में embedded __UNIVERSAL_DATA_FOR_REHYDRATION__ script tag parse करें। सबसे तेज़, सबसे सरल, browser की ज़रूरत नहीं।
  2. TikTok का Internal API — undocumented /api/post/item_list/ endpoint को सीधे call करें, cursor-based pagination के साथ bulk data लें।
  3. Playwright के साथ Browser Automation — headless browser में pages render करें ताकि infinite scroll, dynamic content, और login walls संभाली जा सकें।

तीनों methods से असली .mp4 video files download भी की जा सकती हैं — इसका अलग section नीचे दिया गया है। अंत में पूरी comparison table होगी ताकि आप सोच-समझकर फैसला कर सकें।

Method 1: Hidden JSON से TikTok Videos Scrape करना (Beginner-Friendly)

मैं शुरुआत इसी तरीके से करने की सलाह देता हूँ। TikTok लगभग हर page load पर <script> tag के अंदर एक बड़ा JSON blob embed करता है, जिसका id __UNIVERSAL_DATA_FOR_REHYDRATION__ होता है। इसमें profile और video data सब कुछ होता है जिसे front-end JavaScript आम तौर पर render करता है — यानी एक ही HTTP request से यह data मिल सकता है, browser की ज़रूरत नहीं।

आपको क्या चाहिए

  • Python 3.8+
  • requests (या httpx)
  • beautifulsoup4 (या parsel)
  • सही headers: User-Agent, Referer, Accept-Language

Dependencies install करें:

1pip install requests beautifulsoup4

Step-by-Step: Script Tag से TikTok Video Data निकालना

Step 1: Realistic browser headers के साथ GET request भेजें।

यहीं ज़्यादातर beginners गलती करते हैं। अगर आप बिना headers के साधारण requests.get() भेजते हैं, तो TikTok 403 या CAPTCHA page लौटा सकता है। कम से कम एक current browser User-Agent और Referer header ज़रूरी है।

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)

Step 2: HTML parse करें और hydration script tag ढूँढें।

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

अगर script_tag None है, तो या तो TikTok ने आपको block कर दिया है (status code चेक करें), या script tag का id बदल गया है (कम होता है, लेकिन संभव है)।

Step 3: Script content को JSON के रूप में load करें।

1data = json.loads(script_tag.string)

Step 4: JSON structure में जाकर video metadata निकालें।

यह structure __DEFAULT_SCOPE__ के अंदर nested होता है। User profile page के लिए:

1user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
2user_info = user_detail["userInfo"]
3# Profile stats
4stats = user_info["stats"]
5print(f"Followers: {stats['followerCount']}, Likes: {stats['heartCount']}")
6# Video list (videos का पहला page)
7item_list = user_detail.get("itemList", [])
8for video in item_list:
9    print(video["desc"])  # Caption
10    print(video["stats"]["playCount"])  # Views
11    print(video["video"]["playAddr"])  # Video download URL (no watermark)
12    print(video["video"]["downloadAddr"])  # Video download URL (with watermark)

Step 5: Video download URLs निकालें।

playAddr फ़ील्ड आम तौर पर वीडियो का cleaner version देता है (अक्सर TikTok watermark overlay के बिना), जबकि downloadAddr standard watermark के साथ आता है। दोनों सीधे .mp4 फ़ाइलों के URLs हैं — लेकिन download करने के लिए खास headers चाहिए (नीचे download section में बताया गया है)।

अब आपके पास video metadata objects की एक list होनी चाहिए, जिसमें caption, stats, creation time, hashtags (challenges[] और textExtra में), और direct video URLs शामिल हों।

Hidden JSON Method की सीमाएँ

  • सिर्फ initial page load का data मिलता है — आम तौर पर profile के पहले ~30 videos
  • infinite scroll या pagination को handle नहीं कर सकता (कोई "next page" request नहीं होती)
  • अगर TikTok script tag ID या JSON structure बदल दे, तो parser टूट सकता है (यह समय-समय पर होता है — शुरुआती error पकड़ने में मदद करती है)
  • सबसे अच्छा उपयोग: quick profile scrapes, one-off data pulls, या जब आपको सिर्फ हाल के videos चाहिए हों

Method 2: Internal API के ज़रिए TikTok Videos Scrape करना

TikTok का front-end सारे videos एक साथ load नहीं करता — scrolling के साथ वह internal API endpoints पर XHR calls करता है। User videos के लिए मुख्य endpoint /api/post/item_list/ है। आप इसे Python से सीधे call कर सकते हैं, जिससे cursor-based pagination मिलती है और profile के सभी videos तक पहुँच बनती है, न कि सिर्फ पहले page तक।

Internal API Endpoint कैसे खोजें

Chrome DevTools में TikTok profile page खोलें, Network tab में जाएँ, XHR filter लगाएँ, और नीचे scroll करें। आपको ऐसे URLs पर requests दिखेंगी:

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

मुख्य parameters हैं:

  • secUid — profile की unique ID (इसे Method 1 की JSON से userInfo.user.secUid के अंदर निकाल सकते हैं)
  • cursor — pagination offset (0 से शुरू होता है, हर response अगला cursor देता है)
  • count — प्रति page items की संख्या (आमतौर पर 30–35)

Step-by-Step: Python से TikTok Internal API Query करना

Step 1: target profile का secUid लें।

इसे hidden JSON (Method 1) या profile page के HTML से निकाल सकते हैं।

Step 2: API request बनाकर भेजें।

1import requests
2import json
3sec_uid = "MS4wLjABAAAA..."  # Method 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()

Step 3: Response parse करें।

data["itemList"] में हर item की वही video structure होती है जो Method 1 में मिलती है — desc, stats, video.playAddr, video.downloadAddr, आदि।

Step 4: सभी videos के लिए pagination करें।

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)}")

हर iteration अगला batch और नया cursor देता है। Loop तब तक चलता रहता है जब तक hasMore False न हो जाए।

Internal API Method की सीमाएँ

  • TikTok इन endpoints और required parameters को बार-बार बदलता रहता है — इसलिए यह सबसे maintenance-heavy method है। हाल के महीनों में कुछ requests में msToken, X-Bogus, या दूसरी signature parameters की भी ज़रूरत पड़ने लगी है, जो TikTok की बनाती है (संकेत: इसे pure Python में replicate करना आसान नहीं है)।
  • कुछ data types के लिए session cookies या अतिरिक्त tokens चाहिए हो सकते हैं
  • IP-based rate limiting फिर भी लागू होता है — proxy rotation सुझाई जाती है
  • अगर itemList खाली आने लगे, तो आपका msToken शायद stale हो गया है (browser में यह लगभग हर 10 सेकंड में rotate होता है)
  • सबसे अच्छा उपयोग: bulk data extraction, जब आपको profile के सारे videos चाहिए हों और Method 1 की first-page-only सीमा पर्याप्त न हो

Method 3: Playwright के साथ TikTok Videos Scrape करना (Browser Automation)

जब पहले दो तरीके अटक जाएँ — login requirement, CAPTCHA, या ऐसे signature parameters जिन्हें आप replicate नहीं कर पा रहे — तो Playwright काम आता है। यह एक असली (headless) browser लॉन्च करता है, TikTok पर human user की तरह navigate करता है, और JavaScript rendering, infinite scroll, तथा authenticated sessions को संभाल सकता है।

TikTok Scraping के लिए Playwright सेट करना

Playwright और उसके browser binaries install करें:

1pip install playwright
2playwright install firefox

TikTok scraping के लिए मैं Chromium की बजाय Firefox की सलाह देता हूँ। Community testing में लगातार Firefox के साथ देखी गई है, और TikTok की bot detection विशेष रूप से Chromium-based headless browsers के खिलाफ सख्त है।

अतिरिक्त stealth के लिए, Playwright को (Playwright का patched fork) या (anti-detection के लिए C++ level पर बदला गया Firefox) के साथ जोड़ने पर विचार करें। में Camoufox प्रमुख bot detection services के खिलाफ लगभग perfect stealth scores देता है।

Step-by-Step: Playwright से TikTok Profile Videos Scrape करना

Step 1: headless Firefox browser लॉन्च करें और profile खोलें।

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")

Step 2: video grid load होने का इंतज़ार करें।

1        # Video items दिखाई देने तक wait करें
2        await page.wait_for_selector('[data-e2e="user-post-item"]', timeout=15000)

अगर TikTok "Something went wrong" overlay दिखाता है, तो आपको retry button क्लिक करना पड़ सकता है:

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)

Step 3: hidden JSON से data निकालें (Playwright में भी)।

सबसे भरोसेमंद तरीका अभी भी hydration JSON पकड़ना है, भले ही browser का उपयोग कर रहे हों:

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 navigation जो Method 1 में है
5        user_detail = data["__DEFAULT_SCOPE__"]["webapp.user-detail"]
6        videos = user_detail.get("itemList", [])

Step 4: more videos के लिए infinite scroll handle करें।

अगर आपको शुरुआती ~30 videos से ज़्यादा चाहिए, तो नीचे scroll करें और अतिरिक्त XHR responses capture करें:

1        all_videos = list(videos)
2        # Scroll करते समय API responses intercept करें
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        # और loads trigger करने के लिए नीचे scroll करें
13        for _ in range(5):  # ज़रूरत के अनुसार scroll count बदलें
14            await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
15            await asyncio.sleep(2)
16        # Intercept की गई responses से videos जोड़ें
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"))

अब आपके पास initial page load और scrolling के दौरान loaded additional pages, दोनों के video objects की list होनी चाहिए।

Playwright Method की सीमाएँ

  • सबसे धीमा तरीका है (full page render, network round-trips, scroll delays)
  • ज़्यादा resources लेता है — हर browser instance काफी memory और CPU उपयोग करता है
  • scale पर फिर भी IP-based blocking संभव है — proxy rotation के साथ इस्तेमाल करें
  • सबसे अच्छा उपयोग: complex interactions, login-walled content, CAPTCHAs, या जब Method 1 और 2 blocked हों

Python से TikTok Videos (.mp4) कैसे डाउनलोड करें

यही वह section है जो हर दूसरे TikTok scraping tutorial की सबसे बड़ी कमी पूरी करता है। Metadata निकालना उपयोगी है, लेकिन "scrape TikTok videos" सर्च करने वाले ज्यादातर लोग असली video files चाहते हैं।

TikTok video data object में download URLs embed करता है:

  • playAddr — आम तौर पर बिना watermark या कम watermark वाला version
  • downloadAddr — वह version जिसे TikTok in-app download के लिए मानता है (इसमें TikTok watermark overlay होता है)

दोनों URLs समय-संवेदनशील होते हैं और थोड़ी देर बाद expire हो जाते हैं (आमतौर पर कुछ घंटों में), इसलिए इन्हें निकालते ही जल्दी डाउनलोड करना चाहिए।

Step-by-Step: TikTok Video File डाउनलोड करना

Step 1: ऊपर बताए गए तीनों तरीकों में से किसी एक से video URL निकालें।

1video_url = video["video"]["playAddr"]  # No-watermark version
2# or
3video_url = video["video"]["downloadAddr"]  # With watermark

Step 2: सही headers के साथ GET request भेजें।

यहीं लोग अक्सर अटकते हैं। अगर आप सिर्फ requests.get(video_url) करेंगे, तो 403 मिलेगा। TikTok Referer header चेक करता है और browser-like 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)

Step 3: Response content को .mp4 फ़ाइल में लिखें।

stream=True इस्तेमाल करें और chunks में लिखें — TikTok videos बड़ी हो सकती हैं, और आप पूरी फ़ाइल memory में नहीं लाना चाहेंगे:

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 chunks
5        if chunk:
6            f.write(chunk)
7print(f"Downloaded: {filename}")

अब आपके local machine पर एक playable .mp4 फ़ाइल होनी चाहिए।

Watermark vs. No-Watermark Downloads

TikTok हर video के watermarked और non-watermarked दोनों versions रखता है। playAddr URL अक्सर cleaner version देता है (वही जो player इस्तेमाल करता है), जबकि downloadAddr में creator username के साथ TikTok watermark overlay होता है।

यहाँ ethics की छोटी-सी बात: watermark creator को credit देने के लिए होता है। अगर आप videos research, analysis, या internal review के लिए डाउनलोड कर रहे हैं, तो playAddr इस्तेमाल करना आम तौर पर ठीक है। लेकिन अगर आप content को फिर से distribute या repost कर रहे हैं, तो creator attribution हटाने से ethical और copyright, दोनों तरह की चिंताएँ उठती हैं। कानूनी section में इस पर और बात है।

ज़्यादा robust download pipeline के लिए पर विचार करें — इसका TikTok extractor signature math और URL resolution अपने आप संभाल लेता है, इसलिए आपको headers और token expiration खुद manage नहीं करना पड़ता।

Side-by-Side: कौन-सा Python Method इस्तेमाल करें?

यह comparison table वही है जो मुझे TikTok scraping projects शुरू करते समय चाहिए थी:

CriteriaMethod 1: Hidden JSONMethod 2: Internal APIMethod 3: Playwright
DifficultyBeginnerIntermediateIntermediate
SpeedFast (1 request per page)Fast (JSON API)Slow (full page render)
Anti-bot resilienceMediumLow (endpoints change)High (real browser जैसा व्यवहार)
वीडियो .mp4 डाउनलोड करता है?Yes (playAddr निकालकर)Yes (response में URL मिलता है)Yes (network intercept करके)
Infinite scroll handle करता है?No (सिर्फ first page)Yes (cursor pagination)Yes (scroll simulation)
Scale पर proxy चाहिए?YesYesYes
Maintenance requiredMedium (JSON structure बदल सकती है)High (endpoints/signatures अक्सर बदलते हैं)Low-Medium (browser खुद adapt करता है)
Best forQuick one-off profile scrapesBulk data extraction, all videosLogin-walled या complex content

मेरी recommendation:

  • किसी एक profile का तेज snapshot चाहिए? Method 1 से शुरुआत करें। इसे set up करने में लगभग 30 सेकंड लगते हैं और page के हिसाब से data एक सेकंड से कम में आ जाता है।
  • Pagination के साथ profile के सभी videos चाहिए? Method 2 सही रास्ता है, लेकिन TikTok के API parameters बदलने पर maintenance के लिए तैयार रहें।
  • Login walls, CAPTCHAs, या maximum resilience चाहिए? Method 3 with Playwright। यह धीमा और भारी है, लेकिन TikTok के लिए इसे block करना सबसे कठिन है।

Practical तौर पर मैं अक्सर Method 1 से शुरू करता हूँ और limitations आने पर ही Method 2 या 3 पर जाता हूँ। इससे infrastructure सरल रहता है और लागत कम।

Python नहीं चाहिए? No-Code Tools से TikTok Videos Scrape करें

बहुत से लोग जो "scrape TikTok videos with Python" search करते हैं, उन्हें वास्तव में Python नहीं चाहिए होता। उन्हें data चाहिए। अगर आप एक marketing analyst हैं जिसे कुछ competitor profiles से video metadata चाहिए, या brand manager हैं जो mentions track कर रहे हैं, तो Python environment, proxy rotation और signature handling सेट करना overkill है।

python-vs-nocode-ai-comparison.webp

यहाँ approaches की एक ईमानदार तुलना है:

ApproachSkill LevelCostMaintenanceBest For
Python (DIY)Intermediate+Free (+ proxy costs)High (scripts break)Full control, custom pipelines
Thunderbit (Chrome extension)BeginnerFree tier availableNone (AI हर बार site fresh पढ़ता है)Quick video data extraction, Sheets/Excel export
Apify TikTok ScraperBeginnerPaid (per-run)Low (Apify द्वारा maintained)Schedule पर bulk automated runs
TikAPIDeveloperPaid subscriptionMediumTikTok data पर apps बनाना

Thunderbit TikTok Scraping को कैसे संभालता है

वही AI web scraper है जो हमने Thunderbit में बनाया है, और यह traditional scraping tools से अलग काम करता है। पहले से बने CSS selectors या XPath rules पर निर्भर रहने के बजाय (जो TikTok का layout बदलते ही टूट जाते हैं), Thunderbit का AI हर बार page structure fresh पढ़ता है और relevant columns सुझाता है — caption, likes, hashtags, video URL, author, आदि।

इसका workflow सचमुच दो clicks में हो जाता है:

  1. Chrome में TikTok profile खोलें, Thunderbit extension क्लिक करें, और "AI Suggest Fields" दबाएँ। Thunderbit page scan करके table structure सुझाता है।
  2. सुझाए गए columns देखें, ज़रूरत हो तो edit करें, और "Scrape" पर क्लिक करें।

Data सीधे Google Sheets, Excel, Airtable, या Notion में export हो जाता है। कोई CSS selectors maintain करने की ज़रूरत नहीं, कोई code debug नहीं करना, कोई proxy configuration नहीं। जिस marketing analyst को कुछ profiles का video metadata चाहिए, उसके लिए यह Python environment set up करने से बहुत तेज़ है — और TikTok front-end बदलने पर भी नहीं टूटता (जो community reports के अनुसार हर कुछ हफ्तों में होता है)।

Thunderbit भी सपोर्ट करता है — यह हर individual video page पर जाकर आपके data table में comment counts, music info, या video duration जैसे अतिरिक्त details जोड़ सकता है।

आप इसे से free try कर सकते हैं। यह कैसे काम करता है, इसके लिए हमारा देखें।

इस विषय पर top-ranking tutorials में से लगभग किसी में legality पर चर्चा नहीं होती, जबकि TikTok ने scraping services पर कानूनी कार्रवाई भी की है। आपको क्या जानना चाहिए, वह यहाँ है।

TikTok's Terms of Service (§ 4.1) automated access को स्पष्ट रूप से prohibit करती हैं। TOS का उल्लंघन contract breach है, अपराध नहीं — लेकिन इससे account bans, IP blocks, या civil action हो सकती है।

Public data के लिए legal landscape उतना कठोर नहीं है जितना लोग समझते हैं। सबसे अहम precedent Meta Platforms v. Bright Data (N.D. Cal., Jan 2024) है, जहाँ अदालत ने कहा कि logged-out होकर publicly accessible data scrape करना Meta की Terms of Service का उल्लंघन नहीं है। Meta ने case वापस ले लिया और appeal भी छोड़ दी। इससे पहले hiQ v. LinkedIn Ninth Circuit ruling (post-Van Buren में फिर पुष्टि) ने तय किया था कि publicly accessible data scraping CFAA violation नहीं है — हालांकि hiQ अंततः settle हुआ, $500K चुकाया, और permanent injunction मानी, जिससे यह साफ़ है कि TOS enforcement फिर भी असर डाल सकता है।

अगर आप EU या California users का personal data collect कर रहे हैं, तो GDPR और CCPA लागू होते हैं। Public posts scrape करना एक बात है; individual users की personal information से database बनाना दूसरी बात।

Practical guidelines:

  • Requests की speed सीमित रखें (TikTok servers पर भारी load न डालें)
  • Private accounts या minors की content scrape न करें
  • Copyrighted video content को commercial रूप से redistribute न करें
  • robots.txt का सम्मान करें (TikTok ज्यादातर automated crawling को disallow करता है)
  • Personal research या analysis के लिए वीडियो डाउनलोड करना reposting से अलग है — इस फर्क को समझें

Disclaimer: यह educational content है, legal advice नहीं। अगर आप scraped TikTok data पर commercial product बना रहे हैं, तो lawyer से सलाह लें।

निष्कर्ष: मुख्य बातें

2025 में TikTok scraping एक moving target है। Platform की anti-bot stack web पर सबसे advanced में से एक है, और naive approaches (साधारण requests, ChatGPT-generated snippets, पुराने ट्यूटोरियल्स) fail हो जाएंगे। लेकिन सही method के साथ यह पूरी तरह किया जा सकता है।

याद रखने वाली बातें:

  • Method 1 (Hidden JSON) सबसे तेज़ और सरल है — quick profile scrapes के लिए यहीं से शुरू करें।
  • Method 2 (Internal API) pagination और bulk access देता है, लेकिन endpoints और signature requirements बदलने पर सबसे ज़्यादा maintenance चाहिए।
  • Method 3 (Playwright) anti-bot measures के खिलाफ सबसे resilient है, लेकिन speed और resources की कीमत पर।
  • तीनों methods video download URLs निकाल सकते हैं — और यह गाइड अकेला ऐसा है जो आपको proper headers के साथ .mp4 files डाउनलोड करने की पूरी प्रक्रिया भी दिखाता है।
  • Non-technical users के लिए, code लिखे या maintain किए बिना वही data पाने का बहुत तेज़ रास्ता देता है। इसका AI-based approach TikTok का layout बदलने पर भी नहीं टूटता — और community reports के अनुसार यह चीज़ उम्मीद से ज़्यादा बार होती है।

अगर आप बिना Python setup के शुरुआत करना चाहते हैं, तो — free tier कुछ profiles पर test करने के लिए काफी है। Python route चुनने वालों के लिए, Method 1 से शुरू करें, data validate करें, और फिर आगे scale करें।

Web scraping techniques पर और गहराई से जाना चाहते हैं? हमारे ये guides देखें: , , और

FAQs

Publicly accessible data scrape करना एक legal gray area है, साफ़-cut violation नहीं। Meta v. Bright Data (2024) ruling इस बात के पक्ष में है कि logged-out scraping of public data platform Terms of Service का उल्लंघन नहीं करता। हालांकि, TikTok की TOS automated access को स्पष्ट रूप से रोकती है, और personal data पर GDPR/CCPA लागू होते हैं। यह उतना illegal नहीं जितना लोग डरते हैं, लेकिन risk-free भी नहीं है। अपने specific use case के लिए legal professional से सलाह लें।

TikTok scraping के लिए सबसे अच्छी Python library कौन-सी है?

यह आपके approach पर निर्भर करता है। Hidden JSON extraction (Method 1) के लिए requests + beautifulsoup4 काफी है। Internal API calls (Method 2) के लिए requests या httpx काम करता है। Browser automation (Method 3) के लिए playwright अब standard बन चुका है — नए scraping projects में adoption के मामले में इसने Selenium को पीछे छोड़ दिया है, और इसके लगभग हैं, जबकि Selenium के लगभग 53 million। अगर आप higher-level interface चाहते हैं, तो TikTok-Api wrapper (~6.3K GitHub stars) भी देख सकते हैं, हालांकि यह fragile हो सकता है।

क्या मैं Python से बिना watermark के TikTok videos डाउनलोड कर सकता हूँ?

हाँ। TikTok के अपने data में playAddr URL होता है, जो आम तौर पर standard watermark overlay के बिना video version देता है। यह गाइड दिखाती है कि ऊपर बताए गए तीनों methods में से किसी से भी वह URL कैसे निकालेँ और proper headers के साथ .mp4 फ़ाइल कैसे डाउनलोड करें। इसके विपरीत downloadAddr field में watermark होता है।

मेरा TikTok scraper खाली data क्यों लौटाता है?

सबसे आम कारण यह है कि TikTok content render करने के लिए JavaScript पर निर्भर है। साधारण requests.get() सिर्फ shell HTML लाता है — असली data या तो hidden JSON script tag (Method 1) में होता है या JavaScript के जरिए dynamic रूप से लोड होता है (Method 3)। अगर आपको खाली HTML मिल रहा है, तो पहले Method 1 आज़माएँ। अगर वह भी न चले, तो अपने headers चेक करें (missing Referer 403 errors का सबसे बड़ा कारण है) या Playwright के साथ Method 3 पर जाएँ।

TikTok scraping करते समय blocked होने से कैसे बचें?

Realistic browser headers इस्तेमाल करें (User-Agent, Referer, और Accept-Language सहित), residential या mobile proxies rotate करें (datacenter IPs कुछ ही मिनटों में flag हो जाते हैं), requests के बीच random delays जोड़ें (कम से कम 1–3 seconds), और बहुत high volumes पर scraping न करें। Method 3 (Playwright) block होने से बचने में सबसे अच्छा है क्योंकि यह real browser session जैसा behave करता है। अगर volume गंभीर है, तो proxy costs का बजट रखें — entry-tier residential proxies प्रमुख providers से लगभग में मिलते हैं।

  • Learn More
Topics
TikTok Python से Scrape करनाTikTok डेटा एक्सट्रैक्शन PythonPython TikTok Scraper ScriptPython से TikTok वीडियो कैसे scrape करें
विषय सूची

Thunderbit आज़माएँ

लीड्स और अन्य डेटा सिर्फ 2 क्लिक में निकालें। AI से संचालित।

Thunderbit पाएं यह मुफ्त है
AI का उपयोग करके डेटा निकालें
डेटा को आसानी से Google Sheets, Airtable, या Notion में ट्रांसफर करें
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week