Python से Craigslist कैसे Scrape करें (बिना Ban हुए)

अंतिम अपडेट: April 16, 2026
Python से Craigslist कैसे Scrape करें (बिना Ban हुए)

Craigslist आज भी करीब 108 million monthly visits खींचता है, वह भी लगभग 700 local sites पर — और इसकी कोई public API नहीं है। अगर आपको apartment listings, used cars, job posts, या gig ads से structured data चाहिए, तो scraping ही लगभग एकमात्र रास्ता है।

लेकिन Craigslist का custom anti-bot system काफी सख्त है। यह Cloudflare या DataDome पर नहीं चलता — यह अपना खुद का nginx-based rate limiter इस्तेमाल करता है, जिसे एक दशक से ज़्यादा समय में और निखारा गया है। गलत तरीके से hit किया, तो दूसरी coffee से पहले ही 403 मिल जाएगा। मैंने Craigslist की defenses के खिलाफ अलग-अलग approaches बहुत टेस्ट की हैं, और इसी का नतीजा यह guide है: 2025 के हिसाब से updated, हर category पर लागू होने वाला Python tutorial, जिसमें JSON-LD extraction method शामिल है (पुराने guides की तुलना में सबसे बड़ा upgrade), honest anti-ban strategies, legal landscape, और एक no-code alternative भी है — उन लोगों के लिए जो बस data चाहते हैं, code नहीं।

Python से Craigslist Scrape करना क्या होता है?

Web scraping Craigslist का मतलब है Python scripts का इस्तेमाल करके Craigslist pages पर programmatically जाना, और वहाँ से वह structured data निकालना जिसमें आपकी रुचि है — जैसे titles, prices, descriptions, images, locations, posting dates — फिर उसे spreadsheet, database, या JSON file में save करना।

Python इसके लिए सबसे popular choice है क्योंकि इसकी library ecosystem बहुत मजबूत है। requests, BeautifulSoup, lxml, और curl_cffi के साथ आप 100 lines से भी कम code में एक working Craigslist scraper बना सकते हैं। Community भी बहुत बड़ी है, इसलिए जब Craigslist कुछ बदलता है (और वह बदलता रहता है), तो किसी न किसी ने उसका fix पहले ही ढूँढ लिया होता है।

जानने वाली सबसे अहम बात: Craigslist कोई public read API नहीं देता। इसका एकमात्र official programmatic interface Bulk Posting Interface (BAPI) है, जो write-only है — यानी यह approved paid posters को listings submit करने देता है, retrieve नहीं। Third-party platforms पर जो भी “Craigslist API” product दिखता है, वह असल में unofficial scraper होता है, sanctioned endpoint नहीं। Bulk data चाहिए, तो scraping करनी होगी।

Craigslist Scrape क्यों करें? असली Use Cases

Craigslist सिर्फ पुराना sofa ढूँढने की जगह नहीं है। यह एक विशाल, लगातार update होने वाला dataset है, जो कई अलग-अलग verticals में फैला है। असल में इसे scrape करने से ये लोग फायदा उठाते हैं:

Use Caseकिसे फायदा होता हैक्या निकालते हैं
Apartment & rental price monitoringReal estate agents, renters, PropTech companiesPrice, sqft, bedrooms, neighborhood, lat/long
Used car market analysisDealerships, consumer apps, researchersPrice, make, model, year, odometer, condition
Job market researchRecruiters, labor economists, workforce analystsTitle, compensation, employment type, posted date
Lead generationSales teams, service providersContact info, business names, service area
Competitive pricingLocal service providers, ecommerce opsService pricing, descriptions, areas served

सबसे ज्यादा cite किया जाने वाला academic example है Kaggle "Used Cars Dataset" — करीब 500,000 US used-car listings, 26 variables के साथ, जिस पर कई papers बने हैं, including 2024 का एक ResearchGate study on US used car market dynamics. Hedge funds ने rent-trend research के लिए aggregated Craigslist rental data खरीदा है। Sales teams भी services और gigs categories को lead generation के लिए regularly scrape करते हैं।

गणित सीधा है: 8 घंटे की manual copy-pasting बनाम लगभग 10 मिनट एक अच्छे scraper के साथ।

craigslist_stats_55285c3a34.png

Python से Craigslist Scrape करें: सिर्फ Cars नहीं, हर Category

