Жизнь слишком коротка, я использую Python
Предыдущий портал:
Xiaobai изучает поисковый робот Python (1): начало
Xiaobai Learns Python Crawler (3): Предварительная подготовка (2) Введение в основы Linux
Xiaobai Learns Python Crawler (4): Предварительная подготовка (3) Введение в основы Docker
Xiaobai Learns Python Crawler (5): предварительная подготовка (4) Основы базы данных
Xiaobai изучает краулер Python (6): предварительная подготовка (5) установка фреймворка краулера
Xiaobai изучает поисковый робот Python (7): основы HTTP
Xiaobai изучает поисковый робот Python (8): основа веб-страницы
Xiaobai изучает краулер Python (9): основы краулера
Xiaobai изучает поисковый робот Python (10): сеанс и файлы cookie
Xiaobai изучает поисковый робот Python (11): основы использования urllib (1)
Xiaobai изучает поисковый робот Python (12): основы использования urllib (2)
Xiaobai изучает поисковый робот Python (13): основы использования urllib (3)
Xiaobai изучает поисковый робот Python (14): основы использования urllib (4)
Xiaobai изучает поисковый робот Python (15): базовое использование urllib (5)
Xiaobai изучает краулер Python (16): реальная битва urllib с ползающей сестринской картой
Xiaobai изучает поисковый робот Python (17): основы использования запросов
Xiaobai изучает поисковый робот Python (18): запрашивает расширенную операцию
Xiaobai изучает поисковый робот Python (19): основные операции Xpath
Xiaobai изучает поисковый робот Python (20): расширенный Xpath
Xiaobai изучает поисковый робот Python (21): библиотека синтаксического анализа Beautiful Soup (1)
Xiaobai изучает поисковый робот Python (22): анализ библиотеки Beautiful Soup (часть 2)
Xiaobai изучает поисковый робот Python (23): введение в синтаксический анализ библиотеки pyquery
Сяобай изучает поисковый робот Python (24): рейтинг фильмов Douban за 2019 год
Xiaobai изучает поисковый робот Python (25): сканирование информации о запасах
введение
Когда мы используем краулеры, то часто сталкиваемся с ситуацией.В начале работы она гладкая как шелк.Может усилия чашки чая закончились,и могут быть различные ограничения,типа 403 Forbidden,429 Too Много запросов и т.д.
В настоящее время очень вероятно, что наш IP ограничен.
Вышеупомянутые проблемы обычно связаны с ограничениями безопасности веб-сайта или ограничениями безопасности компьютерного зала.Иногда обнаружение выполняется на сервере, а иногда обнаружение выполняется на шлюзе.Как только обнаруживается, что количество посещений IP-адреса в единицу времени превышает текущий лимит. Определенное пороговое значение будет напрямую запрещать обслуживание, мы собирательно называем эту ситуацию следующим образом:Блокировать IP-адрес.
Для описанной выше ситуации, признаем ли мы ее такой, конечно, нет!
Прокси призван решить эту проблему.
Способ, которым прокси-сервер решает вышеуказанную проблему, заключается в том, чтобы запросить прокси-сервер, добавленный посередине, для пересылки.Первоначально запрос был напрямую получен от A к серверу C, например: A -> C, после добавления прокси-сервера B он становится таким это: А -> В -> С .
приобретение прокси
Прежде чем приступить к реальному бою, давайте сначала поймем, как получить прокси.
Во-первых, введите слово «агент» на Baidu, чтобы сделать запрос.Вы можете видеть, что есть много веб-сайтов, которые предоставляют услуги агентства.Конечно, большинство из них платные. Но у многих из них будут бесплатные прокси.
Конечно, бесплатные прокси будут иметь различные подводные камни, такие как частые сбои соединения, такие как очень высокая задержка в сети и так далее.
Однако люди свободны, так зачем им велосипеды?
Конечно, если вы хотите получить стабильный прокси-сервис с низкой задержкой в сети, рекомендуется заплатить за него.
Редактор сайта агента не будет его перечислять, их слишком много, мы просто открываем сайт свободного агента:
Можно обнаружить, что существует два типа прокси, один из которых является высокоанонимным прокси, а другой — прозрачным прокси, В чем разница между ними?
На самом деле, помимо высокого анонимного прокси и прозрачного прокси, существует также промежуточная форма, называемая анонимным прокси.
Разница между этими типами прокси заключается в том, что параметры заголовка запроса на переадресацию различаются.
Прозрачный прокси
Целевой сервер может знать, что мы использовали прокси, а также знать наш реальный IP-адрес. Информация заголовка HTTP, передаваемая прозрачным прокси-сервером для доступа к целевому серверу, выглядит следующим образом:
- REMOTE_ADDR = IP-адрес прокси-сервера
- HTTP_VIA = IP-адрес прокси-сервера
- HTTPXFORWARDED_FOR = наш настоящий IP
Прозрачный прокси-сервер по-прежнему отправляет наш реальный IP-адрес на сервер другой стороны, поэтому он не может скрыть нашу личность.
Anonymous Proxy
Целевой сервер может знать, что мы используем прокси, но не наш реальный IP. Информация заголовка HTTP, переданная анонимным прокси-сервером для доступа к целевому серверу, выглядит следующим образом:
- REMOTE_ADDR = IP-адрес прокси-сервера
- HTTP_VIA = IP-адрес прокси-сервера
- HTTPXFORWARDED_FOR = IP-адрес прокси-сервера
Анонимные прокси-серверы скрывают наш настоящий IP-адрес, но показывают целевому серверу, что мы используем прокси-сервер для доступа к ним.
Высокий анонимный агент
Целевой сервер не знает, что мы используем прокси, не говоря уже о нашем реальном IP. Информация заголовка HTTP, переданная высокоанонимным прокси-сервером для доступа к целевому серверу, выглядит следующим образом:
- REMOTE_ADDR = IP-адрес прокси-сервера
- HTTP_VIA не показывает
- HTTPXFORWARDED_FOR не отображает
Высокосекретный прокси скрывает наш настоящий IP, а целевой сервер не знает, что мы используем прокси, поэтому имеет наивысшую степень сокрытия.
Видно, что анонимный прокси в промежуточном состоянии на половину работы не годится.
настройки прокси
Выше мы видели некоторые прокси-сервисы, а теперь давайте посмотрим, как различные библиотеки HTTP-запросов настраивают прокси:
urllib
Сначала мы используем urllib для выполнения теста, и выбирается тестовая ссылка: https://httpbin.org/get. Эта тестовая ссылка, которую мы использовали ранее, посетив этот сайт, может получить некоторую соответствующую информацию о запросе, поле происхождения которого IP источника запроса, по нему можно судить успешно ли настроен прокси, то есть успешно ли замаскирован IP, прокси, я только что нашел в интернете бесплатный высокосекретный прокси, пример такой следующим образом:
from urllib.error import URLError
from urllib.request import ProxyHandler, build_opener
proxy_handler = ProxyHandler({
'http': 'http://182.34.37.0:9999',
'https': 'https://117.69.150.84:9999'
})
opener = build_opener(proxy_handler)
try:
response = opener.open('https://httpbin.org/get')
print(response.read().decode('utf-8'))
except URLError as e:
print(e.reason)
Код очень простой, посмотрим на результат выполнения:
{
"args": {},
"headers": {
"Accept-Encoding": "identity",
"Host": "httpbin.org",
"User-Agent": "Python-urllib/3.7"
},
"origin": "117.69.150.84, 117.69.150.84",
"url": "https://httpbin.org/get"
}
Как видите, целевой сервер уже думает, что к нам обращается прокси-сервер, а параметр origin показывает IP-адрес нашего прокси-сервера.
Уведомление:Здесь мы используем ProxyHandler для настроек прокси.Тип параметра ProxyHandler — тип словаря, ключ — протокол, который мы используем, а значение — используемый нами прокси.Редактор установил здесь два прокси, один — http, а другой — https.Когда ссылка, которую мы запрашиваем, является http, наш прокси-сервер http будет выбран автоматически.Когда ссылка, которую мы запрашиваем, является https, мы автоматически выберем установленный нами прокси-сервер https.
Requests
Для запросов настройки прокси проще и понятнее. Пример кода выглядит следующим образом:
import requests
proxies = {
'http': 'http://59.52.186.117:9999',
'https': 'https://222.95.241.6:3000',
}
try:
response = requests.get('https://httpbin.org/get', proxies = proxies)
print(response.text)
except requests.exceptions.ConnectionError as e:
print('Error', e.args)
Результат выглядит следующим образом:
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0"
},
"origin": "222.95.241.6, 222.95.241.6",
"url": "https://httpbin.org/get"
}
Редактор выбрал здесь высокоанонимный прокси, поэтому отображаемый здесь IP-адрес по-прежнему является IP-адресом нашего прокси.
Selenium
Selenium также может настроить прокси, что тоже очень просто, пример такой:
from selenium import webdriver
proxy = '222.95.241.6:3000'
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=https://' + proxy)
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('https://httpbin.org/get')
Результат выглядит следующим образом:
Настройка браузера FireFox почти такая же, как и настройка браузера Chrome, разница только в том, что FireFox инициализируется при его инициализации, и используется, когда это параметр запуска.FirefoxOptions()
В других методах нет никакой разницы, и студенты могут попробовать это сами.
Бесплатный прокси
Поскольку скорость соединения и стабильность бесплатных прокси-серверов на самом деле невысокие, редактор нашел здесь несколько сайтов с бесплатными прокси-серверами для справки:
http://www.ip3366.net/
https://www.kuaidaili.com/free/
https://www.xicidaili.com/
образец кода
Все редакторы кода из этой серии будут размещены в репозиториях управления кодом Github и Gitee для вашего удобства.
Ссылаться на
https://www.jianshu.com/p/bb00a288ee5f
Если моя статья была вам полезна, отсканируйте код и подпишитесь на официальный аккаунт автора: Получите последние новости о галантерейных товарах :)