Indeed से किसी जॉब टाइटल को स्प्रेडशीट में कॉपी-पेस्ट करते-करते मेरी लगभग पचासवीं बारी आई, और मैं अपने करियर के फैसलों पर सवाल उठाने लगा। अगर आपने कभी प्रोग्रामेटिक तरीके से Indeed से स्ट्रक्चर्ड डेटा निकालने की कोशिश की है, तो पंचलाइन आप पहले से जानते होंगे: 403 त्रुटि कोई बग नहीं है — यह Indeed की डिफ़ेंस सिस्टम की एक फ़ीचर है।
Indeed दुनिया का सबसे बड़ा जॉब बोर्ड है, जहाँ लगभग 35 करोड़ मासिक यूनिक विज़िटर आते हैं, किसी भी समय 13 करोड़ जॉब लिस्टिंग रहती हैं, और यह 60 से अधिक देशों में काम करता है। इसलिए यह दुनिया में नौकरी बाज़ार डेटा के सबसे समृद्ध स्रोतों में से एक है — और सबसे मुश्किल स्क्रैप होने वाले स्रोतों में भी। ओपन-सोर्स स्क्रैपर JobFunnel (GitHub पर हज़ारों स्टार्स) को उसके मेंटेनर ने दिसंबर 2025 में आर्काइव कर दिया, क्योंकि वर्षों तक वह एंटी-बॉट हथियारों की दौड़ हारता रहा। मेंटेनर के अपने शब्द थे: "सभी यूज़र कुछ जॉब्स स्क्रैप कर सकते हैं, लेकिन जल्दी ही कैप्चा आ जाता है, और स्क्रैपिंग विफल हो जाती है, जिससे कोई जॉब नहीं मिलती." एक और कंट्रीब्यूटर ने रिपोर्ट किया कि पहले ही अनुरोध पर CAPTCHA आ गया। तो हाँ — यह कोई साधारण स्क्रैपिंग टार्गेट नहीं है। इस गाइड में, मैं आपको Python से Indeed को स्क्रैप करने के हर व्यावहारिक तरीके से लेकर चलूँगा, दिखाऊँगा कि 403 बाधा को कैसे पार करना है, और — जो लोग पूरा डीबगिंग चरण छोड़ना चाहते हैं — उनके लिए Thunderbit का इस्तेमाल करके बिना कोड वाला विकल्प भी दिखाऊँगा।
Python से Indeed को स्क्रैप करने का मतलब क्या है?
वेब स्क्रैपिंग, मूल रूप से, वेब पेजों से स्ट्रक्चर्ड डेटा का अपने-आप निष्कर्षण है। जब हम Python से Indeed को स्क्रैप करने की बात करते हैं, तो हमारा मतलब होता है ऐसा स्क्रिप्ट लिखना जो Indeed के सर्च रिज़ल्ट और जॉब डिटेल पेजों पर जाए, अंदर के HTML (या एम्बेडेड डेटा) को पढ़े, और जॉब टाइटल, कंपनी, लोकेशन, सैलरी, तथा विवरण जैसे फ़ील्ड्स को ऐसे फ़ॉर्मेट में निकाले जो इस्तेमाल हो सके — CSV, डेटाबेस, या Google Sheet।
आमतौर पर इसमें Requests (HTTP कॉल्स के लिए), BeautifulSoup (HTML पार्सिंग के लिए), और Selenium या Playwright (ब्राउज़र ऑटोमेशन के लिए) जैसी Python लाइब्रेरीज़ शामिल होती हैं। लेकिन Indeed कोई साधारण स्थिर साइट नहीं है। यह एक हाइब्रिड है: सर्वर-रेंडर किया गया HTML, जिसके अंदर एक एम्बेडेड JSON स्टेट ब्लॉब होता है, और उसके ऊपर Cloudflare Bot Management भी लगा होता है। इसका मतलब है कि आपका स्क्रैपर JavaScript-रेंडर की गई सामग्री, बदलते CSS क्लास नाम, और सख्त एंटी-बॉट सुरक्षा से निपटने में सक्षम होना चाहिए — और यह सब एक भी जॉब टाइटल पार्स करने से पहले।
2026 में कोई आधिकारिक, मुफ्त, सिर्फ पढ़ने योग्य Indeed API भी नहीं है। पुराना Publisher Jobs API लगभग 2020 के आसपास बंद कर दिया गया था, और जो बचा है वह केवल नियोक्ता-पक्ष के लिए है (Job Sync, Sponsored Jobs)। इसलिए स्क्रैपिंग या किसी थर्ड-पार्टी डेटा प्रदाता को भुगतान करना ही व्यावहारिक विकल्प हैं।
Indeed जॉब डेटा क्यों स्क्रैप करें?
Indeed को स्क्रैप करने का बिज़नेस केस सीधा है: हज़ारों लिस्टिंग को मैन्युअली देखना अव्यावहारिक है, और उन लिस्टिंग्स के भीतर का डेटा वाकई काफ़ी मूल्यवान होता है।

