登录 注册
网页采集

网页采集代理:扛得住封禁潮,大规模采集也不容易被网站封锁

爬虫需要大量地址、快速轮换,并且不想被流量计费卡住。一个 Advanced.name 套餐通过一个链接提供 5,000 到 50,000 个 IPv4 地址,最多 5,000 个并发线程,代理池每天约有三分之一的地址更换。

  • 每个套餐最多 50,000 个 IP
  • 最多 5,000 线程
  • 不计流量
亮着青色指示灯的服务器机柜:网页采集代理池
网页采集

爬虫需要什么,套餐给了什么

一次采集是跑完,还是死在第一个验证码上,取决于四件事。

任务需要什么套餐提供什么

地址足够多,同一个 IP 一分钟内不会访问网站两次

一个列表里有 5,000(1 号套餐)到 50,000(6 号套餐)个地址

代理池要新:被封的 IP 得在你用到之前就撤下

每 24 小时轮换约三分之一,列表每 10 分钟刷新一次

整个采集过程都有足够的并发连接

按套餐 500 到 5,000 线程,所有协议在同一个端口

没人盯着你的流量

所有不限流量套餐都不限流量:您为套餐和线程付费

不限流量代理

按采集规模选套餐

地区、套餐、时长。价格按一个授权 IP 计算,每多授权一个 IP 加 10%。

地区
时长
授权IP
1 第一个之后每个IP加价10%
本任务推荐
$0
  • 套餐代理数
  • 线程
  • 授权IP1
  • 协议HTTP / SOCKS5
价格表中的全部13个套餐

从付款到抓到第一页的三步

拿到列表链接

付款后,个人中心会显示类似 get.advanced.name/<ID> 的链接。它返回 ip:port 行,每行一个地址。HTTP 和 SOCKS5 在同一个端口上。

授权服务器 IP

列表只对你在个人中心添加的 IP 开放。爬虫配置里不用写用户名和密码,地址本身就是钥匙。

在代码里轮换

载入列表,循环使用;某个请求失败时,换下一个代理重试该 URL。下面的脚本只用标准库就做到了这一点。

现成爬虫:轮换、重试、按国家筛选

把 CSV_URL 指向个人中心的导出链接,设置 COUNTRY 和 MIN_SPEED,把目标 URL 放进 urls.txt。脚本只保留你需要的国家,每个 URL 都通过下一个代理抓取,失败时换一个地址重试。开始前先用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, ...
数值来自表单;复制或下载生成好的文件。
显示脚本代码
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()
配置

把代理池接入你的爬虫

requests 和 urllib

每个请求都传入代理:用 ProxyHandler 构建 opener,或者给 requests 传 proxies={'http': 'http://ip:port', 'https': 'http://ip:port'}。HTTP 和 SOCKS 共用一个端口,所以 http:// 两者都能用;在 requests 中使用 SOCKS5 时,安装 requests[socks] 并写 socks5h://ip:port,让 DNS 在代理端解析。

列表读一次,循环使用,每个请求取下一个地址。失败的 URL 换别的代理重试两三次再放弃;上面的脚本已经这样做了。

Scrapy、Octoparse 和现成的爬虫工具

在 Scrapy 中把地址写进 request.meta['proxy'],或者使用指向生成文件的代理轮换中间件,并让 CONCURRENT_REQUESTS 不超过套餐的线程上限。Octoparse、ParseHub 这类可视化爬虫在代理设置里接受同样的 ip:port 列表。

长时间采集前,先用Socks List Processor 把代理池过滤一遍,别让失效地址进到解析器。只是快速试一下代码,用免费代理列表就够了。

实际效果

代理池在哪里

让采集一直跑下去的四个习惯

  1. 每 10 分钟刷新一次列表,删掉从列表里消失的地址:它们被移出轮换是有原因的。
  2. 一个 IP 在一个网站上只发几个请求,然后换下一个。20,000 个地址轮一圈,每个 IP 都能休息很久。
  3. 超时设为 10 到 15 秒,超时就换下一个代理重试,不要干等。
  4. 按网站选地区:欧洲商店走欧洲,俄罗斯分类信息站走独联体,中国电商平台走中国。
FAQ

关于本任务的问题

爬虫能用多少线程?
套餐允许多少就能开多少:#1套餐500个,#6套餐5000个。Resi Core和Resi Prime不限线程。一个线程就是与代理池的一个打开的连接。
代理会自己轮换吗?
列表会轮换:每天约有三分之一的地址更换。在代码里由你自己选下一个地址,请求节奏完全由你掌控。
采集用 HTTP 还是 SOCKS5?
都可以。两种协议在同一个端口响应,选你的库支持的那个就行。用 urllib 和 curl 时,HTTP 最省事。
付款前能测试吗?
能。任何套餐都可免费试用 1 小时,线程不打折,也不用绑卡。足够跑一次真实采集,看看错误率。
什么时候采集器需要Resi而不是套餐?
当网站封禁共享列表地址的速度比您用完它们还快时。Resi Core每次请求都给一个家庭IP,Resi Prime还能选择城市。其余的抓取用套餐更便宜,因为不计流量。
适合此任务的套餐

数据采集该选什么

大批量抓取用不限流量套餐更便宜。封禁列表地址的网站用Resi Core突破,城市级数据用Resi Prime采集。

不限流量代理

大批量抓取最佳选择

#3套餐 · 全球混合 · 20,000 IP · 2000 线程

流量不计量:几GB的HTML和图片也不会改变价格。每天有三分之一的地址更换,被封的地址会移出列表。

$700 每月或每小时$2.70

Resi Core

有防护的网站

2M+ IP · 200+国家 · 不限线程

每次请求换一个新的家庭IP。适用于套餐地址会遇到验证码的网站。国家在连接字符串中设置。

低至 $0.49 每GB1GB仅需$0.85

Resi Prime

城市级数据

30M+ IP · 220个国家 · 不限线程

在连接字符串中设置城市、地区、运营商和ASN。当网站对不同城市返回不同数据时就需要它。

低至 $1.39 每GB1GB仅需$2.29

一小时内开跑采集

选好套餐,领取 1 小时免费试用,在真实代理池上运行你的爬虫。

价格 免费试用1小时