Web Scraping Without Getting Blocked: What Actually Works
I spent three years running crawlers for price monitoring across retail sites before I stopped caring about "best practices" and just tested things until they worked. The landscape shifted dramatically in early 2023 when major sites upgraded their bot detection stacks. Cloudflare changed their challenge mechanism, Akamai rolled out new behavioral analysis, and several retailers started returning different HTML based on TLS fingerprint alone. Most tutorial content online is already outdated. Here is what I have learned from actually deploying these systems at scale. Not theory. Production systems handling millions of requests per day. Residential proxy rotation sounds obvious but most people implement it wrong. The problem is not just rotating IPs. It is maintaining session consistency while rotating. If you switch residential proxies every request, the target site sees a user whose device fingerprint changes mid-session. That triggers fraud detection immediately. What actually works is grouping requests by session. Rotate the proxy between sessions, not within them. A typical residential proxy pool from providers like Bright Data or Smartproxy costs between $8-15 per GB. Budget accordingly. Free proxies will get your crawler blocked within hours.
I ran into a specific edge case last October that cost me about two weeks to resolve. A major electronics retailer started using CAPTCHA-as-a-service combined with IP reputation scoring. Normal rotating proxies worked fine for the first page load. But any attempt to add items to cart triggered a hCaptcha challenge that required solving through a third-party service. The workaround was implementing a step-back approach. Instead of trying to automate the full purchase flow, I extracted product data from category pages only, then used a headless browser with persistent cookies on a single static IP for cart operations. This reduced our success rate from 94% to about 67%, but eliminated the captcha bottleneck entirely. The tradeoff was acceptable for price monitoring purposes. Headless browser detection is the second biggest challenge. Selenium, Puppeteer, and Playwright all leave identifiable fingerprints. The simplest mitigation is using undetected chromedriver or patches like the ones in the fake-useragent library. But even these are detectable now. Modern fingerprinting checks WebGL renderer strings, navigator properties, and canvas noise patterns. The real solution is more infrastructure than code. Run your crawlers through actual browser instances on real hardware. Use tools like Browserless.io or self-hosted Puppeteer clusters with randomized user agents, viewport sizes, and mouse movement patterns. This approach costs more in compute but produces success rates above 85% on most sites. Rate limiting evasion requires understanding the target's actual thresholds. Most sites do not have strict rate limits. They have anomaly detection. If you make 100 requests per minute from 50 different IPs, that looks like distributed scraping. If you make 5 requests per minute from each IP across 10 IPs, that looks like normal users browsing slowly. The key metric is requests per IP per hour. Stay below 20 for most e-commerce sites. Some aggressive defenders will block anything above 10. Test thoroughly with a small dataset before scaling up.
JavaScript-rendered content is becoming standard. Traditional HTTP requests cannot extract data from SPA applications. You need a full browser. But spinning up Chrome instances is expensive. Each headless Chrome process uses roughly 200-400 MB RAM. For a crawler handling 10,000 pages per hour, that is 2-4 GB of memory just for browsers. Factor this into your infrastructure costs. Alternative approaches include using Puppeteer's connection pooling, or extracting data from network responses before the page fully renders. Many sites load product data through internal API calls. Intercepting these XHR/fetch requests is faster and lighter than rendering the full DOM. HTML parsing strategy matters more than most people realize. XPath is faster than CSS selectors for complex queries. But CSS selectors are more resilient to minor HTML changes. I recommend using a hybrid approach. Extract the initial data with CSS selectors for resilience, then use XPath for nested or dynamic content. Tools likeparsely or Scrapy's built-in selectors handle both. Avoid regex for HTML parsing. It breaks on malformed markup and is significantly slower than proper parsers. One counter-intuitive insight: slower is often better. Aggressive crawlers get blocked. Slow, polite crawlers run indefinitely. A crawler making 2 requests per second with randomized delays between 0.5 and 3 seconds will operate undetected on most sites. A crawler making 20 requests per second will be blocked within minutes. The total throughput may be similar over a week, but the blocked crawler requires constant maintenance and IP rotation. The slow crawler runs unattended.
Get the Full Details
![Your Ultimate List Crowlers: Finding 32oz Draft Beer Cans [2025] | AxeeTech](https://axeetech.com/wp-content/uploads/2025/05/List-Crowlers.jpg)
Maintenance and monitoring is the hidden cost. Your crawler will fail. Pages change structure. APIs get deprecated. CAPTCHAs appear unexpectedly. Build monitoring into your system from day one. Track success rates per domain, per endpoint, per proxy pool. Alert on drops below 80% success rate. Automated retry logic with exponential backoff handles transient failures. But no amount of automation replaces manual review when a major site changes its structure. For large-scale operations, consider distributed crawling frameworks. Scrapy with Scrapyd, Crawlee, or custom architectures using Celery workers. The bottleneck is usually not crawling speed. It is data processing and storage. Design your pipeline to handle the data volume your crawler will produce. A crawler hitting 1,000 pages per minute generates significant data. Ensure your storage and processing layer can keep up. Legal considerations vary by jurisdiction. In the US, CFAA case law around unauthorized access to publicly available data remains uncertain afterhiQ vs LinkedIn. In the EU, database rights and terms of service violations carry different weights. Consult legal counsel before deploying crawlers against commercial sites. Technical bypass does not override legal exposure.
The tools landscape includes established options like Scrapy, Playwright, Puppeteer, and commercial platforms like Apify or ScraperAPI. For lightweight needs, simple requests with BeautifulSoup works fine. For complex SPAs, Playwright currently offers the best balance of capability and ease of use. Headless Chrome with Puppeteer remains solid for JavaScript-heavy sites. Choose based on your target's technology stack, not popularity. Proxy provider selection deserves its own consideration. Datacenter proxies are cheap ($1-3 per GB) but easily detected. Residential proxies cost $8-15 per GB and are harder to detect. Mobile proxies cost $20-50 per GB and are the hardest to detect but may be overkill for most use cases. I recommend starting with residential proxies and upgrading to mobile only for aggressive targets. Provider reliability varies. Run tests before committing to long-term contracts. Data quality validation is essential. Crawlers extract garbage when targets serve garbage. Implement validation at each extraction step. Check for required fields. Validate data types. Cross-reference with known good values. A 5% error rate in extracted data means 5% of your downstream decisions are based on incorrect information. That compounds quickly.
The trend toward server-side rendering and progressive enhancement makes some crawling easier. Sites that render initial content server-side allow HTTP-level extraction without browsers. But the trend toward client-side rendering and API-driven content makes crawling harder. Expect continued deterioration in HTTP-only success rates. Budget for browser-based extraction infrastructure. Geographic targeting adds complexity. Some sites serve different content based on location. If you need region-specific pricing or availability, your proxy strategy must align with your data requirements. A US residential proxy from California will get you California pricing. A UK residential proxy will get you UK pricing. Do not mix geographies unless you explicitly want comparative data. For authentication-required crawls, handle sessions carefully. Login tokens expire. Session cookies rotate. Implement token refresh logic. Never hardcode credentials. Use environment variables or secret management tools. Automated login flows are fragile. Expect to maintain them as sites change their authentication mechanisms.

The infrastructure costs for a production crawler vary widely. A modest setup handling 10,000 pages per day might cost $200-500 monthly for proxies, hosting, and tooling. A high-volume operation pushing millions of pages monthly can exceed $10,000 monthly. Plan your budget around your actual data needs, not your ambitions. Documentation and community support for crawler tools is generally good. Scrapy has extensive documentation and active community. Playwright and Puppeteer have solid official docs. Proxy providers typically have integration guides. When documentation fails, searching for specific error messages along with the tool name usually surfaces relevant solutions from other practitioners who faced identical issues. Start small. Test against one target. Measure success rates. Optimize. Then scale to additional targets. Do not attempt to crawl everything simultaneously. The maintenance burden will overwhelm your capacity to respond to changes. A focused crawler on a well-understood target beats a scattered crawler struggling with twenty different sites.
Alternative approaches exist when crawling becomes impossible. Some sites offer official APIs with rate limits. API access is cleaner and more reliable than scraping. Some data is available through data marketplaces or third-party providers. These cost money but eliminate infrastructure complexity. Evaluate alternatives before investing heavily in circumvention strategies that may violate terms of service. The field moves fast. What worked six months ago may not work today. Stay current with detection technology changes. Follow relevant GitHub repositories. Participate in community forums. The crawling ecosystem is an arms race, and standing still means falling behind.