| उपयोग-केस | किसे लाभ होता है | उदाहरण |
|---|---|---|
| लीड जनरेशन | सेल्स और रिक्रूटिंग टीमें | संपर्क जानकारी के साथ हायरिंग कंपनियों की सूची बनाना |
| जॉब मार्केट रिसर्च | विश्लेषक, HR टीमें | ट्रेंडिंग स्किल्स, क्षेत्र के अनुसार सैलरी बेंचमार्क पहचानना |
| प्रतिस्पर्धी इंटेलिजेंस | नियोक्ता, स्टाफ़िंग एजेंसियाँ | प्रतिस्पर्धियों की हायरिंग पैटर्न और सैलरी ऑफ़र की निगरानी करना |
| व्यक्तिगत नौकरी खोज ऑटोमेशन | नौकरी ढूँढने वाले | अलग-अलग लोकेशनों में अपने मानदंडों से मेल खाने वाली लिस्टिंग एकत्र करना |
| ML मॉडल्स के लिए प्रशिक्षण डेटा | डेटा वैज्ञानिक | ऐतिहासिक डेटा से सैलरी प्रेडिक्शन मॉडल बनाना |
Indeed Hiring Lab का अपना शोध यह साबित करता है कि पोस्टिंग डेटा BLS JOLTS के साथ काफ़ी नज़दीकी से चलता है और अमेरिका के लेबर मार्केट कंडीशंस के लिए लगभग रियल-टाइम प्रॉक्सी की तरह काम कर सकता है। हेज फंड्स जॉब-पोस्टिंग की गति को एक वैकल्पिक डेटा सिग्नल के रूप में इस्तेमाल करते हैं। HR टीमें स्क्रैप की गई सैलरी रेंज के आधार पर मुआवज़े का बेंचमार्क तय करती हैं। और रिक्रूटर्स उन कंपनियों से संभावित ग्राहकों की सूची बनाते हैं जो सक्रिय रूप से हायरिंग कर रही हैं।
एक व्यावहारिक बात: Indeed पर सैलरी डेटा बेहतर हो रहा है, लेकिन अभी भी अधूरा है। 2025 के मध्य तक, अमेरिका की लगभग 59% पोस्टिंग में सैलरी जानकारी होती है, लेकिन केवल लगभग 22% में सटीक आंकड़ा दिया जाता है — बाकी रेंज होती हैं। Indeed डेटा पर आधारित किसी भी सैलरी विश्लेषण में इस कमी को ध्यान में रखना चाहिए।
Python से Indeed को स्क्रैप करने के लिए अपना तरीका चुनना
Indeed को स्क्रैप करने का कोई एक “सही” तरीका नहीं है। सबसे अच्छा तरीका आपकी स्किल, आपको कितना डेटा चाहिए, और आप कितना मेंटेनेंस झेल सकते हैं — इन सब पर निर्भर करता है। मैंने चारों प्रमुख तरीकों को आज़माया है, और उनकी तुलना कुछ ऐसी है:
| मानदंड | BS4 + Requests | Selenium | हिडन JSON (window.mosaic) | नो-कोड (Thunderbit) |
|---|---|---|---|---|
| कठिनाई | शुरुआती | मध्यम | मध्यम-उन्नत | नहीं के बराबर (2 क्लिक) |
| गति | तेज़ | धीमी (ब्राउज़र रेंडरिंग) | तेज़ | तेज़ (क्लाउड स्क्रैपिंग) |
| JS-रेंडर की गई सामग्री | नहीं | हाँ | हाँ (एम्बेडेड डेटा) | हाँ |
| एंटी-बॉट प्रतिरोध | कम | मध्यम (पकड़ा जा सकता है) | मध्यम-उच्च | उच्च (अपने-आप संभालता है) |
| HTML बदलने पर मेंटेनेंस | अधिक (सेलेक्टर टूटते हैं) | अधिक | मध्यम (JSON स्ट्रक्चर अधिक स्थिर) | नहीं (AI अनुकूल हो जाता है) |
| सबसे उपयुक्त | जल्दी प्रोटोटाइप | डायनामिक पेज, लॉगिन-गेटेड | बल्क स्ट्रक्चर्ड डेटा | गैर-डेवलपर, तेज़ नतीजे |
यह गाइड हर तरीके को समझाती है। अगर आप Python डेवलपर हैं, तो BS4, हिडन JSON, और Selenium वाले सेक्शन पढ़ें। अगर आप कोडर नहीं हैं (या 403 त्रुटियों से थक चुके हैं), तो सीधे Thunderbit सेक्शन पर जाएँ।
शुरू करने से पहले
- कठिनाई: शुरुआती से मध्यम (Python सेक्शन); नहीं के बराबर (Thunderbit सेक्शन)
- समय चाहिए: Python सेटअप और पहली स्क्रैपिंग के लिए लगभग 20–60 मिनट; Thunderbit के साथ लगभग 2 मिनट
- आपको क्या चाहिए: Python 3.9+, एक कोड एडिटर, Chrome ब्राउज़र, और (नो-कोड रास्ते के लिए) Thunderbit Chrome Extension
Indeed स्क्रैपिंग के लिए अपना Python वातावरण सेट करना
कोई स्क्रैपिंग कोड लिखने से पहले, अपना वातावरण तैयार कर लें।
ज़रूरी लाइब्रेरीज़ इंस्टॉल करें
एक वर्चुअल एनवायरनमेंट बनाएँ और ज़रूरी पैकेज इंस्टॉल करें:
python -m venv indeed_env
source indeed_env/bin/activate # Windows पर: indeed_env\Scripts\activate
# HTTP + पार्सिंग वाले तरीके के लिए
pip install requests beautifulsoup4 lxml httpx
# हिडन JSON तरीके के लिए (सिफ़ारिश की जाती है)
pip install curl_cffi parsel tenacity
# ब्राउज़र ऑटोमेशन वाले तरीके के लिए
pip install selenium
कुछ नोट्स:
curl_cffi2026 में Cloudflare-संरक्षित साइटों को स्क्रैप करने के लिए डिफ़ॉल्ट विकल्प है। यह असली ब्राउज़र TLS फ़िंगरप्रिंट की नकल करता है, जो साधारणrequestsऔरhttpxनहीं कर पाते। एंटी-बॉट सेक्शन में आगे इसका महत्व समझाया गया है।- Selenium 4.6+ में Selenium Manager शामिल है, इसलिए अब आपको ChromeDriver मैन्युअली डाउनलोड नहीं करना पड़ता — यह अपने आप ब्राउज़र बाइनरी मैनेज कर लेता है।
- BeautifulSoup के लिए
lxmlको पार्सर बैकएंड के रूप में इस्तेमाल करें। यह stdlibhtml.parserसे लगभग 1.5 गुना तेज़ है।
अपना प्रोजेक्ट ढाँचा बनाएँ
इसे सरल रखें:
indeed_scraper/
├── scraper.py
├── requirements.txt
└── output/
नीचे दिए गए सभी कोड उदाहरण scraper.py पर आधारित हैं।
BeautifulSoup का उपयोग करके Python से Indeed को कैसे स्क्रैप करें
यह शुरुआती लोगों के लिए आसान तरीका है: पेज फ़ेच करने के लिए requests और HTML पार्स करने के लिए BeautifulSoup। सेटअप तेज़ है, लेकिन Indeed पर यह सबसे नाज़ुक भी है।
चरण 1: Indeed सर्च URL बनाएँ
Indeed के सर्च URL एक अनुमानित पैटर्न का पालन करते हैं:
https://www.indeed.com/jobs?q=<query>&l=<location>&start=<offset>
उदाहरण के लिए, "Austin, TX" में "data analyst" खोजते हुए पहले पेज से शुरू करना:
from urllib.parse import urlencode
params = {
"q": "data analyst",
"l": "Austin, TX",
"start": 0,
}
url = f"https://www.indeed.com/jobs?{urlencode(params)}"
print(url)
# https://www.indeed.com/jobs?q=data+analyst&l=Austin%2C+TX&start=0
Indeed 10-10 के अंतराल में पेजिनेट करता है, और 1,000 परिणामों की एक सख्त सीमा होती है (start <= 990)। 990 से ऊपर का कोई भी ऑफ़सेट चुपचाप वही पेज वापस देता है।
चरण 2: सही हेडर्स के साथ HTTP अनुरोध भेजें
डिफ़ॉल्ट Python user-agent strings को Indeed तुरंत ब्लॉक कर देता है। आपको यथार्थवादी हेडर्स चाहिए:
import requests
headers = {
"User-Agent": (
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36"
),
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"Referer": "https://www.indeed.com/",
}
response = requests.get(url, headers=headers, timeout=30)
print(response.status_code)
अगर आपको 200 मिलता है, तो अभी आप अंदर हैं। अगर 403 मिलता है, तो Cloudflare ने आपको पकड़ लिया। (इसे आगे कैसे संभालना है, वह नीचे है।)
चरण 3: HTML से जॉब लिस्टिंग्स पार्स करें
जॉब कार्ड एलिमेंट चुनने के लिए BeautifulSoup का उपयोग करें। data-testid एट्रिब्यूट्स को टार्गेट करें — ये Indeed के रैंडम CSS class names से अधिक स्थिर होते हैं:
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, "lxml")
cards = soup.find_all("div", attrs={"data-testid": "slider_item"})
jobs = []
for card in cards:
title_el = card.find("h2", class_="jobTitle")
title = title_el.get_text(strip=True) if title_el else None
company = card.find(attrs={"data-testid": "company-name"})
location = card.find(attrs={"data-testid": "text-location"})
link = title_el.find("a")["href"] if title_el and title_el.find("a") else None
jobs.append({
"title": title,
"company": company.get_text(strip=True) if company else None,
"location": location.get_text(strip=True) if location else None,
"url": f"https://www.indeed.com{link}" if link else None,
})
print(f"Found {len(jobs)} jobs")
चरण 4: पेजिनेशन संभालें
start पैरामीटर को बढ़ाकर पेजों पर लूप करें:
import time, random
all_jobs = []
for page in range(0, 50, 10): # पहले 5 पेज
params["start"] = page
url = f"https://www.indeed.com/jobs?{urlencode(params)}"
response = requests.get(url, headers=headers, timeout=30)
# ... ऊपर की तरह पार्स करें ...
all_jobs.extend(jobs)
time.sleep(random.uniform(3, 6))
इस तरीके की सीमाएँ
मैं साफ़ कहूँगा: 2026 में Indeed के लिए BS4 + Requests सबसे कमज़ोर तरीका है। साधारण requests Python की stdlib TLS लाइब्रेरी का उपयोग करता है, जो ऐसा JA3 फ़िंगरप्रिंट बनाता है जिसे Cloudflare तुरंत "ब्राउज़र नहीं" के रूप में पहचान लेता है। यह HTTP/2 को भी सपोर्ट नहीं करता, जबकि Indeed यह सर्व करता है। संभव है कि कुछ ही पेजों के बाद आपको ब्लॉक कर दिया जाए। और CSS selectors? Indeed css-1m4cuuf और jobsearch-JobComponent-embeddedBody-1n0gh5s जैसे क्लास नाम अक्सर बदलता रहता है — इसलिए इन्हें टार्गेट करने वाला कोई भी selector समय-बम है।
इस तरीके का उपयोग केवल एक पेज पर जल्दी प्रोटोटाइपिंग के लिए करें। बड़े पैमाने पर काम के लिए, हिडन JSON तरीका अपनाएँ।
Hidden JSON डेटा का उपयोग करके Python से Indeed को कैसे स्क्रैप करें
यह वह तरीका है जिसकी मैं ज़्यादातर Python डेवलपर्स को सिफ़ारिश करता हूँ। नाज़ुक HTML एलिमेंट्स को पार्स करने के बजाय, आप Indeed के पेज सोर्स में एम्बेडेड एक JavaScript वेरिएबल से स्ट्रक्चर्ड डेटा निकालते हैं: window.mosaic.providerData["mosaic-provider-jobcards"].
आपको जिस भी फ़ील्ड की ज़रूरत है — जॉब टाइटल, कंपनी, लोकेशन, सैलरी, जॉब की, पोस्टिंग डेट, रिमोट फ़्लैग — वह पहले से ही इस JSON ब्लॉब में मौजूद होता है। JavaScript निष्पादन की ज़रूरत नहीं। यह स्कीमा कम-से-कम 2023 से स्थिर रहा है, इसलिए यह DOM selectors की तुलना में कहीं अधिक मज़बूत है।
चरण 1: पेज HTML फ़ेच करें
requests के बजाय curl_cffi का उपयोग करें — यह असली ब्राउज़र TLS फ़िंगरप्रिंट की नकल करता है, जो Cloudflare से बचने के लिए महत्वपूर्ण है:
from curl_cffi import requests as cffi_requests
response = cffi_requests.get(
"https://www.indeed.com/jobs?q=python+developer&l=Remote&start=0",
impersonate="chrome124",
headers={
"Accept-Language": "en-US,en;q=0.9",
"Referer": "https://www.indeed.com/",
},
timeout=30,
)
print(response.status_code, len(response.text))
curl_cffi क्यों? यह curl-impersonate पर आधारित एक Python binding है, जो असली ब्राउज़रों के exact TLS ClientHello, HTTP/2 SETTINGS frame, और हेडर ordering को पुन: प्रस्तुत करता है। यह JA3/JA4 और Akamai H2 fingerprint दोनों को एक ही कॉल में मात देने वाला एकमात्र सक्रिय रूप से मेंटेन किया गया Python HTTP client है। समर्थित impersonation टार्गेट्स में chrome120, chrome124, chrome131, Safari, और Edge variants शामिल हैं।
चरण 2: रेगुलर एक्सप्रेशन से JSON निकालें
JSON ब्लॉब एक <script> टैग में एम्बेडेड होता है। इसे regex से निकालें:
import re, json
MOSAIC_RE = re.compile(
r'window\.mosaic\.providerData\["mosaic-provider-jobcards"\]=(\{.+?\});',
re.DOTALL,
)
match = MOSAIC_RE.search(response.text)
if match:
data = json.loads(match.group(1))
results = data["metaData"]["mosaicProviderJobCardsModel"]["results"]
print(f"हिडन JSON में {len(results)} जॉब्स मिले")
else:
print("हिडन JSON नहीं मिला — संभव है ब्लॉक या पेज में बदलाव")
चरण 3: JSON से जॉब फ़ील्ड्स पार्स करें
results में हर आइटम में पेज पर दिखने वाली जानकारी से भी ज़्यादा डेटा होता है:
jobs = []
for job in results:
jobs.append({
"jobkey": job["jobkey"],
"title": job["title"],
"company": job.get("company"),
"location": job.get("formattedLocation"),
"remote": job.get("remoteLocation"),
"salary": (job.get("salarySnippet") or {}).get("text"),
"posted": job.get("formattedRelativeTime"),
"job_type": job.get("jobTypes"),
"easy_apply": job.get("indeedApplyEnabled"),
"url": f"https://www.indeed.com/viewjob?jk={job['jobkey']}",
})
JSON में अक्सर सैलरी अनुमान, टैक्सोनॉमी एट्रिब्यूट्स (स्किल टैग्स), और कंपनी रेटिंग्स भी होती हैं, जो रेंडर किए गए HTML में हमेशा दिखाई नहीं देतीं।
चरण 4: कई पेज स्क्रैप करें
कुल परिणाम गिनने के लिए JSON में tierSummaries का उपयोग करें, फिर लूप चलाएँ:
import time, random
all_jobs = []
for start in range(0, 50, 10): # पहले 5 पेज
url = f"https://www.indeed.com/jobs?q=python+developer&l=Remote&start={start}&sort=date"
response = cffi_requests.get(
url,
impersonate="chrome124",
headers={"Accept-Language": "en-US,en;q=0.9", "Referer": "https://www.indeed.com/"},
timeout=30,
)
match = MOSAIC_RE.search(response.text)
if match:
data = json.loads(match.group(1))
results = data["metaData"]["mosaicProviderJobCardsModel"]["results"]
all_jobs.extend([{
"jobkey": j["jobkey"],
"title": j["title"],
"company": j.get("company"),
"location": j.get("formattedLocation"),
"salary": (j.get("salarySnippet") or {}).get("text"),
"url": f"https://www.indeed.com/viewjob?jk={j['jobkey']}",
} for j in results])
time.sleep(random.uniform(3, 7))
print(f"कुल: {len(all_jobs)} जॉब्स स्क्रैप की गईं")
हिडन JSON अधिक मज़बूत क्यों है
window.mosaic.providerData संरचना CSS class names की तुलना में कम बार बदलती है। आपको गंदे HTML को पार्स किए बिना साफ़, स्ट्रक्चर्ड डेटा मिलता है। फिर भी, एंटी-बॉट mitigation (हेडर्स, देरी, प्रॉक्सी) की ज़रूरत रहती है — और वह हम अगले हिस्से में देखेंगे।
Selenium का उपयोग करके Python से Indeed को कैसे स्क्रैप करें
Selenium ब्राउज़र ऑटोमेशन वाला तरीका है। यह तब उपयोगी है जब आपको पेज के साथ इंटरैक्ट करना हो — जैसे जॉब डिटेल पैनल पर क्लिक करना, लॉगिन-गेटेड कंटेंट संभालना, या डायनामिक रूप से लोड होने वाले विवरण स्क्रैप करना जो शुरुआती HTML में नहीं होते।
HTTP clients की जगह Selenium कब इस्तेमाल करें
- Indeed कुछ सामग्री डायनामिक रूप से लोड करता है (राइट-साइड पैनल में पूरा जॉब विवरण)
- आपको ऐसे पेज स्क्रैप करने हैं जिनमें session state या लॉगिन की ज़रूरत हो
- आप छोटे पैमाने पर स्क्रैपिंग कर रहे हैं जहाँ गति प्राथमिकता नहीं है
त्वरित walkthrough
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time
options = Options()
options.add_argument("--disable-blink-features=AutomationControlled")
# options.add_argument("--headless=new") # Headless अधिक detect होता है — सावधानी से उपयोग करें
driver = webdriver.Chrome(options=options)
driver.get("https://www.indeed.com/jobs?q=data+engineer&l=New+York")
time.sleep(3)
cards = driver.find_elements(By.CSS_SELECTOR, "[data-testid='slider_item']")
for card in cards:
try:
title = card.find_element(By.CSS_SELECTOR, "h2.jobTitle").text
company = card.find_element(By.CSS_SELECTOR, "[data-testid='company-name']").text
location = card.find_element(By.CSS_SELECTOR, "[data-testid='text-location']").text
print(f"{title} | {company} | {location}")
except Exception:
continue
driver.quit()
सीमाएँ
Selenium धीमा है — हर पेज के लिए पूरा ब्राउज़र रेंडरिंग चाहिए। Headless Chrome, Indeed की एंटी-बॉट सिस्टम द्वारा पता लगाया जा सकता है (Cloudflare navigator.webdriver, WebGL vendor strings, plugin counts, और बहुत कुछ जाँचता है)। undetected-chromedriver भी detection को केवल टालता है; इसे स्थायी रूप से रोकता नहीं। और BS4 की तरह, Indeed अपना UI अपडेट करेगा तो आपके selectors टूट जाएँगे।
अधिकतर उपयोग मामलों में, हिडन JSON तरीका आपको वही डेटा तेज़ी से और कम मेंटेनेंस के साथ देता है। Selenium को केवल उन edge cases के लिए रखें जहाँ आपको सचमुच ब्राउज़र की ज़रूरत हो।
Python से Indeed को स्क्रैप करते समय 403 त्रुटियों से कैसे बचें
यही वह सेक्शन है जो सबसे ज़्यादा मायने रखता है। अगर आप किसी झुंझलाहट भरी Google खोज से यहाँ आए हैं, तो आप सही जगह पर हैं।

