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.
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 urlparsedefparse_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 URLtest_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_qsdefget_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 ajratishprint("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 sinoviget_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 urljoindefcomplete_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 yaratishprint("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 URLcomplete_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 redeffind_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 topishprint("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 sinovifind_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 ipaddressdefcheck_ip_in_url(url):""" URL tarkibidagi IP manzilni tekshirish. """ parsed_url =urlparse(url)# URL'ni tahlil qilishtry: ip = ipaddress.ip_address(parsed_url.hostname)# IP manzilni tekshirishprint("IP manzil:", ip)return ipexceptValueError:print("IP manzil topilmadi")returnNone
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 sinovicheck_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:
deffilter_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 ajratishprint("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.