ज्यादातर Craigslist scraping guides जो मैंने देखे हैं, सिर्फ cars-for-sale तक सीमित हैं — जैसे कोई Google tutorial हो जो केवल image search समझाए। Craigslist में दर्जनों categories हैं, और हर category के URL patterns अलग होते हैं।

Structure हमेशा यह होता है: https://{city}.craigslist.org/search/{category_slug}

City subdomain और slug बदल दीजिए, और आप बिल्कुल अलग vertical scrape कर रहे होते हैं। यहाँ सबसे popular categories की reference table है (April 2025 में verified):

CategoryURL SlugExtract करने वाले Typical Fields
Apartments / Housing/search/apaPrice, sqft, bedrooms, location, pet policy
Cars & Trucks/search/ctaPrice, make, model, year, odometer
Jobs/search/jjjTitle, company, salary, employment type
Services/search/bbbTitle, description, phone number, area
Gigs/search/gggTitle, compensation, date, category
For Sale (general)/search/sssTitle, price, condition, location

Filtering के लिए query parameters भी जोड़ सकते हैं:

Parameterउद्देश्यExample
queryFull-text keyword?query=studio
min_price / max_pricePrice range&min_price=1500&max_price=3000
hasPicसिर्फ image वाले posts&hasPic=1
postedTodayपिछले 24 घंटे&postedToday=1
sortOrdering&sort=priceasc
sPagination offset (120 per page)?s=120

तो https://newyork.craigslist.org/search/apa?min_price=1500&max_price=3000&hasPic=1 जैसा URL आपको New York apartments दिखाएगा, जिनकी कीमत $1,500 से $3,000 के बीच है और जिनमें photos हैं। इस guide का हर Python scraper इन सभी categories पर काम करता है — बस slug बदलना है।

2025 Craigslist HTML Selectors: पुराने बनाम नए (और JSON Shortcut)

Craigslist scrapers के टूटने की सबसे बड़ी वजह HTML structure changes होते हैं। अगर आप 2022 का कोई tutorial follow कर रहे हैं जो .result-row या .result-info target करने को कहता है, तो आपका scraper लगभग खत्म ही समझिए।

Craigslist ने 2023–2024 में search results markup दोबारा लिखा। पुराने class names नए wrappers के अंदर मौजूद हैं, लेकिन DOM tree के top पर उन्हें target करने से खाली list मिलती है। क्या बदला है, देखिए:

ElementLegacy Selector (pre-2024)Current Selector (2025)
Listing container.result-info.cl-search-result
Title link.result-title.posting-title a
Price.result-price.priceinfo
Metadata (area).result-hood.meta

लेकिन असली insight — और 2025-current scraper को बाकियों से अलग करने वाली बात — यह है: search results के लिए आपको HTML parse करने की ज़रूरत ही नहीं है।

Craigslist अब हर visible listing को <script id="ld_searchpage_results"> tag के अंदर structured JSON-LD data के रूप में embed करता है। एक single requests.get() call से पूरे page का schema.org ItemList मिल जाता है — हर listing के साथ title, price, currency, location, image URL, detail page link। JavaScript rendering की जरूरत नहीं। CSS selector टूटने का डर नहीं।

JSON-LD approach तेज़ है, ज़्यादा stable है, और Craigslist जब UI में थोड़ा सा भी बदलाव करता है, तो टूटने की संभावना बहुत कम रहती है। यही तरीका हर actively maintained GitHub repo में इस्तेमाल हो रहा है, और नीचे tutorial में भी यही use करेंगे।

एक बात ध्यान रखें: JSON-LD block pricing वाली categories में मौजूद होता है — apartments (apa), for sale (sss), cars (cta), housing (hhh)। लेकिन jobs (jjj), gigs (ggg), community (ccc), और services (bbb) में यह अक्सर absent या sparse होता है, क्योंकि उनमें schema.org/Offer pricing नहीं होती। ऐसी categories में .cl-search-result HTML path पर वापस जाना होगा।

Python Stack कैसे चुनें: Requests + BS4 बनाम Selenium बनाम Playwright

हर scraping forum में यही सवाल आता है: “कौन सी library use करूँ?” Craigslist के लिए, जवाब ज़्यादातर sites की तुलना में काफी साफ है।

