Log in Sign up
Web scraping

Proxies for web scraping that survive the ban wave

A scraper needs many addresses, fast rotation and no traffic meter. One Advanced.name package gives you from 5,000 to 50,000 IPv4 addresses on one link, up to 5,000 parallel threads and a pool where about a third of the addresses change every day.

  • up to 50,000 IPs per package
  • up to 5,000 threads
  • traffic is not counted
Server racks with teal status lights: the proxy pool for web scraping
Web scraping

What a scraper needs and what the package gives

Four things decide whether a crawl finishes or dies on the first captcha.

What the task needsWhat the package gives

Enough addresses so one IP does not hit the site twice a minute

From 5,000 (package #1) to 50,000 (package #6) addresses in one list

Fresh pool: banned IPs must leave before you reach them

About a third of the pool rotates every 24 hours, the list refreshes every 10 minutes

Parallel connections for the whole crawl

500 to 5,000 threads depending on the package, all protocols on one port

Nobody counting gigabytes

No traffic limit on any unlimited package: you pay for the package and the threads

Unlimited proxies

Pick the package for your crawl size

Region, package, term. The price is per one authorised IP; each extra IP adds 10%.

Region
Term
Authorized IPs
1 +10% per IP above the first
Recommended for this task
$0
  • Proxies in package
  • Threads
  • Authorized IPs1
  • ProtocolsHTTP / SOCKS5
All 13 packages in the price table

Three steps from payment to the first page

Get the list link

After payment the dashboard shows a link like get.advanced.name/<ID>. It returns ip:port lines, one per address. HTTP and SOCKS5 sit on the same port.

Authorise your server IP

The list opens only from IPs you add in the dashboard. No login and password in the scraper config: the address is the key.

Rotate in code

Load the list, walk through it in a circle, retry a URL on the next proxy when one fails. The script below does exactly this with the standard library.

Ready scraper: rotate, retry, filter by country

Point CSV_URL at your dashboard export, set COUNTRY and MIN_SPEED, put target URLs in urls.txt. The script keeps only the country you need, fetches every URL through the next proxy and retries on another address when one fails. Check the pool first with the Socks List Processor.

CSV export link from your dashboard
ISO 3166-1 alpha-2 (e.g. DE, NL, US), or "" for the whole pool
keep proxies with speed >= this value (higher is better)
parallel requests
seconds per request
proxies to try before a URL is marked failed
one target URL per line
fetched HTML is written here as 1.html, 2.html, ...
Values come from the form; copy or download the ready file.
Show the script code
Python 3.8+ · parsing.py
#!/usr/bin/env python3
"""Multithreaded scraper for Advanced.name proxies.

Reads the CSV proxy export, keeps the country and speed you need, then fetches a
list of target URLs through rotating proxies with automatic retries. Standard
library only, no pip. Edit the CONFIG block and run: python3 scrape.py
"""

# ================================ CONFIG ====================================
CSV_URL = "https://get.advanced.name/YOUR_LIST_ID.csv"  # CSV export link from your dashboard
COUNTRY = "DE"          # ISO 3166-1 alpha-2 (e.g. DE, NL, US), or "" for the whole pool
MIN_SPEED = 3           # keep proxies with speed >= this value (higher is better)
THREADS = 50            # parallel requests
TIMEOUT = 15            # seconds per request
RETRIES = 3             # proxies to try before a URL is marked failed
URLS_FILE = "urls.txt"  # one target URL per line
OUT_DIR = "pages"       # fetched HTML is written here as 1.html, 2.html, ...
# ============================================================================

import csv
import io
import itertools
import os
import sys
import threading
import urllib.request
from concurrent.futures import ThreadPoolExecutor, as_completed

# CSV columns from the dashboard export, ';' separated:
# ip ; port ; country ; speed ; uptime ; exit_ip
COL_IP, COL_PORT, COL_COUNTRY, COL_SPEED, COL_UPTIME = 0, 1, 2, 3, 4
UA = "Mozilla/5.0 (compatible; scraper/1.0)"


def load_proxies():
    """Download the CSV list, keep the wanted country and speed, fastest first."""
    raw = urllib.request.urlopen(CSV_URL, timeout=30).read().decode("utf-8", "replace")
    pool = []
    for row in csv.reader(io.StringIO(raw), delimiter=";"):
        if len(row) <= COL_SPEED or not row[COL_PORT].strip().isdigit():
            continue
        country = row[COL_COUNTRY].strip().upper()
        speed = int(row[COL_SPEED] or 0)
        if COUNTRY and country != COUNTRY.upper():
            continue
        if speed < MIN_SPEED:
            continue
        pool.append((row[COL_IP].strip() + ":" + row[COL_PORT].strip(), speed))
    pool.sort(key=lambda item: -item[1])
    return [addr for addr, _ in pool]


def opener_for(proxy):
    handler = urllib.request.ProxyHandler({"http": "http://" + proxy, "https": "http://" + proxy})
    return urllib.request.build_opener(handler)


def main():
    proxies = load_proxies()
    if not proxies:
        sys.exit("No proxies match COUNTRY=%r and MIN_SPEED=%d." % (COUNTRY, MIN_SPEED))
    with open(URLS_FILE, encoding="utf-8") as fh:
        urls = [u for u in map(str.strip, fh) if u and not u.startswith("#")]
    os.makedirs(OUT_DIR, exist_ok=True)
    print("proxies: %d (%s), urls: %d, threads: %d" % (len(proxies), COUNTRY or "any", len(urls), THREADS))

    rotation = itertools.cycle(proxies)
    lock = threading.Lock()
    done = {"ok": 0, "fail": 0}

    def fetch(index, url):
        for _ in range(RETRIES):
            with lock:
                proxy = next(rotation)
            req = urllib.request.Request(url, headers={"User-Agent": UA})
            try:
                body = opener_for(proxy).open(req, timeout=TIMEOUT).read()
            except Exception:
                continue
            with open(os.path.join(OUT_DIR, "%d.html" % index), "wb") as out:
                out.write(body)
            return True
        return False

    with ThreadPoolExecutor(max_workers=THREADS) as pool:
        futures = {pool.submit(fetch, i, u): u for i, u in enumerate(urls, 1)}
        for fut in as_completed(futures):
            ok = fut.result()
            with lock:
                done["ok" if ok else "fail"] += 1
                total = done["ok"] + done["fail"]
            sys.stderr.write("\r%d/%d  ok %d  fail %d" % (total, len(urls), done["ok"], done["fail"]))
            sys.stderr.flush()
    print("\nsaved %d pages to %s/ (%d failed)" % (done["ok"], OUT_DIR, done["fail"]))


if __name__ == "__main__":
    main()
Setup

Plugging the pool into your scraper

requests and urllib

Pass the proxy per request: build an opener with a ProxyHandler, or give requests proxies={'http': 'http://ip:port', 'https': 'http://ip:port'}. HTTP and SOCKS share one port, so http:// covers both; for SOCKS5 in requests install requests[socks] and use socks5h://ip:port so DNS resolves on the proxy side.

Read the list once, walk it in a circle and take the next address on every request. Retry a failed URL through a different proxy two or three times before dropping it; the script above already does exactly that.

Scrapy, Octoparse and ready crawlers

In Scrapy put the address in request.meta['proxy'] or use a rotating-proxy middleware pointed at the file the builder writes, and keep CONCURRENT_REQUESTS at or below your package thread limit. GUI crawlers such as Octoparse and ParseHub take the same ip:port list in their proxy settings.

Filter the pool once with the Socks List Processor before a long crawl, so dead addresses never reach the parser. For a quick trial the free proxy list is enough to test the code.

In practice

Where the pool lives

Four habits that keep a crawl alive

  1. Refresh the list every 10 minutes and drop addresses that vanished from it: they were rotated out for a reason.
  2. Keep one IP on one site for a few requests, then move on. A cycle through 20,000 addresses gives each IP a long rest.
  3. Set a timeout of 10 to 15 seconds and retry on the next proxy instead of waiting.
  4. Match the region to the site: European shops through Europe, Russian classifieds through CIS, Chinese marketplaces through China.
FAQ

Questions about this task

How many threads does a scraper get?
As many as the package allows: 500 on package #1, 5,000 on package #6. Resi Core and Resi Prime have no thread limit. One thread is one open connection to the pool.
Do the proxies rotate on their own?
The list rotates: about a third of addresses change daily. Inside your code you choose the next address yourself, which keeps you in control of pacing.
HTTP or SOCKS5 for scraping?
Either. Both protocols answer on the same port, so pick what your library supports. For urllib and curl HTTP is the shortest path.
Can I test before paying?
Yes. One free hour on any package with full threads, no card. Enough to run a real crawl and look at the error rate.
When does a scraper need Resi instead of a package?
When a site bans addresses from shared lists faster than you get through them. Resi Core gives a home IP on every request, and Resi Prime adds the choice of city. The rest of the crawl costs less on a package, where traffic is not counted.
Plans for this task

What to take for web scraping

Crawling at volume costs less on an unlimited package. Get through sites that ban list addresses on Resi Core, and pull city data with Resi Prime.

Unlimited proxies

Crawling at volumeBest fit

Package #3 · World MIX · 20,000 IP · 2,000 threads

Traffic is not counted: gigabytes of HTML and images leave the price unchanged. A third of the addresses change daily, and banned ones leave the list.

$700 per monthor $2.70 per hour

Resi Core

Protected sites

2M+ IPs · 200+ countries · no thread limit

A new home IP on every request. Take it for sites where package addresses hit a captcha. You set the country in the connection string.

from $0.49 per GB1 GB for $0.85

Resi Prime

City-level data

30M+ IPs · 220 countries · no thread limit

City, region, ISP and ASN in the connection string. You need it when a site serves different data to different cities.

from $1.39 per GB1 GB for $2.29

Start the crawl within an hour

Pick a package, take the free test hour, run your scraper on the real pool.

Pricing Grab a free hour