Навигация по лабиринту: бесплатные прокси-процессы для динамического сбора контента
Понимание динамического сбора контента
Динамический контент, эта изменчивая сила, оживляющая современные веб-страницы, ускользает от понимания наивных HTTP-запросов. Отображаемый JavaScript, он требует большего, чем просто GET-запросы; он требует оркестровки — запросов, маскирующихся под легитимные браузеры, прокси-серверов, обходящих IP-блокировки, и кода, читающего между строк.
Роль прокси в динамическом скрапинге
Прокси — это маски в нашем цифровом маскараде, необходимые для:
- Обход ограничений скорости на основе IP-адресов
- Обход географических ограничений
- Распределение трафика во избежание обнаружения
Но как обеспечить эту анонимность, не залезая в кошельки? Бесплатные прокси — эфемерные, непокорные, но в то же время незаменимые. Давайте разберём их применение с хирургической точностью.
Рабочий процесс 1: ротация бесплатных публичных прокси с помощью Requests и BeautifulSoup
Ингредиенты
- Бесплатные списки прокси
запросы
,BeautifulSoup
на Питоне
Шаги
- Прокси-серверы Harvest
Соберите список бесплатных прокси, например, с бесплатный-proxy-list.net.
«`питон
импортные запросы
из bs4 импорт BeautifulSoup
def get_proxies():
URL = 'https://free-proxy-list.net/'
суп = BeautifulSoup(requests.get(url).content, 'html.parser')
прокси = set()
для строки в soup.find('table', id='proxylisttable').tbody.find_all('tr'):
if row.find_all('td')[6].text == 'yes': только HTTPS-прокси #
ip = row.find_all('td')[0].text
порт = строка.find_all('td')[1].текст
прокси.add(f'{ip}:{port}')
список возврата(прокси)
“`
- Ротация прокси для запросов
«`питон
импорт случайный
прокси = get_proxies()
def fetch_with_proxy(url):
proxy = случайный.выбор(прокси)
пытаться:
resp = requests.get(url, proxies={"http": f"http://{proxy}", "https": f"http://{proxy}"}, timeout=5)
если соотв.статус_код == 200:
возвратить соответствующий текст
кроме Исключение:
проходить
возврат Нет
“`
- Обработка динамического контента
Для страниц с минимальным количеством JS проверьте сетевой трафик, чтобы найти конечные точки XHR и извлечь данные напрямую.
Преимущества и недостатки
Особенность | Плюсы | Минусы |
---|---|---|
Настраивать | Быстро, легко | Прокси часто ненадежны |
Анонимность | Ротация IP-адресов уменьшает количество банов | Частые мертвые/медленные прокси |
Динамический контент | Работает только для простых сайтов с JS-рендерингом. | Сайтам с полным JS нужен эмулятор браузера |
Рабочий процесс 2: сбор данных с помощью Selenium и ротация бесплатных прокси-серверов
Ингредиенты
- SSL-прокси
- Селен с драйвером браузера
Шаги
- Получить список прокси
Логика та же, что и выше, но с таргетингом sslproxies.org.
- Настройте Selenium для использования прокси-сервера
«`питон
из импорта веб-драйвера selenium
из selenium.webdriver.chrome.options импортировать параметры
def get_chrome_driver(прокси):
опции = Опции()
options.add_argument(f'–proxy-server=http://{proxy}')
options.add_argument('–headless')
вернуть webdriver.Chrome(options=options)
“`
- Собирать динамический контент
питон
прокси = get_proxies()
драйвер = получить_хром_драйвер(случайный.выбор(прокси))
драйвер.get('https://quotes.toscrape.com/js/')
контент = драйвер.страница_источник
драйвер.quit()
Поэтическая заметка
С Selenium браузер — это ваша кисть, рисующая страницу такой, какой ее видит пользователь-человек, — JavaScript, CSS и все тонкие оттенки интерактивности.
Преимущества и недостатки
Особенность | Плюсы | Минусы |
---|---|---|
Рендеринг JS | Обрабатывает любой динамический контент | Тяжелые ресурсы |
Ротация прокси | Эффективно маскирует IP | Прокси-серверы могут замедлять работу браузера или блокировать ее. |
Обнаружение | Более человекоподобный, менее заметный | Бесплатные прокси часто блокируются крупными сайтами |
Рабочий процесс 3: Puppeteer с ProxyChain для энтузиастов Node.js
Ингредиенты
Шаги
- Получите бесплатные прокси
яваскрипт
const axios = require('axios');
асинхронная функция getProxies() {
const res = await axios.get('https://www.proxy-list.download/api/v1/get?type=https');
return res.data.split('\r\n').filter(Boolean);
}
- Используйте ProxyChain для ротации прокси с Puppeteer
«`javascript
const кукловод = require('кукловод');
const ProxyChain = require('proxy-chain');
(асинхронный () => {
const прокси = ждут getProxies();
для (const proxyUrl прокси) {
const anonymizedProxy = await ProxyChain.anonymizeProxy(http://${proxyUrl}
);
const браузер = await puppeteer.launch({
аргументы: [--proxy-server=${anonymizedProxy}
, '–no-sandbox', '–disable-setuid-sandbox'],
безголовый: правда,
});
const page = await браузер.newPage();
пытаться {
await page.goto('https://quotes.toscrape.com/js/', {waitUntil: 'networkidle2'});
const content = await page.content();
// Обработать содержимое…
} поймать (е) {
// Пропускать плохие прокси
}
await браузер.close();
}
})();
“`
Преимущества и недостатки
Особенность | Плюсы | Минусы |
---|---|---|
Автоматизация | Надежные скрипты в Node.js | Зависимость Node.js |
Ротация прокси | ProxyChain управляет сбоями | Бесплатные прокси часто нестабильны/медленны |
Динамический контент | Puppeteer отображает весь JS | Скорость ограничена скоростью прокси-сервера |
Рабочий процесс 4: интеллектуальное планирование запросов с помощью Scrapy + бесплатное промежуточное программное обеспечение прокси
Ингредиенты
- Скрепи
- Scrapy-ротационные-прокси
- Бесплатные списки прокси (proxyscrape.com)
Шаги
- Установить промежуточное программное обеспечение
pip install scrapy-rotating-proxys
- Настройте параметры Scrapy
питон
# settings.py
ROTATING_PROXY_LIST_PATH = 'proxies.txt'
ЗАГРУЗЧИК_СРЕДНЕГО_ОБЕСПЕЧЕНИЯ = {
'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}
- Заполнить список прокси
Загрузите и сохраните прокси в прокси.txt
:
https://api.proxyscrape.com/v2/?request=getproxies&protocol=http&timeout=1000&country=all&ssl=all&anonymity=all
- Скребок с Scrapy Spider
Scrapy, с чередующимися прокси, крадётся по саду динамического контента. Для полного JS используйте скрапи-драматург:
Баш
pip install scrapy-playwright
И в вашем пауке:
«`питон
импортировать скрап
класс QuotesSpider(scrapy.Spider):
имя = «кавычки»
start_urls = ['https://quotes.toscrape.com/js/']
def start_requests(self): для URL в self.start_urls: yield scrapy.Request(url, meta={"playwright": True}) def parse(self, response): для цитаты в response.css("div.quote"): yield { "text": quote.css("span.text::text").get(), "author": quote.css("small.author::text").get(), }
“`
Преимущества и недостатки
Особенность | Плюсы | Минусы |
---|---|---|
Скорость | Эффективное планирование запросов | Кривая обучения Scrapy |
Ротация прокси | Промежуточное ПО обрабатывает запреты | Бесплатные прокси менее надежны |
Поддержка JS | С Playwright обрабатывает весь JS | Тяжеловесная установка |
Рабочий процесс 5: API-ориентированный сбор данных через бесплатные прокси-шлюзы
Ингредиенты
- API веб-обмена (ограниченный бесплатный уровень)
- Бесплатный план ScraperAPI (ограниченное использование)
Шаги
- Получить ключ API или конечную точку прокси
Зарегистрируйтесь и получите бесплатную конечную точку.
- Запросы маршрутизации через прокси-шлюз
Для ScraperAPI:
питон
api_key = 'ВАШ_API_КЛЮЧ'
url = f'http://api.scraperapi.com/?api_key={api_key}&url=https://quotes.toscrape.com/js/'
ответ = запросы.получить(url)
Для прокси-серверов Web Share используйте то же, что и в предыдущих примерах.
Преимущества и недостатки
Особенность | Плюсы | Минусы |
---|---|---|
Надежность | Управляемые прокси, меньше простоев | Ограниченное количество бесплатных запросов |
Простота использования | Ротация прокси-серверов рефератов | Может блокировать определенные сайты |
Динамический контент | Некоторые API отображают JS перед возвратом | Платные тарифы для интенсивного использования |
Сравнительная сводная таблица
Рабочий процесс | Поддержка динамического JS | Ротация прокси | Надежность | Бесплатные ограничения | Лучший вариант использования |
---|---|---|---|---|---|
Запросы + Бесплатные прокси | Низкий | Руководство | Низкий | Заблокированные/медленные прокси | Простые API XHR |
Selenium + бесплатные прокси | Высокий | Руководство | Середина | Заблокированные прокси, высокая загрузка ЦП | Сложные JS-сайты малого масштаба |
Кукловод + ProxyChain | Высокий | Автоматизированный | Середина | Частые сбои прокси-сервера | Автоматизация Node.js |
Scrapy + ротация прокси | Высокий (с драматургом) | Автоматизированный | Середина | Конфигурация промежуточного ПО, медленные прокси | Масштабируемый, продвинутый сбор данных |
Прокси-API-шлюзы | Высокая (зависит от API) | Автоматизированный | Высокий | Ограниченное количество запросов, требуется регистрация | Одноразовая, надежная очистка |
Ресурсы
- бесплатный-proxy-list.net
- sslproxies.org
- proxy-list.download
- proxyscrape.com/free-proxy-list
- Scrapy-ротационные-прокси
- скрапи-драматург
- puppeteer-extra-plugin-proxy
- Список бесплатных прокси-серверов Web Share
- ScraperAPI
Пусть ваш код будет долотом, а ваши прокси — мрамором. Ваяйте терпеливо, ведь каждая динамическая страница — это цифровая скульптура, ожидающая откровения под поверхностью.
Комментарии (0)
Здесь пока нет комментариев, вы можете стать первым!