Skip to main content

Command Palette

Search for a command to run...

How to Use Proxies for Web Scraping in Python (Step-by-Step Guide)

Learn how to integrate proxies into Python scraping scripts using requests, handle authentication, and avoid getting blocked.

Updated
3 min read
How to Use Proxies for Web Scraping in Python (Step-by-Step Guide)

Introduction

If you're scraping websites using Python, you’ll hit a wall fast:

Your IP gets blocked.

Most websites monitor traffic and block repeated requests from the same IP address. That’s why developers use proxies: to distribute requests and stay under the radar.

If you haven’t read the fundamentals yet, check out this guide on web scraping with proxies.

In this tutorial, you’ll learn exactly how to:

  • Use proxies in Python

  • Authenticate proxy connections

  • Avoid common scraping blocks

  • Prepare for scaling

What You Need Before Starting

Make sure you have:

  • Python installed

  • requests library

Install requests if needed:

pip install requests

Basic Proxy Setup in Python (Requests)

The requests library makes proxy integration simple.

Example:


proxies = {
    "http": "http://username:password@proxy_ip:port",
    "https": "http://username:password@proxy_ip:port"
}

url = "https://httpbin.org/ip"

response = requests.get(url, proxies=proxies)
print(response.text)

What’s happening here:

  • Your request is routed through a proxy server

  • The target website sees the proxy IP, not yours

Understanding Proxy Authentication

Most premium proxies require authentication.

Format:

http://username:password@ip:port

Common mistake:

❌ Forgetting authentication → request fails

❌ Wrong protocol → connection errors

👉 Always double-check your proxy format.

Handling Errors When Using Proxies

Proxies aren’t perfect. You’ll encounter errors.

Common issues:

  • Timeout errors

  • Connection refused

  • Invalid proxy

Basic retry logic:


for i in range(3):
    try:
        response = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=5)
        print(response.text)
        break
    except:
        print("Retrying...")

👉 Never rely on a single request attempt.

Rotating Proxies in Python

Using one proxy = getting blocked.

Instead, rotate between multiple proxies.

Example:

import requests
import random

proxy_list = [
    "http://user:pass@ip1:port",
    "http://user:pass@ip2:port",
    "http://user:pass@ip3:port"
]

url = "https://httpbin.org/ip"

proxy = random.choice(proxy_list)

proxies = {
    "http": proxy,
    "https": proxy
}

response = requests.get(url, proxies=proxies)
print(response.text)

👉 Each request can use a different IP.

Adding Headers to Avoid Detection

Websites check headers to detect bots.

Example:

    "User-Agent": "Mozilla/5.0"
}

response = requests.get(url, headers=headers, proxies=proxies)

👉 This makes your scraper look more like a real browser.

Best Practices for Python Scraping with Proxies

Rotate proxies regularly

Add delays between requests

Use headers (User-Agent, Accept, etc.)

Handle errors properly

Avoid free proxies (they’re unreliable)

👉 For stable scraping, developers often use high-quality residential proxies providers like Squid Proxies to ensure consistent performance.

When to Scale Beyond Requests

The requests library is great, but limited.

For larger projects, consider:

  • Scrapy (built-in middleware)

  • Async scraping (aiohttp)

  • Headless browsers (for JS-heavy sites)

Common Mistakes Beginners Make

Using one proxy only

Sending requests too fast

Ignoring headers

Not handling failures

👉 Fix these, and your success rate jumps immediately.

Conclusion

Using proxies in Python is simple, but using them correctly is what makes your scraper reliable.

Once you:

  • Rotate proxies

  • Handle errors

  • Mimic real users

You can scale scraping without constant blocks.