Factorrequests + BeautifulSoupSeleniumPlaywright
Speed5–15 pages/sec (network-bound)0.3–1 pages/sec0.5–2 pages/sec
JS-rendered contentNoYesYes
Memory~30–60 MB~400–700 MB~300–500 MB
Setup complexityLowMediumMedium
Anti-bot resilienceLow (needs headers/proxies)Medium (real browser)Medium-High
Best Craigslist use caseSearch results (JSON-LD)Detail pages with dynamic contentLarge-scale async scraping
Learning curveBeginner-friendlyModerateModerate

Craigslist pages server-rendered होती हैं। JSON-LD blob initial HTML में ही मौजूद होता है। Read paths पर कोई JavaScript challenge नहीं है। GitHub पर active Craigslist scraper भी requests + BeautifulSoup या Scrapy का इस्तेमाल करते हैं। Selenium या Playwright का लगभग कोई उपयोग नहीं होता। यह संयोग नहीं है — browser automation framework hundreds of MB memory खा लेता है, 10–100× speed penalty देता है, और बिना किसी लाभ के ज़्यादा visible fingerprint बनाता है।

मेरी recommendation:

  • requests + BS4: यहीं से शुरू करें। JSON-LD extraction method के साथ यह perfectly fit बैठता है और Craigslist scraping needs का 95% संभाल लेता है।
  • Selenium: तभी जब आपको specific detail pages पर dynamic content के साथ interact करना हो (Craigslist में यह rare है)।
  • Playwright: अगर आप thousands of pages तक async concurrency के साथ scale कर रहे हैं — लेकिन सच कहें तो bottleneck Craigslist का rate limiter है, library की throughput नहीं।

अगर आप पूरा breakdown चाहते हैं, तो हमने अलग posts में Playwright vs. Puppeteer तुलना और best Python web scraping tools की roundup भी cover की है।

Python लिखे बिना Craigslist scrape करें Get Started Free

No-Code Alternative: Python लिखे बिना Craigslist Scrape करें

Code शुरू करने से पहले एक छोटा detour — यह section उन लोगों के लिए है जो developer नहीं हैं। Real estate agents, sales teams, operations managers — अगर आपको बस data चाहिए और Python नहीं लिखना, तो एक तेज़ रास्ता है।

Thunderbit एक AI web scraper है जो Chrome extension के रूप में काम करता है। यह Craigslist को लगभग 2 clicks में scrape कर सकता है, no code required. Workflow यह है:

  1. किसी भी Craigslist search results page पर जाएँ (apartments, cars, jobs — कोई भी category)।
  2. Thunderbit sidebar में "AI Suggest Fields" पर क्लिक करें। AI page पढ़ता है और listing title, price, location, link जैसी columns auto-detect करता है।
  3. "Scrape" पर क्लिक करें — data कुछ ही seconds में extract हो जाएगा।
  4. Subpage Scraping का उपयोग करके हर listing की detail page खोलें और full descriptions, phone numbers, images, और attributes से data enrich करें।
  5. Data को सीधे Google Sheets, Excel, Airtable, या Notion में export करें — वह भी पूरी तरह free.

Recurring जरूरतों के लिए — जैसे daily apartment price monitoring या weekly job listing snapshots — Thunderbit का Scheduled Scraper आपको schedule plain English में बताने देता है, और वह अपने आप चल जाता है। No cron jobs, no server setup.

Thunderbit Cloud Scraping mode के जरिए anti-bot measures भी संभालता है, इसलिए rotating proxies या headers craft करने की चिंता नहीं करनी पड़ती। अगर आप इसे try करना चाहते हैं, तो Thunderbit Chrome Extension लें और खुद देखें।

अगर आपको full control और customization चाहिए, तो Python step-by-step पढ़ते रहिए।

Step-by-Step: Python से Craigslist कैसे Scrape करें (पूरा Tutorial)

  • Difficulty: Intermediate
  • Time Required: ~30 minutes (setup + first scrape)
  • What You'll Need: Python 3.8+, Chrome browser (pages inspect करने के लिए), एक terminal

Step 1: Python Environment सेट करें

ज़रूरी libraries install करें:

pip install requests beautifulsoup4 lxml

lxml optional है, लेकिन BeautifulSoup parsing को काफ़ी तेज़ कर देता है। अगर आगे TLS fingerprinting की समस्या आए (anti-ban section में और details हैं), तो curl_cffi भी install कर सकते हैं:

pip install curl_cffi

