Python ile metin işlemek

Örüt ağ adreslerini işleyelim

Bu derste örüt ağ diğer adıyla internet adreslerini pyparsing ile nasıl işleyebileceğimizi anlatmaya çalışacağız

Örüt ağ adresleri nasıl işlenir

Bir örüt ağ (diğer adıyla internet) adresini işlemek için ilkönce yapısına bakalım.

Bir internet adresinin yapısı

Gördüğünüz gibi bir örüt ağ adresi yukarıdaki kısımlardan oluşuyor :

  • protokol
  • kullanıcı bilgisi
  • sunucu ismi / adresi
  • kapı numarası
  • dizin
  • sorgu
  • bölüm

Bunlardan bir çoğu seçimlik. Sadece protokol ve sunucu ismi / adresi gerekiyor.

Adreslerde harflere, rakamlara, alt çizgiye ve şu noktalama işaretlerine izin veriliyor : -. ~ % +.

Programın kaynak kodu

Programın kaynak koduna bakalım. Bunu adres.py ismiyle kaydedin.

from pyparsing import *

adresKarakterleri = alphanums + '-_.~%+'

print("Adres karakterleri = ", adresKarakterleri)

bölüm = Combine((Suppress('#') + Word(adresKarakterleri)))('bölüm')

protokol = oneOf('http https ftp file')('protokol')

sunucu = Combine(delimitedList(Word(adresKarakterleri), '.'))('sunucu')

kapı = Suppress(':') + Word(nums)('kapı')

kullanıcıBilgisi = (Word(adresKarakterleri)('kullanıcıismi')
                    + Suppress(':')
                    + Word(adresKarakterleri)('şifre')
                    + Suppress('@'))

sorguİfadesi = Group(Word(adresKarakterleri) + Suppress('=') + Word(adresKarakterleri))

sorgu = Group(Suppress('?') + delimitedList(sorguİfadesi, '&'))('sorgu')

dizin = Combine(Suppress('/') + OneOrMore(~sorgu + Word(adresKarakterleri + '/')))('dizin')

adresİşleyici = (protokol
               + Suppress('://')
               + Optional(kullanıcıBilgisi)
               + sunucu
               + Optional(kapı)
               + Optional(dizin)
               + Optional(sorgu)
               + Optional(bölüm))

Şimdi yazdığımız adres işleyen programı test edecek programı yazalım. Bunu da ana.py ismiyle kaydedin.

from adres import adresİşleyici

örnekAdresler = [
  'http://www.ekmekyapalim.com',
  'http://www.ekmekyapalim.com/',
  'http://www.ekmekyapalim.com:1234/',
  'http://ali:%243cr3t@www.ekmekyapalim.com:1234/',
  'http://www.ekmekyapalim.com/tarifler',
  'http://www.ekmekyapalim.com/tarifler/gosterimegore?gosterim=26&isim=Cavdar',
  'http://www.ekmekyapalim.com/tarifler/26',
  'http://www.ekmekyapalim.com/tr/tatlilar/yore/mersin',
  'ftp://ftp.bilgi.com/indirilenler',
  'http://www.ekmekyapalim.com#mayalar',
  'http://ali:s3cr3t@www.ekmekyapalim.com:8080/tarifler/gosterimegore?gosterim=26&isim=Cavdar#pisirme',
]

biçim = '{0:10s} {1}'

for adres in örnekAdresler:

  print("Adres : ", adres)

  parçalar = adresİşleyici.parseString(adres)

  print(parçalar, '\n')
  print(biçim.format("Protokol : ", parçalar.protokol))
  print(biçim.format("Kullanıcı ismi : ", parçalar.kullanıcıismi))
  print(biçim.format("Şifre : ", parçalar.şifre))
  print(biçim.format("Sunucu : ", parçalar.sunucu))
  print(biçim.format("Kapı : ", parçalar.kapı))
  print(biçim.format("Dizin : ", parçalar.dizin))
  print("Sorgu : ")
  for key, value in parçalar.sorgu:
      print("\t{} ==> {}".format(key, value))
  print(biçim.format('Bölüm : ', parçalar.bölüm))
  print('-' * 60, '\n')

Programı çalıştırın

Programı çalıştırdığımızda çıktısı şunun gibi olacak (Sadece bir tane adres kaydı gösterilmiştir):

İnternet adresi işleme programı çıktısı

Çavdar

Yorumlar

yorum yaz

Yorum yaz

Henüz yorum yok.