Skip to content
intermediate

Как использовать резидентные прокси ProxyScrape для отслеживания позиций в SEO

Создайте небольшой трекер позиций на Python, который получает SERP через ротационный резидентный пул ProxyScrape, с повторными попытками, ограничением скорости, заметками по гео-таргетингу и логированием выходного IP для каждого запроса.

Веб-скрейпинг SEO-мониторинг

Обзор

Поисковые системы возвращают разные результаты в зависимости от IP, с которого поступает запрос. Поэтому для отслеживания позиций в SEO нужны запросы, которые выглядят как запросы обычных пользователей из нужного местоположения, что и обеспечивает ротационный резидентный пул. Резидентный пул ProxyScrape (более 97 млн IP) выдает новый выходной IP на каждый запрос или поддерживает липкую сессию, а его прокси дата-центров являются более дешевым вариантом для высоконагруженных эндпоинтов, которые не блокируют диапазоны хостингов.

Этот туториал создает минимальный трекер позиций на Python, который читает SERP через ProxyScrape. Скрапьте только те страницы, на которые у вас есть разрешение, и соблюдайте условия обслуживания целевого сайта и директивы robots.

Шаги

  1. Соберите учетные данные и порты. В панели управления ProxyScrape запишите хост резидентного шлюза, его порты HTTP и SOCKS5, а также ваши имя пользователя и пароль. Ротационные эндпоинты обычно выдают новый IP на каждый запрос; если в вашем тарифном плане есть опция липкой сессии, панель управления покажет синтаксис для нее.

  2. Установите зависимости.

    python -m venv .venv && source .venv/bin/activate
    pip install requests beautifulsoup4
    # add PySocks only if you intend to use the SOCKS5 port:
    pip install "requests[socks]"
    
  3. Сохраните учетные данные в переменных окружения, чтобы они никогда не попали в систему контроля версий:

    export PS_HOST="your-host"
    export PS_PORT="your-http-port"
    export PS_USER="your-username"
    export PS_PASS="your-password"
    
  4. Создайте словарь прокси. Для порта HTTP:

    import os
    proxy_url = f"http://{os.environ['PS_USER']}:{os.environ['PS_PASS']}@{os.environ['PS_HOST']}:{os.environ['PS_PORT']}"
    proxies = {"http": proxy_url, "https": proxy_url}
    

    Для порта SOCKS5 используйте схему socks5h://, чтобы DNS разрешался на прокси:

    proxy_url = f"socks5h://{os.environ['PS_USER']}:{os.environ['PS_PASS']}@{os.environ['PS_HOST']}:{os.environ['PS_SOCKS_PORT']}"
    
  5. Добавьте гео-таргетинг, если ваш тарифный план его поддерживает. Некоторые резидентные тарифы позволяют закрепить страну или город, добавив код к имени пользователя. Точный синтаксис зависит от тарифа, поэтому используйте формат, показанный в вашей панели управления ProxyScrape, а не угадывайте.

  6. Получите SERP с повторными попытками. Ротируйте IP, делайте паузы между запросами и увеличивайте задержку при неудачах:

    import random, time, requests
    
    HEADERS = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36",
        "Accept-Language": "en-US,en;q=0.9",
    }
    
    def fetch_serp(keyword, num=20, attempts=3):
        for attempt in range(attempts):
            try:
                r = requests.get(
                    "https://www.google.com/search",
                    params={"q": keyword, "num": num, "hl": "en"},
                    headers=HEADERS, proxies=proxies, timeout=20,
                )
                if r.status_code == 200:
                    return r.text
            except requests.RequestException:
                pass
            time.sleep(2 ** attempt + random.random())
        return None
    
  7. Ограничивайте скорость и ротируйте осознанно. Поддерживайте низкий уровень параллелизма (2–5 воркеров), добавляйте случайную задержку от 2 до 10 секунд между запросами и используйте новый запрос для каждого ключевого слова, чтобы каждый SERP приходил с другого IP. Ответы HTTP 429 или 503 означают, что вы слишком быстро выполняете запросы — замедлитесь вместо немедленного повторения.

  8. Разберите и сохраните результат.

    from bs4 import BeautifulSoup
    html = fetch_serp("proxy comparison")
    soup = BeautifulSoup(html, "html.parser")
    for i, a in enumerate(soup.select("a[href^=http]"), start=1):
        print(i, a.get_text(" ", strip=True)[:80], a["href"])
    

    Разметка результатов со временем меняется, поэтому проверяйте свои селекторы на живом DOM, прежде чем полагаться на них. Записывайте строки каждого запуска (ключевое слово, позиция, URL, временная метка, выходной IP) в CSV-файл или базу данных.

  9. Логируйте выходной IP для каждого запроса, чтобы отличать реальное изменение позиций от изменения местоположения:

    curl -x "http://USER:PASS@HOST:PORT" https://ipinfo.io/json