Import block:

import requests
from bs4 import BeautifulSoup
import json
import csv
import time
import random

अब आपके पास एक साफ Python environment है, जिसमें सारी dependencies installed हैं।

Step 2: किसी भी Category के लिए Craigslist URL बनाएं

City + category slug + optional filters से target URL dynamically बनाइए:

from urllib.parse import urlencode

BASE = "https://{city}.craigslist.org/search/{slug}"

def build_url(city, slug, **params):
    return f"{BASE.format(city=city, slug=slug)}?{urlencode(params)}"

# Example: New York apartments, $1500-$3000, with photos
url = build_url("newyork", "apa", min_price=1500, max_price=3000, hasPic=1)
print(url)
# https://newyork.craigslist.org/search/apa?min_price=1500&max_price=3000&hasPic=1

"apa" को "cta" (cars), "jjj" (jobs), "bbb" (services), या ऊपर वाली category table के किसी भी slug से बदल सकते हैं। "newyork" को "sfbay", "chicago", "losangeles", आदि से बदलें।

Step 3: Page Fetch करें और Embedded JSON निकालें

Proper headers के साथ GET request भेजें, फिर JSON-LD block parse करें:

HEADERS = {
    "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"
    ),
    "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.craigslist.org/",
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "same-origin",
    "Upgrade-Insecure-Requests": "1",
}

session = requests.Session()
r = session.get(url, headers=HEADERS, timeout=20)
r.raise_for_status()

soup = BeautifulSoup(r.text, "html.parser")
tag = soup.select_one("script#ld_searchpage_results")
data = json.loads(tag.text) if tag else {"itemListElement": []}

अगर tag None है, तो उस category में JSON-LD block नहीं है — तब HTML parsing पर लौटिए (ऊपर selector table देखें)। Apartments, cars, और for-sale categories में JSON-LD block भरोसेमंद रूप से मौजूद होता है।

Step 4: Listing Data को Structured Records में बदलें

JSON items पर iterate करके ज़रूरी fields निकालें:

listings = []
for entry in data["itemListElement"]:
    item = entry["item"]
    offers = item.get("offers", {}) or {}
    addr = (offers.get("availableAtOrFrom") or {}).get("address", {})
    listings.append({
        "name":     item.get("name"),
        "url":      offers.get("url"),
        "price":    offers.get("price"),
        "currency": offers.get("priceCurrency"),
        "locality": addr.get("addressLocality"),
        "region":   addr.get("addressRegion"),
        "image":    item.get("image"),
    })

print(f"Found {len(listings)} listings")

आपको कुछ ऐसा दिखना चाहिए: “Found 120 listings” (Craigslist प्रति page 120 results दिखाता है)। कुछ listings में price None हो सकती है अगर poster ने उसे शामिल नहीं किया — downstream logic में इसे gracefully handle करें।

Step 5: Richer Data के लिए Detail Pages Scrape करें

Search results सिर्फ summary info देते हैं। Full descriptions, attributes (bedrooms, sqft, pet policy), lat/long coordinates, और images के लिए हर listing की detail URL visit करनी होगी।

def fetch_detail(url, session):
    r = session.get(url, headers=HEADERS, timeout=20)
    r.raise_for_status()
    s = BeautifulSoup(r.text, "html.parser")
    body = s.select_one("#postingbody")
    mp = s.select_one("#map")
    return {
        "description": body.get_text("\n", strip=True) if body else None,
        "attributes":  [x.get_text(" ", strip=True) 
                        for x in s.select("p.attrgroup span, div.attrgroup .attr")],
        "lat": mp.get("data-latitude") if mp else None,
        "lng": mp.get("data-longitude") if mp else None,
        "images": [img["src"] for img in s.select("div.gallery img")],
    }

for item in listings:
    item.update(fetch_detail(item["url"], session))
    time.sleep(random.uniform(3, 6))  # critical: anti-ban jitter

