Выбор случайного User-Agent и проверка IP (Python + requests + tkinter)
При парсинге или автоматизации работы с веб-сайтами важно уметь маскировать свои запросы. Многие сайты проверяют заголовок User-Agent, который указывает, с какого устройства и браузера поступает запрос. Если всегда использовать стандартный User-Agent библиотеки requests, сайт может быстро заподозрить автоматизацию и заблокировать доступ.
В этой примере мы разберём, как:
Подготовка списка User-Agent
В отдельный файл user_agents.txt мы добавляем список строк, каждая из которых соответствует определённому браузеру или устройству. Например:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0
Mozilla/5.0 (iPhone; CPU iPhone OS 16_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1
Каждый раз программа будет выбирать случайный вариант, что имитирует работу нового пользователя.
Полный код
import random
import requests
import tkinter as tk
from tkinter import ttk
# Читаем user-agents из файла
with open('user_agents.txt', 'r', encoding='utf-8') as f:
user_agents = [line.strip() for line in f if line.strip()]
if not user_agents:
raise SystemExit("Файл user_agents.txt пуст или не найден")
# Выбираем случайный User-Agent
user_agent = random.choice(user_agents)
# Заголовки с выбранным user-agent
headers = {'User-Agent': user_agent}
# Функция для отображения окна
def show_modal(user_agent_response, ip_response):
root = tk.Tk()
root.title("User Agent и IP")
root.geometry("480x260")
root.resizable(False, False)
style = ttk.Style()
style.configure("TLabel", font=("Segoe UI", 11), padding=4)
frame = ttk.Frame(root, padding=12)
frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
ttk.Label(frame, text="User-Agent:", style="TLabel").grid(row=0, column=0, sticky=tk.W)
ttk.Label(frame, text=user_agent_response, style="TLabel", wraplength=440).grid(row=1, column=0, sticky=tk.W, pady=(0,8))
ttk.Label(frame, text="IP:", style="TLabel").grid(row=2, column=0, sticky=tk.W)
ttk.Label(frame, text=ip_response, style="TLabel", wraplength=440).grid(row=3, column=0, sticky=tk.W, pady=(0,12))
ttk.Button(frame, text="Закрыть", command=root.destroy).grid(row=4, column=0, pady=6)
try:
root.eval('tk::PlaceWindow . center')
except Exception:
pass
root.mainloop()
# Запрос к httpbin.org
try:
resp1 = requests.get('https://httpbin.org/user-agent', headers=headers, timeout=10)
resp1.raise_for_status()
user_agent_response = resp1.json().get('user-agent', str(resp1.text))
except Exception as e:
user_agent_response = f"Error: {str(e)}"
try:
resp2 = requests.get('https://httpbin.org/ip', headers=headers, timeout=10)
resp2.raise_for_status()
ip_response = resp2.json().get('origin', str(resp2.text))
except Exception as e:
ip_response = f"Error: {str(e)}"
show_modal(user_agent_response, ip_response)
Результат
Как работает программа
⚠️ Важно: код предназначен для только для тестов. Для парсинга используйте его с прокси и задержками.
Советы
Зачем это нужно?
Итог
Мы создали универсальный скрипт на Python, который случайным образом выбирает User-Agent, отправляет запросы к тестовому сервису и показывает результат в удобном графическом интерфейсе. Это полезный инструмент как для парсинга, так и для обучения работе с HTTP-заголовками.Больше уроков по парсингу на parsertools.ru/primers.