Indeed आपका स्क्रैपर क्यों ब्लॉक करता है
Indeed Cloudflare Bot Management और Cloudflare Turnstile का उपयोग करता है — न कि DataDome, न PerimeterX। रिस्पॉन्स हेडर्स इसे साबित करते हैं: server: cloudflare, cf-ray, और __cf_bm bot-management cookie। Cloudflare आपके TLS fingerprint (JA3/JA4), HTTP/2 हेडर ordering, request patterns, और ब्राउज़र व्यवहार संकेतों को जाँचता है। अगर इनमें से कोई भी गैर-मानवीय लगे, तो आपको 403, 429, 503, या — सबसे चालाक मामला — वास्तविक जॉब डेटा की जगह Turnstile challenge page वाला 200 OK मिलता है।
User-Agent और request headers रोटेट करें
एक ही स्थिर User-Agent आपको ब्लॉक कराने का सबसे तेज़ तरीका है। वर्तमान, यथार्थवादी strings के पूल से रोटेट करें। ज़रूरी बात: User-Agent Reduction के बाद Chrome के minor-version fields 0.0.0 पर स्थिर रहते हैं — काल्पनिक non-zero minor versions मत बनाइए, वरना एंटी-बॉट्स पकड़ लेंगे।
import random
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36 Edg/145.0.3800.97",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 "
"(KHTML, like Gecko) Version/17.4 Safari/605.1.15",
]
headers = {
"User-Agent": random.choice(USER_AGENTS),
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Referer": "https://www.indeed.com/",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "same-origin",
}
यह भी सुनिश्चित करें कि आपके sec-ch-ua Client Hints UA version से मेल खाते हों। sec-ch-ua: "Chrome";v="131" और User-Agent में Chrome 145 दिखना — यह तुरंत रेड फ्लैग है।
अनुरोधों के बीच यादृच्छिक देरी जोड़ें
निश्चित अंतराल pattern detection से पकड़ लिए जाते हैं। यादृच्छिक jitter का उपयोग करें:
import time, random
# हर अनुरोध के बीच
time.sleep(random.uniform(3, 6))
# ब्लॉक होने पर retry के बाद
def backoff_sleep(attempt):
base = 4
sleep_time = base * (2 ** attempt) + random.uniform(0, 2)
time.sleep(min(sleep_time, 60))
ScrapeOps और WebScraping.AI की फ़ील्ड consensus के अनुसार प्रति IP 3–6 सेकंड का अंतर और एक session में प्रति IP लगभग 100 requests की hard cap के बाद rotation करनी चाहिए।
Proxy rotation इस्तेमाल करें
यह सफलता का सबसे बड़ा निर्धारक है। AWS/GCP ranges के datacenter proxies, Cloudflare Enterprise targets पर लगभग 5–15% सफलता देते हैं — Indeed पर तो लगभग बेकार हैं। सही TLS fingerprinting के साथ residential proxies सफलता को 80–95% तक ले जा सकते हैं।
PROXIES = [
"http://user:pass@us.residential.example:7777",
"http://user:pass@us.residential.example:7778",
"http://user:pass@us.residential.example:7779",
]
proxy = random.choice(PROXIES)
response = cffi_requests.get(
url,
impersonate="chrome124",
headers=headers,
proxies={"https": proxy},
timeout=30,
)
2026 में residential proxy pricing लगभग $4–8.50 प्रति GB है, जो provider और commitment level पर निर्भर करता है। Indeed के लिए, छोटे pool से शुरू करें और आवश्यकता अनुसार बढ़ाएँ।
403, 429, और 503 status codes को शालीनता से संभालें
बस अंधाधुंध retry मत कीजिए। अलग-अलग status codes का मतलब अलग होता है:
def fetch_with_retry(url, proxy_pool, max_retries=5):
for attempt in range(max_retries):
proxy = random.choice(proxy_pool)
headers["User-Agent"] = random.choice(USER_AGENTS)
try:
r = cffi_requests.get(
url,
impersonate=random.choice(["chrome124", "chrome120", "edge101"]),
headers=headers,
proxies={"https": proxy},
timeout=30,
)
# चालाक "200 with challenge" मामले की जाँच
if r.status_code == 200 and "cf-turnstile" not in r.text and "Just a moment" not in r.text:
return r
if r.status_code == 403:
print(f"403 — ब्लॉक हो गया। प्रॉक्सी बदल रहे हैं, प्रयास {attempt + 1}")
elif r.status_code == 429:
print(f"429 — rate limit लग गया। गति कम कर रहे हैं।")
elif r.status_code == 503:
print(f"503 — सर्वर ओवरलोड या JS challenge।")
backoff_sleep(attempt)
except Exception as e:
print(f"अनुरोध त्रुटि: {e}")
backoff_sleep(attempt)
raise RuntimeError(f"{max_retries} retries के बाद विफल: {url}")
200-with-challenge का मामला सबसे मुश्किल है। 200 को सफल मानने से पहले हमेशा response body में cf-turnstile या Just a moment markers देखें।
आसान विकल्प: एंटी-बॉट का काम Thunderbit पर छोड़ दें
जो लोग proxy pools, header rotation, और TLS fingerprint impersonation बनाना व मेंटेन करना नहीं चाहते, उनके लिए Thunderbit की cloud scraping सेवा CAPTCHAs, proxy rotation, और anti-bot protections को अपने-आप संभालती है। कोई proxy setup नहीं, कोई curl_cffi configuration नहीं, कोई CAPTCHA-solving library नहीं। जब आपको बस डेटा चाहिए, तो यही सबसे कम झंझट वाला रास्ता है।
आपका Indeed scraper बार-बार क्यों टूटता है (और इसे कैसे ठीक करें)
403 की दीवार तात्कालिक दर्द है। दीर्घकालिक दर्द है मेंटेनेंस — जो स्क्रैपर आज काम करते हैं, वे अगले हफ़्ते चुपचाप खाली डेटा या पुराने नतीजे लौटाने लगते हैं।
Indeed आपके selectors को कैसे तोड़ता है
Indeed CSS class names को बहुत आक्रामक तरीके से रोटेट करता है। Bright Data की गाइड स्पष्ट रूप से चेतावनी देती है कि css-1m4cuuf और css-1rqpxry जैसे क्लास “रैंडमली जनरेटेड लगते हैं — संभवतः build time पर।” A/B testing का मतलब है कि अलग-अलग sessions में अलग-अलग पेज लेआउट दिख सकते हैं। और DOM restructuring बिना सूचना के हो जाता है।
JobFunnel की कहानी शिक्षाप्रद है। एक कंट्रीब्यूटर ने रिपोर्ट किया: "CaptchaBuster ने captcha को सफलतापूर्वक कम कर दिया है, और फिर भी पेज सफलतापूर्वक स्क्रैप न होने का कारण [है] पुराने beautiful soup selectors." स्क्रैपर ब्लॉक नहीं हुआ था — वह गलत एलिमेंट पार्स कर रहा था।
रणनीति: DOM parsing की बजाय हिडन JSON को प्राथमिकता दें
window.mosaic.providerData ब्लॉब कम-से-कम 2023 से schema-stable रहा है। metaData.mosaicProviderJobCardsModel.results[] पथ 2026 में भी मानक बना हुआ है। DOM selectors हर महीने टूटते हैं। JSON extraction शायद ही कभी, वह भी साल में एक बार टूटे।
रणनीति: class names के बजाय data attributes का उपयोग करें
जब DOM को छूना ही पड़े, तो functional attributes को टार्गेट करें:
| सेलेक्टर | उद्देश्य |
|---|---|
[data-testid="slider_item"] | हर जॉब कार्ड कंटेनर |
[data-testid="job-title"] या h2.jobTitle > a | जॉब टाइटल लिंक |
[data-testid="company-name"] | नियोक्ता का नाम |
[data-testid="text-location"] | लोकेशन टेक्स्ट |
हर कार्ड पर data-jk="<jobkey>" | सबसे स्थिर hook — 2019 से अपरिवर्तित |
पुराने selectors पकड़ने के लिए assertion checks जोड़ें
अपना स्क्रैपर कभी भी शून्य परिणामों के साथ चुपचाप न चलने दें। हर fetch के बाद एक check जोड़ें:
results = parse_hidden_json(html)
assert len(results) > 0, (
f"start={start} पर Indeed ने खाली result set लौटाया — "
"संभव है ब्लॉक, CAPTCHA, या selector drift। "
f"response के पहले 500 chars: {html[:500]}"
)
विफलता पर raw response के पहले 500–2000 characters log करें। इससे आप तुरंत पहचान पाएँगे कि आपको Turnstile challenge मिला, sign-in wall मिला, या schema change हुआ। एक fixed query (जैसे q=python&l=remote) के खिलाफ daily CI-level smoke test चलाएँ, जो non-zero results assert करे।
AI विकल्प: ऐसे स्क्रैपर जो कभी न टूटें
Thunderbit का AI हर बार पेज की संरचना को नए सिरे से पढ़ता है — यह hardcoded selectors या regex patterns पर निर्भर नहीं करता। जब Indeed अपना HTML बदलता है, Thunderbit अपने-आप अनुकूल हो जाता है। यह सीधे उस मेंटेनेंस बोझ को संबोधित करता है जिसे फ़ोरम उपयोगकर्ता अपनी सबसे बड़ी परेशानी बताते हैं। अगर आपने कभी Slack पर यह संदेश देखा हो कि "स्क्रैपर फिर से खाली rows दे रहा है," तो आप जानते हैं कि इसे ठीक न करना कितना मूल्यवान है।
Python लिखे बिना Indeed को स्क्रैप करें: नो-कोड विकल्प
हर प्रतिस्पर्धी गाइड मान लेता है कि आप Python कोड लिखेंगे। लेकिन फ़ोरम डेटा कुछ और ही बताता है। यूज़र कहते हैं "constant bugs and errors" के कारण यह बहुत कठिन है, और कुछ तो डेटा पाने के लिए Fiverr पर किसी को काम देने तक की सलाह देते हैं। अगर यह आपको परिचित लगता है, तो यह सेक्शन आपका escape hatch है।
Thunderbit से Indeed कैसे स्क्रैप करें (स्टेप-बाय-स्टेप)
चरण 1: Chrome Web Store से Thunderbit Chrome Extension इंस्टॉल करें। शुरुआत करना मुफ़्त है।
चरण 2: अपने ब्राउज़र में Indeed के सर्च रिज़ल्ट पेज पर जाएँ — उदाहरण के लिए, https://www.indeed.com/jobs?q=data+analyst&l=Austin%2C+TX.
चरण 3: ब्राउज़र टूलबार में Thunderbit आइकन पर क्लिक करें, फिर "AI Suggest Fields" पर क्लिक करें। Thunderbit का AI पेज को स्कैन करता है और Job Title, Company, Location, Salary, Job URL, और Posted Date जैसे कॉलम अपने-आप पहचान लेता है। आप सुझाए गए फ़ील्ड्स की समीक्षा और समायोजन कर सकते हैं — जो कॉलम नहीं चाहिए उन्हें हटा सकते हैं, या सादी अंग्रेज़ी में बताकर कस्टम फ़ील्ड जोड़ सकते हैं।
चरण 4: "Scrape" पर क्लिक करें। Thunderbit पेज से डेटा निकालकर उसे एक स्ट्रक्चर्ड टेबल में दिखाता है। आपको आपके कॉन्फ़िगर किए गए फ़ील्ड्स के साथ जॉब लिस्टिंग्स की rows दिखनी चाहिए।
Subpage scraping से समृद्ध करें
लिस्टिंग पेज स्क्रैप करने के बाद "Scrape Subpages" पर क्लिक करें ताकि Thunderbit हर अलग जॉब डिटेल पेज पर जाए। यह पूरी जॉब डिस्क्रिप्शन, योग्यताएँ, लाभ, और application links निकाल लेता है — अलग से कोई सेटअप नहीं चाहिए। यह लगभग हर /viewjob?jk=<jobkey> URL पर जाने वाला दूसरा Python scraper लिखने जैसा है, बस इसमें एक क्लिक लगता है।
पेजिनेशन अपने-आप संभालें
Thunderbit Indeed की click-based pagination को अपने-आप संभालता है। आपको offset URLs मैन्युअली बनाने या pagination loops लिखने की ज़रूरत नहीं। यह पेजों पर क्लिक करता है और नतीजे एकत्र करता है।
अपने पसंदीदा टूल्स में export करें
स्क्रैप किए गए डेटा को CSV, Excel, Google Sheets, Airtable, या Notion में export करें — पूरी तरह मुफ़्त। csv.writer() या pandas.to_csv() कोड लिखने की ज़रूरत नहीं।
Python बनाम Thunderbit कब इस्तेमाल करें
| परिदृश्य | सबसे अच्छा टूल |
|---|---|
| कस्टम डेटा पाइपलाइन, cron/Airflow के जरिए scheduled automation | Python |
| बड़े कोडबेस में एकीकरण | Python |
| अत्यधिक कस्टम parsing logic | Python |
| एक बार का शोध या मार्केट विश्लेषण | Thunderbit |
| गैर-तकनीकी टीम सदस्यों को डेटा चाहिए | Thunderbit |
| 403 त्रुटियों को डीबग किए बिना अभी डेटा चाहिए | Thunderbit |
| बिना किसी सेटअप के subpage enrichment | Thunderbit |
समय की तुलना: Python सेटअप + एंटी-बॉट debugging = घंटों से दिनों तक, खासकर पहली बार। Thunderbit = वही डेटा 2 मिनट से भी कम में। मैं यह नहीं कह रहा कि Python गलत है — मैं कह रहा हूँ कि यह इस बात पर निर्भर करता है कि आपको क्या चाहिए।
क्या Indeed को स्क्रैप करना कानूनी है? आपको क्या जानना चाहिए
टॉप रैंकिंग वाली Indeed scraping गाइड्स में से कोई भी वैधता पर बात नहीं करता, जबकि फ़ोरम में "Is scraping Indeed legal?" अक्सर पूछा जाता है। यह कानूनी सलाह नहीं है, लेकिन स्थिति कुछ ऐसी है।
Indeed की Terms of Service
Indeed की ToS (indeed.com/legal) में कोई सर्वव्यापी "no scraping" clause नहीं है। एकमात्र स्पष्ट automation निषेध Section A.3.5 में है, जो "use of any automation, scripting, or bots to automate the Indeed Apply process" पर रोक लगाता है। यह केवल Apply flow तक सीमित है, सार्वजनिक जॉब लिस्टिंग्स को निष्क्रिय रूप से पढ़ने तक नहीं। Indeed का मुख्य enforcement टूल तकनीकी है — Cloudflare challenges, IP bans, device fingerprinting — कोर्ट नहीं।
प्रासंगिक कानूनी मिसाल
सबसे अधिक उद्धृत अमेरिकी मामला hiQ Labs v. LinkedIn है। 9th Circuit ने अप्रैल 2022 में माना कि सार्वजनिक रूप से उपलब्ध डेटा को स्क्रैप करना “संभवतः CFAA” (Computer Fraud and Abuse Act) का उल्लंघन नहीं करता। हालांकि बाद में hiQ को contract breach के लिए उत्तरदायी पाया गया, क्योंकि उसके कर्मचारियों ने नकली LinkedIn प्रोफ़ाइल बनाए थे और ToS स्वीकार किया था।
हाल ही में, Meta v. Bright Data (N.D. Cal., जनवरी 2024) ने इससे भी स्पष्ट निष्कर्ष दिया। जज Chen ने माना कि Facebook और Instagram की Terms "logged-off scraping of public data को नहीं रोकतीं।" अगले महीने Meta ने शेष दावों को स्वेच्छा से वापस ले लिया।
Indeed की robots.txt
Indeed की robots.txt डिफ़ॉल्ट User-agent: * के लिए /jobs/ और /job/ को व्यापक रूप से disallow करती है, लेकिन Googlebot और Bingbot को /viewjob? — व्यक्तिगत जॉब डिटेल पेज — तक पहुँच की अनुमति देती है। AI प्रशिक्षण crawlers (GPTBot, CCBot, anthropic-ai) पर काफ़ी प्रतिबंध हैं। robots.txt अमेरिका में कानूनी रूप से बाध्यकारी नहीं है, लेकिन इसका सम्मान करना best practice है और सद्भावना का प्रमाण भी।
जिम्मेदार स्क्रैपिंग के लिए व्यावहारिक दिशानिर्देश
- केवल सार्वजनिक रूप से उपलब्ध डेटा स्क्रैप करें — कभी लॉगिन न करें, कभी नकली खाते न बनाएँ
- rate limits का सम्मान करें: प्रति IP हर 3–6 सेकंड में 1 अनुरोध, कम concurrency
- स्क्रैप किए गए डेटा को अपनी नौकरी बोर्ड की तरह पुनर्प्रकाशित न करें
- डेटा का उपयोग व्यक्तिगत या आंतरिक शोध के लिए करें, बिना अनुमति के व्यावसायिक पुनर्विक्रय के लिए नहीं
- ज़रूरत न होने वाले PII को हटा दें या hash करें; personal-adjacent डेटा पर retention ceiling तय करें
- यदि आप बड़े पैमाने पर या EU/UK में काम करते हैं, तो वकील से सलाह लें — GDPR की Article 14 transparency obligations स्क्रैप किए गए व्यक्तिगत डेटा पर लागू होती हैं
जोखिम का पैमाना: व्यक्तिगत नौकरी खोज ऑटोमेशन कम-जोखिम वाले सिरे पर है। Indeed डेटा का बड़े पैमाने पर व्यावसायिक पुनर्विक्रय उच्च-जोखिम वाले सिरे पर है।
निष्कर्ष और मुख्य बातें
Python से Indeed को स्क्रैप करना संभव है, लेकिन यह ऐसा वीकेंड प्रोजेक्ट नहीं है जिसे एक बार सेट कर के भूल जाएँ। Indeed की Cloudflare सुरक्षा, बदलते selectors, और सख्त एंटी-बॉट उपायों का मतलब है कि आपको सही टूल्स और सही अपेक्षाओं के साथ इसे अपनाना होगा।
इन सब से मैं ये बातें निकालूँगा:
- Indeed वेब पर नौकरी बाज़ार डेटा का सबसे समृद्ध स्रोत है — 35 करोड़ मासिक विज़िटर, 13 करोड़ लिस्टिंग — लेकिन यह स्क्रैपर्स के खिलाफ़ ज़बरदस्त प्रतिरोध करता है।
- हिडन JSON extraction (
window.mosaic.providerData) सबसे मज़बूत Python तरीका है। स्कीमा वर्षों से स्थिर है, जबकि CSS selectors हर महीने टूटते हैं। - ब्राउज़र impersonation के साथ
curl_cffi2026 में Cloudflare-संरक्षित साइटों के लिए डिफ़ॉल्ट HTTP client है। साधारणrequestsऔरhttpxकेवल TLS fingerprint के आधार पर ब्लॉक हो जाते हैं। - 403 त्रुटियों से बचने के लिए हमेशा rotating headers, random delays, और residential proxies का उपयोग करें। Cloudflare Enterprise के सामने datacenter proxies लगभग बेकार हैं।
- Assertion checks जोड़ें ताकि selector टूटने या job data की जगह challenge page आने पर आपको तुरंत पता चल जाए।
- गैर-तकनीकी उपयोगकर्ताओं या उन लोगों के लिए जो बस तेज़ नतीजे चाहते हैं, Thunderbit एक no-code, AI-संचालित रास्ता देता है जो साइट के बदलावों के अनुसार अपने-आप अनुकूल हो जाता है — बिना proxies, बिना debugging, बिना maintenance।
अगर आप no-code रास्ता आज़माना चाहते हैं, तो Thunderbit एक free tier देता है ताकि आप इसे बिना किसी प्रतिबद्धता के Indeed पर आज़मा सकें। और अगर आप Python रास्ता चुन रहे हैं, तो ऊपर दिए गए code samples एक मज़बूत शुरुआती बिंदु हैं — बस याद रखें कि anti-bot resilience को बाद की चिंता नहीं, बल्कि एक प्रमुख चिंता समझें।
वेब स्क्रैपिंग के तरीकों और टूल्स के बारे में अधिक जानकारी के लिए, Python से web scrape कैसे करें, best automated web scraping tools, और blocked हुए बिना web scraping कैसे करें पर हमारे गाइड देखें। आप Thunderbit YouTube Channel पर ट्यूटोरियल भी देख सकते हैं।
Indeed डेटा तेज़ी से स्क्रैप करने के लिए Thunderbit आज़माएँ Get Started Free
FAQs
Indeed को स्क्रैप करने के लिए कौन-सी Python लाइब्रेरीज़ सबसे अच्छी हैं?
HTTP requests के लिए, 2026 में curl_cffi सबसे मज़बूत विकल्प है — यह असली ब्राउज़र TLS fingerprints की नकल करता है, जो Cloudflare को बायपास करने के लिए ज़रूरी है। कम सुरक्षा वाले targets के लिए HTTP/2 के साथ httpx एक ठीक fallback है। HTML parsing के लिए lxml के साथ BeautifulSoup4 अब भी मानक है। ब्राउज़र automation के लिए Playwright (playwright-stealth के साथ) या undetected-chromedriver काम करते हैं, हालांकि दोनों अब पहले से अधिक detect हो रहे हैं। हिडन JSON regex तरीका (window.mosaic.providerData) भारी parsing की ज़रूरत ही खत्म कर देता है।
Indeed को स्क्रैप करते समय मुझे बार-बार 403 त्रुटियाँ क्यों मिलती हैं?
Indeed Cloudflare Bot Management का उपयोग करता है, जो आपके TLS fingerprint (JA3/JA4), HTTP/2 हेडर ordering, request patterns, और browser behavior को जाँचता है। अगर आप साधारण requests इस्तेमाल कर रहे हैं, तो आपका TLS fingerprint तुरंत आपको Python script के रूप में पहचान देता है — और headers पढ़े जाने से पहले ही 403 आ जाता है। इसे ठीक करने के लिए browser impersonation के साथ curl_cffi पर जाएँ, realistic User-Agent strings रोटेट करें, random delays (3–6 seconds) जोड़ें, और residential proxies इस्तेमाल करें। साथ ही "200 with Turnstile challenge" मामले की जाँच करें — response bodies में cf-turnstile markers खोजें।
क्या मैं बिना कोड लिखे Indeed को स्क्रैप कर सकता हूँ?
हाँ। Thunderbit जैसे टूल आपको कुछ ही क्लिक में Indeed job listings निकालने देते हैं — Chrome extension इंस्टॉल करें, Indeed search page पर जाएँ, "AI Suggest Fields" पर क्लिक करें, फिर "Scrape"। Thunderbit का AI job title, company, location, और salary जैसे फ़ील्ड्स अपने-आप पहचानता है। यह pagination, subpage enrichment (पूरा job description), और anti-bot protections अपने-आप संभालता है। CSV, Google Sheets, Airtable, या Notion में मुफ़्त export करें।
Indeed अपनी HTML संरचना कितनी बार बदलता है?
Indeed नियमित रूप से CSS class names बदलता है (जैसे css-1m4cuuf, randomized hashed strings) और DOM elements को बिना सूचना के पुनर्गठित करता है। A/B testing के कारण अलग-अलग users को एक ही समय में अलग layouts दिख सकते हैं। हिडन JSON तरीका (window.mosaic.providerData) काफ़ी अधिक स्थिर है — schema कम-से-कम 2023 से सुसंगत रहा है। जब DOM selectors उपयोग करना ही पड़े, तो CSS classes के बजाय data-testid attributes और data-jk (job key) को टार्गेट करें।
क्या Indeed को स्क्रैप करना कानूनी है?
9th Circuit के hiQ v. LinkedIn निर्णय (2022) और Meta v. Bright Data निर्णय (2024) के आधार पर, सार्वजनिक रूप से उपलब्ध Indeed job URLs की logged-out scraping से अमेरिका में CFAA liability उत्पन्न होने की संभावना कम है। Indeed की ToS खास तौर पर Apply process को automate करने से रोकती है, न कि सार्वजनिक listings को निष्क्रिय रूप से पढ़ने से। फिर भी, हमेशा जिम्मेदारी से स्क्रैप करें: लॉगिन न करें, नकली खाते न बनाएँ, rate limits का सम्मान करें, डेटा को अपनी job board की तरह पुनर्प्रकाशित न करें, और किसी भी personal data (recruiter names, emails) को GDPR/CCPA के तहत सावधानी से संभालें। व्यावसायिक पैमाने के संचालन के लिए, वकील से सलाह लें।
और जानें
- Python में Blocked हुए बिना Web Scraping कैसे करें
- Python Web Scraping: Smart Proxy Usage से Blocks से बचें
- Python के साथ Web Scraper कैसे लिखें: शुरुआत से अंत तक
- Python का उपयोग करके Website से Data Efficiently कैसे Scrape करें
- Python का उपयोग करके Data कैसे Scrape करें: शुरुआती लोगों के लिए ट्यूटोरियल