time.sleep(random.uniform(3, 6)) optional नहीं है। इसे skip करेंगे, तो कुछ ही दर्जन requests में 403 मिल सकता है। Detail pages server-rendered होती हैं और उनके selectors (#titletextonly, #postingbody, #map) लगभग 2017 से stable हैं — Craigslist की बहुत कम चीज़ें इतनी भरोसेमंद हैं।

Step 6: Pagination संभालकर सारे Results Scrape करें

Craigslist pagination के लिए ?s=120 offset parameter इस्तेमाल करता है। हर page पर 120 results होते हैं, और maximum offset आमतौर पर 2999 होता है।

def iter_all(city, slug, max_pages=25, **filters):
    for page in range(max_pages):
        offset = page * 120
        url = build_url(city, slug, s=offset, **filters)
        r = session.get(url, headers=HEADERS, timeout=20)
        r.raise_for_status()
        soup = BeautifulSoup(r.text, "html.parser")
        tag = soup.select_one("script#ld_searchpage_results")
        if not tag:
            break
        data = json.loads(tag.text)
        items = data.get("itemListElement", [])
        if not items:
            break
        for entry in items:
            item = entry["item"]
            offers = item.get("offers", {}) or {}
            yield {
                "name": item.get("name"),
                "url": offers.get("url"),
                "price": offers.get("price"),
            }
        time.sleep(random.uniform(2.5, 5.0))

हज़ारों pages को तेज़ी से scrape करने की कोशिश न करें। Craigslist का rate limiter per-IP होता है, और sustainable single-IP throughput लगभग 0.3–0.5 requests/second के आसपास रहता है, library चाहे कोई भी हो। यह ceiling Python तय नहीं करता, Craigslist तय करता है।

Step 7: Craigslist Data को CSV, JSON, या Google Sheets में Export करें

अपने results save करें:

# CSV
with open("craigslist.csv", "w", newline="", encoding="utf-8") as f:
    w = csv.DictWriter(f, fieldnames=listings[0].keys())
    w.writeheader()
    w.writerows(listings)

# JSON
with open("craigslist.json", "w", encoding="utf-8") as f:
    json.dump(listings, f, indent=2, ensure_ascii=False)

अगर आप export code पूरी तरह skip करना चाहते हैं, तो Thunderbit browser से सीधे Google Sheets, Excel, Airtable, या Notion में free export देता है। लेकिन Python pipelines के लिए CSV और JSON standard outputs हैं। आप data को analysis के लिए सीधे pandas में या sqlite3 से database में भी भेज सकते हैं।

Python से Craigslist Scrape करते समय Ban से कैसे बचें

ज्यादातर tutorials इस हिस्से को हल्के में लेते हैं। Craigslist का anti-bot system custom-built है, off-the-shelf नहीं, और इसकी कुछ अपनी खास quirks हैं।

craigslist_antibot_ae9ddc3f54.png

Realistic Request Headers इस्तेमाल करें

Craigslist header order और completeness validate करता है। Sec-Fetch-Dest missing हो या User-Agent पुराना हो, तो content तक पहुँचने से पहले ही request flag हो सकती है। पूरा Chrome 120+ header set (Step 3 में दिखाया गया) minimum है। Session के हिसाब से 5–10 recent Chrome/Firefox desktop strings में User-Agent rotate कर सकते हैं — लेकिन session के बीच में मत बदलिए, क्योंकि यह unnatural लगता है।

Sec-Fetch-* headers missing होना पहली बार scraper चलाने वालों के instant blocks की सबसे common वजह है।

Requests के बीच Random Delays जोड़ें

Multiple sources (ScrapingBee, Scraperly, Oxylabs, Multilogin) से community consensus यह है कि search page fetches के बीच random 2–5 seconds और detail page fetches के बीच 3–6 seconds का gap रखें। Fixed interval bot जैसा दिखता है। time.sleep(random.uniform(2, 5)) इस्तेमाल करें — कभी time.sleep(2) नहीं।

Proxies Rotate करें (अगर scale पर scrape कर रहे हैं)

Craigslist पूरे AWS, GCP, और Azure IP ranges को पहले से block कर देता है। Datacenter proxies अक्सर शुरू होते ही fail हो जाते हैं। कुछ सौ pages से ज़्यादा scrape करना हो, तो residential rotating proxies चाहिए, जिन्हें हर 20–30 requests पर rotate करना बेहतर है। Mobile proxies detection risk सबसे कम रखते हैं, लेकिन कीमत $8–30/GB हो सकती है।

Proxy TypeCraigslist पर Detection RiskCost (2025)
Datacenterबहुत high — अक्सर पहली request पर block$0.50–2/GB
Residential rotatingLow — recommended$5–15/GB
Mobileसबसे कम$8–30/GB

अगर आप यह सब खुद manage नहीं करना चाहते, तो Thunderbit का Cloud Scraping mode proxy rotation अपने आप संभाल लेता है।

CAPTCHAs को Gracefully Handle करें

Craigslist पर CAPTCHAs read paths में rare होते हैं — ये ज़्यादातर posting/reply flows में दिखते हैं। अगर फिर भी दिखें: कम से कम 60 seconds रुकिए, IP rotate कीजिए, cookies clear कीजिए, और speed कम कर दीजिए। लगातार CAPTCHAs का मतलब है आपकी cadence बहुत aggressive है, यह कोई puzzle नहीं जिसे solver से brute-force किया जाए।

Rate Limits का सम्मान करें और Backoff लागू करें

Craigslist rate limit hit होने पर 403 (429 नहीं) लौटाता है। 403 का मतलब है current IP deny list में है — blindly retry मत कीजिए। IP rotate करें, UA बदलें, और प्रतीक्षा करें।

from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

retry = Retry(
    total=5,
    backoff_factor=1.5,  # 1.5, 3, 6, 12, 24s
    status_forcelist=[429, 500, 502, 503, 504],
    allowed_methods={"GET"},
    respect_retry_after_header=True,
)
adapter = HTTPAdapter(max_retries=retry)
session.mount("https://", adapter)

एक और tip: community reports लगातार बताते हैं कि target city के local time में 2–6 AM का window सबसे safe होता है, और daytime की तुलना में block rates लगभग 30–40% कम रहती हैं।

TLS Fingerprinting — छिपा हुआ Trap

Craigslist की bot layer TLS ClientHello inspect करती है। Python का requests library (जो OpenSSL पर चलता है) एक ऐसा JA3 fingerprint देता है जो किसी real browser से match नहीं करता। Perfect User-Agent header के साथ browser-जैसा न दिखने वाला TLS fingerprint एक detectable mismatch बन जाता है। Workaround है curl_cffi with impersonate="chrome124", जो Chrome की TLS handshake की नकल करता है:

from curl_cffi import requests as cffi_requests

r = cffi_requests.get(url, headers=HEADERS, impersonate="chrome124")

अगर clean residential IPs और सही headers के बावजूद unexplained 403 आ रहे हैं, तो ज़्यादातर संभावना TLS fingerprinting की है।

Craigslist robots.txt, Terms of Service, और Ethical Scraping

अधिकतर guides इस हिस्से को या तो छोड़ देते हैं या FAQ में एक line में दबा देते हैं। चूँकि Craigslist ने एक scraper (RadPad, 2017) के खिलाफ $60.5 million judgment जीता था, इसलिए इसे एक footnote से कहीं ज़्यादा attention मिलना चाहिए।

Craigslist का robots.txt असल में क्या कहता है

robots.txt file काफ़ी छोटा है। इसमें एक ही User-agent: * block है, और सिर्फ सात disallowed paths हैं:

Disallow: /reply
Disallow: /fb/
Disallow: /suggest
Disallow: /flag
Disallow: /mf
Disallow: /mailflag
Disallow: /eaf

ये सातों interactive/mutating endpoints हैं: reply, flag, suggest, email-a-friend। Listing pages (/search/..., individual post URLs) disallowed नहीं हैं। कोई Crawl-delay directive भी नहीं है, हालांकि Craigslist IP blocks के जरिए अपनी तरफ से delay enforce करता है।

City subdomains sitemap भी publish करते हैं — जैसे https://newyork.craigslist.org/sitemap/index.xml — जो listings तक officially discoverable path है।

Legal Precedent: वे cases जो matter करते हैं

Craigslist v. 3Taps (2013, settled 2015): 3Taps ने Craigslist listings scrape करके उन्हें resale किया। जब Craigslist ने cease-and-desist भेजा और IPs block किए, 3Taps ने rotating proxies से block को bypass किया। Court ने माना कि explicit revocation के बाद IP blocks को circumvent करना CFAA के तहत “without authorization” माना जा सकता है। 3Taps ने $1M पर settle किया.

Meta v. Bright Data (2024): एक हालिया ruling में कहा गया कि Meta की TOS logged-off scraping of publicly available data को prohibit नहीं कर सकती। Court ने माना कि logged-off scraper “same shoes as a visitor” में होता है। 2024–2025 scrapers के लिए यह सबसे अहम ruling है — अगर आप कभी Craigslist account नहीं बनाते, कभी login नहीं करते, और सिर्फ publicly visible pages access करते हैं, तो TOS शायद आपके खिलाफ contract की तरह enforce न हो सके।

Practical takeaway: सार्वजनिक pages के लिए Van Buren (2021) और hiQ v. LinkedIn (2022) के बाद CFAA risk काफी कम हुआ है। लेकिन state-law tort claims (trespass-to-chattels, misappropriation) अभी भी मौजूद हैं — यही वजह है कि 3Taps settlement और $60.5M RadPad judgment हुआ था।

यह informational content है, legal advice नहीं। अगर आप Craigslist commercial purpose से scrape कर रहे हैं, तो lawyer से बात करें।

Practical Ethical Scraping Checklist

  • ✅ robots.txt में हर Disallow का सम्मान करें — खासकर सात action endpoints का
  • ✅ प्रति IP 24 घंटे में 1,000 pages से काफी नीचे रहें (Craigslist की TOS इस threshold से ऊपर $0.25 per page liquidated damages तय करती है)
  • ✅ हमेशा logged-off रहें — scraping के लिए कभी Craigslist account न बनाएं
  • ✅ explicit block के बाद proxies से IP bans bypass न करें (यही 3Taps के लिए problem बना)
  • ✅ requests के बीच delays जोड़ें — कम से कम 2–5 seconds
  • ✅ personal contact info को spam के लिए scrape न करें
  • ✅ raw Craigslist data को redistribute न करें और उसे अपनी own platform की तरह पेश न करें
  • ✅ data को legitimate research, analysis, या personal-use purposes के लिए इस्तेमाल करें
  • ✅ brute-force crawling की बजाय जहाँ संभव हो published sitemaps को प्राथमिकता दें
  • ✅ data store करने पर ingestion के समय PII (emails, phone numbers) हटाएँ

Web scraping के legal implications पर हमने एक deeper guide भी लिखी है, अगर आप पूरा picture देखना चाहते हैं: legal implications of web scraping.

Python बनाम No-Code: आपके लिए कौन सा तरीका सही है?

FactorPython (requests + BS4)Thunderbit (No-Code)
Setup time30–60 min (install, write code)2 minutes (install Chrome extension)
Technical skill neededIntermediate PythonNone
CustomizationFull control over logic, fields, flowAI auto-detects fields; user can adjust
ScaleUnlimited (with proxies, scheduling)Scheduled Scraper for recurring tasks
Anti-ban handlingManual (headers, delays, proxies, TLS)Built-in (Cloud Scraping)
Export optionsCSV, JSON (code it yourself)Google Sheets, Excel, Airtable, Notion — free
Best forDevelopers, data scientists, custom pipelinesSales teams, real estate agents, ops managers

अगर आपको full customization चाहिए, बड़े data pipeline से integrate करना है, या अंदर क्या हो रहा है यह ठीक से समझना है, तो Python चुनें। अगर आपको जल्दी result चाहिए और code लिखना/maintain नहीं करना, तो Thunderbit लें। दोनों valid हैं। बात आपके use case पर आती है और इस पर कि आप terminal में समय बिताना चाहते हैं या browser में।

निष्कर्ष

Craigslist housing, cars, jobs, services, gigs, और कई अन्य categories में rich, continuously updated data source है — और public API न होने की वजह से structured data scale पर पाने का तरीका scraping ही है। 2025 में जो approach सच में काम करती है, वह है: search results से embedded JSON-LD extract करना (fragile CSS selectors नहीं), requests + BeautifulSoup use करना (Selenium नहीं), Sec-Fetch-* fields के साथ realistic headers लगाना, delays को randomize करना, और कुछ सौ pages से आगे बढ़ रहे हों तो residential proxies use करना।

JSON-LD method पुराने guides की तुलना में सबसे बड़ा improvement है। यह तेज़ है, layout changes के प्रति ज़्यादा resilient है, और JavaScript rendering की ज़रूरत नहीं पड़ती। ऊपर बताई anti-ban strategies के साथ combine करने पर आप वे 403 errors काफी हद तक टाल सकते हैं जो ज़्यादातर scrapers को रोक देते हैं।

अगर आप code पूरी तरह छोड़ना चाहते हैं, तो Thunderbit Chrome Extension कुछ ही clicks में किसी भी Craigslist category को scrape कर सकती है और सीधे आपकी पसंदीदा spreadsheet या database में export कर सकती है। अगर आप और गहराई में जाना चाहते हैं, तो how to web scrape with Python और web scraping best practices वाले हमारे guides fundamentals को और detail में समझाते हैं।

Craigslist Scraping के लिए Thunderbit आज़माएँ

Craigslist Data के लिए AI Web Scraper आज़माएँ Get Started Free

FAQs

क्या Craigslist scrape करना legal है?

Craigslist की Terms of Use automated scraping को prohibit करती हैं और liquidated-damages clause जोड़ती हैं ($0.25/page over 1,000/day)। हालांकि, हाल के court rulings — खासकर Meta v. Bright Data (2024) और hiQ v. LinkedIn (2022) — ने publicly available data की logged-off scraping के लिए CFAA liability को सीमित किया है। State-law tort claims (trespass-to-chattels) का risk अभी भी रहता है, खासकर commercial redistribution में। robots.txt का सम्मान करें, logged-off रहें, delays जोड़ें, और raw data redistribute न करें। यह सामान्य जानकारी है, legal advice नहीं।

क्या Craigslist की public API है?

नहीं। Craigslist सिर्फ approved paid posters के लिए write-only Bulk Posting Interface (BAPI) देता है। कोई public read API नहीं है, developer portal नहीं है, और data retrieval के लिए कोई rate-limited tier भी नहीं। Third-party platforms पर दिखने वाला हर “Craigslist API” product unofficial scraper ही होता है।

मेरा Craigslist scraper बार-बार क्यों टूट जाता है?

लगभग हमेशा HTML structure changes की वजह से। Craigslist ने 2023–2024 में अपना search results markup दोबारा लिखा, और .result-row या .result-info जैसे legacy selectors इस्तेमाल करने वाले guides अब काम नहीं करते। ज़्यादा resilient approach के लिए embedded JSON-LD method (script#ld_searchpage_results parsing) इस्तेमाल करें। साथ ही headers में Sec-Fetch-* fields मौजूद हों, यह भी चेक करें — missing होने पर instant blocks मिलते हैं।

क्या मैं Python के बिना Craigslist scrape कर सकता हूँ?

हाँ। Thunderbit का AI web scraper Chrome extension Craigslist के किसी भी page पर काम करता है — apartments, cars, jobs, services। Columns auto-detect करने के लिए “AI Suggest Fields” पर क्लिक करें, data निकालने के लिए “Scrape” पर क्लिक करें, और Google Sheets, Excel, Airtable, या Notion में free export करें। कोई coding नहीं, कोई setup नहीं, कोई proxy management नहीं।

Ban हुए बिना मैं Craigslist कितनी बार scrape कर सकता हूँ?

Single residential IP के साथ sustainable throughput लगभग 0.3–0.5 requests per second है, और pages के बीच random 2–5 second delays रखने चाहिए। Ban और Craigslist TOS के liquidated-damages threshold, दोनों से बचने के लिए प्रति IP 24 घंटे में 1,000 pages से नीचे रहें। Off-peak hours (target city local time में 2–6 AM) में scraping करने से block rates लगभग 30–40% घटती हैं। बड़े volume के लिए हर 20–30 requests पर residential proxies rotate करें।

और जानें

Ke
Ke
Thunderbit में CTO | वरिष्ठ डेटा वैज्ञानिक और एमएल विशेषज्ञ मशीन लर्निंग और डेटा साइंस में लगभग एक दशक के अनुभव के साथ, के शेन कोलंबिया विश्वविद्यालय के पूर्व छात्र हैं और Walmart Labs में पूर्व वरिष्ठ डेटा वैज्ञानिक रह चुके हैं। Python, R, Java और सांख्यिकी में उनकी गहरी, सहकर्मी-मान्य विशेषज्ञता है, और वे जटिल AI एल्गोरिद्म को सिद्धांत से उत्पादन-स्तरीय आर्किटेक्चर तक ले जाने पर व्यावहारिक, आजमाई हुई अंतर्दृष्टियाँ साझा करते हैं।
विषय सूची

बस पूछकर एक वेबपेज स्क्रैप करें

जो चाहिए, उसे आसान अंग्रेज़ी में कहें। या उससे भी बेहतर, कुछ न कहें।

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