爬虫IP代理池
Скачайте и установите:
git clone https://gitee.com/Wiliam01/Proxy_pool.git
или же напрямую
https://gitee.com/Wiliam01/Proxy_pool/repository/archive/master.zip скачайте zip-файл.
pip install -r requirements.txt
Обратите внимание: поскольку используется AES симметричное шифрование, необходимо установить модуль шифрования. Этот модуль не указан в файле requirements.txt:
В Windows для использования AES необходимо установить модуль pycryptodome:
pip install pycryptodome
На Linux для использования AES необходимо установить модуль pycrypto:
pip install pycrypto
# Config/setting.py — это файл конфигурации проекта
# Настройка базы данных
DB_TYPE = os.getenv('db_type', 'REDIS')
DB_HOST = os.getenv('db_host', '127.0.0.1')
DB_PORT = os.getenv('db_port', 6379)
DB_PASSWORD = os.getenv('db_password', '')
PROXY_NAME = "Proxy" #redis 里边的存储名字
Pool = redis.ConnectionPool(host=DB_HOST,
port=6379,
password=DB_PASSWORD,
max_connections=20)
# Настройка метода получения прокси-ip
PROXY_GETTER = [
"zhandaye", # здесь имя активируемой функции получения прокси, можно расширить в IP/get_ip_proxy.py
]
# Настройка API сервиса
SERVER_API = {
"HOST": "0.0.0.0",#адрес
"PORT": 6010, #порт
"token":"123456." #используется для веб-доступа, используется как параметр token
}
# После запуска прокси-пул будет доступен по адресу http://127.0.0.1:6010
# Конфигурация ключа и вектора инициализации для алгоритма шифрования
KEY_STR = "123456." #ключ
IV_B = "123456." #вектор инициализации
# Шифрование и дешифрование файла Encryption/python_aes.py
'''python
e = aes.encrypt("hello world") # шифрование
d = aes.decrypt(e) # расшифровка
print("Шифрование:", e)
print("Расшифровка:", d)
'''
>>>python run.py
#запуск в фоновом режиме на Linux
nohup python run.py
Использование:
Через некоторое время вы увидите, что прокси-адреса сохранены в имени PROXY_NAME. Также можно получить доступ через API по адресу http://127.0.0.1:6010
.
Api: Общедоступные параметры:
api | method | Description | arg |
---|---|---|---|
/ | GET | описание API | None |
/get | GET | случайный выбор одного прокси | параметр: num — количество прокси, не более 100 |
/all | GET | получение всех прокси | для уменьшения объёма данных возвращается 1000 и общее количество |
/del | GET | удаление прокси | параметр: proxy_str — список полученных ip |
Для использования в сканере: Если вы хотите использовать этот API в коде сканера, вы можете обернуть его в функцию и использовать напрямую, например:
import requests
def get_proxy():
#полученный пароль аутентификации прокси должен быть расшифрован
return requests.get("http://127.0.0.1:6010/get?token={}&num=1").json()
def delete_proxy(proxy):
requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))
Расширение прокси: Проект уже включает функцию zhandaye от Stationery Ye. Для добавления других функций необходимо добавить их имена в переменную PROXY_GETTER в файле Setting. Таким образом, они будут вызываться в файле run.py.
class Get_ip_proxy_:
def __init__(self):
self.proxy_json = {
"proxy_ip": "",
"type":1,
"user":"",
"password":"",
"last_status": 1,
"last_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
def zhandaye(self):
while True:
time.sleep(13)
# максимальная частота запросов не должна превышать 10 секунд за раз
# ниже информация о покупке у Stationery Ye
url = ""
api_id = ""
api_psw = aes.encrypt("").decode('utf-8')
try:
response = requests.get(url,timeout=3)
data = json.loads(response.text)
logger.info(data)
if data["msg"] == "успешное получение":
ip_list = data["data"]["proxy_list"]
for x in ip_list:
ip = x["ip"]
port = x["port"]
self.proxy_json.update({"proxy_ip":ip+":"+str(port),"user":api_id,"password":api_psw})
Redis_cliient.put(self.proxy_json)
except:
fp = StringIO()
traceback.print_exc(file=fp)
message = fp.getvalue()
logger.error(message)
PROXY_GETTER = [
"zhandaye",
]
Обратите внимание, что после добавления пользовательских расширений необходимо строго соблюдать правила, чтобы функции могли быть вызваны правильно. В противном случае это может привести к сбою соответствующего потока функций и выходу из него. Каждая функция должна использовать while True: и time.sleep(), чтобы функция могла продолжать работать. Позже она будет оптимизирована для работы по расписанию. ### Агентский сбор
В настоящее время реализован сбор платных агентов (далее тестирование было проведено лично мной, и я не имею никакого отношения к каким-либо агентам).
Производитель | Тип | Коэффициент использования | Адрес | Количество IP-пулов |
---|---|---|---|---|
ZDaye | Краткосрочный 3–6 минут | Хороший | адрес | Около 200 000–400 000 IP в день |
Агенты Xiaoxiang | Краткосрочные 1–3 минуты | Хороший | адрес | Не более 200 000 IP в день |
Поскольку на разработку ушло всего один день, возможно, возникнет много проблем. Пожалуйста, поймите!
Любые вопросы приветствуются в Issues.
Ваша обратная связь сделает этот проект более совершенным.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )