URL'larni tahlil qilish va qayta ishlash jarayonlari veb skanerlash va qidiruv tizimlarida keng qo‘llaniladi. Python’da URL’larni avtomatik ravishda ajratish va tahlil qilish uchun urllib va re kutubxonalaridan foydalanamiz.
Asosiy Maqsadlar:
URL tuzilishini tahlil qilish: URL’ning asosiy qismlarini (protokol, domen, yo‘l va parametrlari) ajratish.
Ma’lumot yig‘ish va filtrlash: URL tarkibidagi ma’lumotlarni yig‘ish va filtrlash.
URL lar tasnifi: Turli URL'larni maqsadga qarab tasniflash.
Zarur Kutubxonalar
URL’larni tahlil qilish uchun quyidagi standart kutubxonalardan foydalanamiz:
urllib.parse: URL'ni turli qismlarga ajratish.
re: URL ichidagi ma'lumotlarni muntazam ifoda (regex) yordamida ajratib olish uchun.
Kutubxonalarni quyidagicha import qilish mumkin:
import re
from urllib.parse import urlparse, parse_qs, urljoin
URL tuzilishi haqida
URL (Uniform Resource Locator) – internet resurslariga yo‘naltiruvchi manzil. URL asosiy qismlardan iborat:
Protokol: HTTP, HTTPS kabi protokol turi.
Domen: Veb-saytning domen nomi.
Yo‘l (Path): Resurs yo‘nalishi, masalan, /about.
Parametrlar: Qo‘shimcha ma’lumotlar, masalan, ?id=123&category=books.
1 URL Tuzilmasi
Birinchi navbatda, URL qanday tuzilganini tushunish kerak. URL – veb-resursga yo‘l ko‘rsatuvchi manzil bo‘lib, quyidagi asosiy qismlardan iborat:
Protokol: HTTP yoki HTTPS kabi internet protokollari.
Domen: Veb-saytning asosiy domen nomi, masalan, example.com.
Yo‘l (Path): Veb-sahifa yoki faylga boradigan yo‘l, masalan, /about.
Parametrlar (Query): URL ichida qo‘shimcha ma’lumotlar, masalan, ?name=John&age=30.
Fragment: Sahifadagi ma’lum bir qismga o‘tish uchun ishlatiladi, masalan, #section1.
URL ning turli qismlarini ajratish uchun urllib.parse kutubxonasidagi urlparse funksiyasidan foydalanamiz. Bu funksiya URL ni qismlarga ajratib, har bir qismini alohida ko‘rinishda qaytaradi.
Funksiya Kodu:
from urllib.parse import urlparse
def parse_url(url):
"""
URL manzilining asosiy qismlarini ajratish funksiyasi.
"""
parsed_url = urlparse(url)
print("Protokol:", parsed_url.scheme)
print("Domen:", parsed_url.netloc)
print("Yo'l:", parsed_url.path)
print("Parametrlar:", parsed_url.query)
print("Fragment:", parsed_url.fragment)
Kodey Key Qatorini Tushuntirish:
urlparse(url): Bu funksiya URL'ni quyidagi qismlarga ajratadi:
scheme: Protokol (masalan, http, https)
netloc: Domen yoki IP manzil
path: Resurs yo‘li
query: URL parametrlari
fragment: URL fragmenti (ma'lum bir joyga yo‘naltirish)
# Sinov uchun URL
test_url = "https://example.com/path/to/page?name=John&age=30#section1"
parse_url(test_url)
URL’ ichidagi query qismida parametrlar bo‘lishi mumkin (masalan, ?name=John&age=30). parse_qs funksiyasi URL query qismini parametrlarga ajratib, lug‘at ko‘rinishida qaytaradi.
Funksiya Kodu:
from urllib.parse import parse_qs
def get_url_parameters(url):
"""
URL parametrlarini ajratib olish funksiyasi.
"""
parsed_url = urlparse(url) # URL'ni tahlil qilish
params = parse_qs(parsed_url.query) # Parametrlarni lug'at ko'rinishida ajratish
print("Parametrlar:", params)
return params
Kodey Key Qatorini Tushuntirish:
parse_qs(parsed_url.query): parsed_url.query yordamida URL query qismini olib, parse_qs orqali har bir parametrni lug‘at shaklida ajratamiz.
pythonCopy code# Parametrlarni ajratish sinovi
get_url_parameters(test_url)
Natija:
Parametrlar: {'name': ['John'], 'age': ['30']}
Bu yerda name va age nomli parametrlar qiymatlari bilan qaytarildi.
4 Nisbiy URL larni To‘liq URL ga Aylantirish
Agar sayt ichida nisbiy URL'lar bo‘lsa, urljoin funksiyasidan foydalanib, ularni to‘liq URL ko‘rinishiga keltirish mumkin.
Funksiya Kodu:
from urllib.parse import urljoin
def complete_url(base_url, relative_url):
"""
Nisbiy URL'ni to'liq URL'ga aylantirish funksiyasi.
"""
full_url = urljoin(base_url, relative_url) # To'liq URL ni yaratish
print("To'liq URL:", full_url)
return full_url
Kodey Key Qatorini Tushuntirish:
urljoin(base_url, relative_url): urljoin yordamida base_url va relative_url ni birlashtirib to‘liq URL'ga aylantiramiz.
# Sinov uchun nisbiy URL
complete_url("https://example.com/path/to/page", "../other/page")
Natija:
To'liq URL: https://example.com/path/other/page
Bu natija ../other/page yo‘lini https://example.com/path/ bilan birlashtirib, to‘liq URL yaratadi.
5 URL Ichida Maxsus Ma'lumotlarni Regex Yordamida Topish
URL ichidagi maxsus ma'lumotlarni ajratib olish uchun muntazam ifoda (regex) yordamida tahlil qilamiz. Masalan, URL ichida elektron pochta manzillarini topish.
Funksiya Kodu:
import re
def find_emails_in_url(url):
"""
URL tarkibidan elektron pochta manzillarini ajratib olish.
"""
email_pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'
emails = re.findall(email_pattern, url) # Barcha email manzillarini topish
print("Topilgan elektron pochta manzillari:", emails)
return emails
Kodey Key Qatorini Tushuntirish:
re.findall(email_pattern, url): email_pattern regexi yordamida URL ichidagi barcha elektron pochta manzillarini topadi va emails ro‘yxatiga saqlaydi.
# URL'dan elektron pochta manzillarini ajratish sinovi
find_emails_in_url("https://example.com?contact=info@example.com&support=support@example.org")
Natija:
Topilgan elektron pochta manzillari: ['info@example.com', 'support@example.org']
6 URL dagi IP Manzilni Tekshirish
Agar URL domen nomi o‘rniga IP manzilni o‘z ichiga olsa, ipaddress kutubxonasi yordamida bu manzilni tekshirish mumkin.
Funksiya Kodu:
import ipaddress
def check_ip_in_url(url):
"""
URL tarkibidagi IP manzilni tekshirish.
"""
parsed_url = urlparse(url) # URL'ni tahlil qilish
try:
ip = ipaddress.ip_address(parsed_url.hostname) # IP manzilni tekshirish
print("IP manzil:", ip)
return ip
except ValueError:
print("IP manzil topilmadi")
return None
Kodey Key Qatorini Tushuntirish:
ipaddress.ip_address(parsed_url.hostname): URL domeni o‘rnida IP manzil mavjudligini tekshiradi. Agar IP manzil bo‘lsa, IP obyektini qaytaradi, aks holda ValueError xatosini qaytaradi.
# IP manzilni tekshirish sinovi
check_ip_in_url("http://192.168.1.1/home")
Natija:
IP manzil: 192.168.1.1
7 URL larni Filtrlash
Quyidagi funksiya URL'larni domen nomiga yoki URL tarkibiga qarab filtrlash imkonini beradi. Bu usul veb-skanerlashda qidirilayotgan ma'lumotni tezda topishda foydali.
Funksiya Kodu:
def filter_urls(urls, keyword):
"""
URL ro'yxatidan kalit so'z orqali filtrlash.
"""
filtered_urls = [url for url in urls if keyword in url] # Kalit so'z bilan mos URL'larni ajratish
print("Filtrlangan URL'lar:", filtered_urls)
return filtered_urls
Kodey Key Qatorini Tushuntirish:
filtered_urls = [url for url in urls if keyword in url]: urls ro‘yxatidagi URL'larni keyword yordamida filtrlab, mos URL'larni filtered_urls ro‘yxatida saqlaydi.