0  

Erdem

Örüt ağ üzerinde bulunan sayfaları gezen, onları belleğine alan uygulamalara örümcek ismi veriliyor.

Türkçe karşılığı daha uygun olduğu için gezgin diye isimlendirebiliriz.

Gezgin ilk olarak verdiğiniz adresin ana sayfasına gidiyor.

Bağlantıları takip ederek sayfaları gezmeye başlıyor. Burada gezginin aynı alan adı içerisinde mi kalması gerektiğini yoksa başka alan adlarını da gezip gezmeyeceğini siz belirleyebiliyorsunuz.

Daha sonra DFS, BFS gibi bir arama algoritması kullanarak sayfaları gezmeye başlıyor.

Arama motorları da bu gezgin ismi verilen yazılımları kullanarak örüt ağ sayfalarını kaydediyorlar.

Gezgin kullanarak kendi site haritamızı oluşturabiliriz.

Python için gerekli paketleri pip ve virtualenv kullanarak kurabilirsiniz. Bunun için Flask dersinin başlangıç bölümüne bakabilirsiniz.

Örneğimize bakacak olursak aşağıdaki örnek Python ve xml kullanarak basit bir site haritası oluşturuyor.

from xml.etree import ElementTree
from xml.dom import minidom
from xml.etree.ElementTree import Element,\
     SubElement, tostring, fromstring

harita = Element('url')
adres = SubElement(harita, 'loc')
adres.text = "https://programlama.tk"
sondeğişiklik = SubElement(harita, 'changefreq')
sondeğişiklik.text = 'weekly'
öncelik = SubElement(harita, 'priority')
öncelik.text = '0.8'

dönüştür = minidom.parseString(tostring(harita)).toprettyxml()
sonuç = ElementTree.ElementTree(fromstring(dönüştür))

sonuç.write("harita.xml",encoding='utf-8', xml_declaration=True)

Uygulamayı çalıştırdığımızda oluşturulan xml kütüğüne bakabiliriz.

<?xml version='1.0' encoding='utf-8'?>
<url>
    <loc>https://programlama.tk</loc>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
</url>

Burada "loc" gezilen adresi, "changefreq" sayfanın değişme sıklığını, "priority" ise sayfanın önceliğini gösteriyor.

Bu bilgilerden sonra gezgin yazılımımını aşağıda bulabilirsiniz.

from pattern.web import Crawler, DEPTH, BREADTH, FIFO, LIFO

def türkçeHarflereÇevir(metin):
    liste = {"%C3%B6": "ö",
             "%C5%9F": 'ş',
             "%C3%BC": 'ü',
             "%c3%bc": 'ü',
             "%C3%A7": 'ç',
             "%C4%B1": 'ı',
             "%C4%9F": 'ğ',
             "%C3%A9": 'é'}
    for karakter in liste:
        metin = metin.replace(karakter, liste[karakter])
    return metin


class Gezgin (Crawler):
    def visit (self, link, source=None):
        print ("Geziyorum : ", link.url)


gezgin1 = Gezgin(links=["https://programlama.tk"],
                     domains=["programlama.tk"],
                     delay=0.1,
                     sort=FIFO)

print ("-" * 19 + "İlk örümcek çalışıyor " + "-" * 19)

while len(gezgin1.visited) < 77:
    gezgin1.crawl(method=BREADTH, unicode=True)

kütük = open('baglantilar.txt', 'w')
gezilenler = set()

for gezilen in gezgin1.visited:
    yazılacak = türkçeHarflereÇevir(gezilen)
    liste = ["kullanıcı", "misafir", "giriş", "#", "kayıtol", "soru/sor"]
    if any(x in yazılacak for x in liste):
        print("Yazılmayacak", yazılacak)
    else:
        if yazılacak not in gezilenler:
            kütük.write(yazılacak)
            kütük.write('\n')

kütük.close()

satırlar = [satır.strip() for satır in open('baglantilar.txt')]

from xml.etree import ElementTree
from xml.dom import minidom
from xml.etree.ElementTree import Element, \
     SubElement, tostring, fromstring

harita = Element('urlset')

for satır in satırlar:
    kayıt = SubElement(harita, 'url')
    adres = SubElement(kayıt, 'loc')
    adres.text = satır
    sondeğişiklik = SubElement(kayıt, 'changefreq')
    sondeğişiklik.text = 'weekly'
    öncelik = SubElement(kayıt, 'priority')
    öncelik.text = '0.8'

dönüştür = minidom.parseString(tostring(harita)).toprettyxml()
sonuç = ElementTree.ElementTree(fromstring(dönüştür))

sonuç.write("sitemap.xml",encoding='utf-8', xml_declaration=True)

Burada adres bölümüne kendi sitenizin adresini yazıp site haritası oluşturabilirsiniz.

Gezilen sayfa sayısı .visited 6 olduğu zaman örümcek duruyor. Gezilecek sayfa sayısını arttırabilirsiniz.

Ayrıca gezginin gezinmesini istemediğimiz sayfaları liste isimli değişkene ekleyerek belirleyebiliyoruz.

python3 python siteharitası xml gezgin

  yanıtla

Yanıt yaz