Uygulama 5 | Remote Search

Bu uygulamayı, daha çok yeni yöntemleri görmeniz için yaptım. Uygulamanın adı Remote Search; anlamı, 'Uzaktan Arama' şeklinde. Normal şartlarda blog sayfamıza geldiğinizde üst tarafta bir arama kutusu (searchbar) mevcut olduğunu görürsünüz. Orada arama yaptığınızda URL kısmına hiç dikkat ettiniz mi?

Aşağıdaki görüntü, aradığınız kriterlerde bir eşleşme bulunmadığında gösterilir.

Aşağıdaki görüntü, aradığınız kriterlerde bir eşleşme bulunduğunda gösterilir.

Bu iki görselde ortak bir nokta var. URL kısmına baktığınızda ana URL (base URL) kısmından sonra /search/ ifadesi geliyor. Demek ki biz, bir şey arayacağımız zaman base URL olarak 'https://blog-cyberworm.com/search/' adresini kullanabiliriz. Aranan kelime, search/ ifadesinden sonra geliyor.

Bu noktada biz, aradığımız şeyi webbrowser ile arayamaz mıyız? Hani webbrowser, parametre olarak bir URL alıyordu ve o URL'e ait web sitesini açıyordu.

Peki, örneğin aradığımız kriterlere göre bir sonuç bulunamayan sayfanın kaynak kodunu çektik; o zaman oradaki '0 Sonuç Bulundu' ifadesi kaynak kodun içinde yer alır, değil mi?

İşte biz, bunu da kontrol edeceğiz. Yavaştan başlayalım.

NOT: Uygulamanın adı 'Remote Search'. Ancak kod sayfasının adı remotesearch.py değil, autosearch.py. Bu durumu görmezden gelebilirsiniz; önemli bir şey değil.

İlk olarak optparse, webbrowser ve requests modüllerine ihtiyacımız olduğu için bunları import ediyorum.

Bunu yaptıktan sonra main() isimli bir fonksiyon tanımlıyorum. Her şey bu fonksiyonda olup bitecek.

Sonrasında özel koşulumuzu en sona ekliyorum ve bu uygulamanın daha güvenli, daha hassas olmasını sağlıyorum.

Burada anlamadığınız bir nokta varsa lütfen eski blogları gözden geçirin.

İlk önce base URL belirlememiz, sonra da user-agent bilgimizi eklememiz lazım. Bu bilgiyi eklemezsek, sitenin sunucusu tarafından banlanabiliriz.

Gördüğünüz gibi base URL'imi 'url = https://blog-cyberworm.com/search/' olarak tanımladım. user-agent bilgimi de bir sözlük olarak ekledim; birazdan kullanacağız.

Şimdi, bir optparse objesi tanımlamamız gerekiyor. Bu obje, sadece bir opsiyonlu olacak. O da, sitede aratmak istediğimiz kelimenin kendisini isteyecek. Yani örneğin --kelime şeklinde. Bunu, aşağıdaki görsele bakmadan veya başka yerden bakmadan yapmaya çalışın.

Oluşturduğum objeye parser ismini verdim. Bu, yaygın olarak kullanılan bir obje ismidir. Sonrasında '-e' ve '--extension' olarak argümanlarımı belirledim. Bu noktada siz, '--word' gibi bir şey de koyabilirsiniz ama ben bunu bir eklenti olarak düşündüm ve extension olsun istedim. dest= ve help= kısımlarını da yazdıktan sonra klasik Tuple yapımızı oluşturuyoruz.

Bu Tuple ile, oluşturduğumuz parser objesine argümanlarımızı tanıtıyoruz. Son olarak dest= parametresinde verdiğimiz ismi bir değişken olarak yazıyor ve bunu, Tuple'daki value değeri yerine koyuyoruz: 'extension = value.extension'

optparse işlemlerimiz tamamlandı. Kullanıcı bu programı 'python autosearch.py -e <kelime>' şeklinde çalıştırmalı. Buradaki <kelime>, az önce tanımladığımız 'extension' yerine geçecektir.

Şimdi, amacımız 'https://blog-cyberworm.com/search/<kelime>' şeklindeki yapıyı elde etmek. Bunun için base URL ile kullanıcıdan aldığımız extension bilgisini birleştirmemiz gerekiyor.

fstring yapılarını çok sevdiğimi çok eskiden söylemiştim. İşte, fstring kullanarak bu iki yapıyı bu şekilde belirliyoruz. Base URL'imiz, 3. satırdaki url değişkeninde zaten tutuluyor. Kullanıcı programı çalıştırırken -e dns dediğinde bunlar birleşiyor ve ona göre arama yapılıyor.

Şimdi, bu ikisini birleştirmeyi öğrendik. Peki, birleşik olan bu yapıyı siteyle nasıl etkileşime sokabiliriz?

Bunun için getStatus isimli bir değişken belirliyorum ve bir get request atıyorum. Bu get request içerisinde birleşik URL yapımız ve user-agent bilgimiz yer alıyor. Bu noktadan sonra artık get request yaptığımız siteyle alakalı spesifik bilgileri sadece 'getStatus.' diyerek alabileceğiz.

Şimdi, siteyle etkileşime girebilmemiz için öncelikle öyle bir sitenin olması ve onun çalışır durumda olması gerekiyor. Bunun için ilk önce 200 durum kodunu aramamız gerekiyor. Her şey bu duruma bağlı olacağı için diğer komutlarımı getStatus.ok koşulu altında yazacağım.

if getStatus.ok: koşuluyla her şeyden önce sitenin durumunu kontrol ediyorum. Eğer site çalışır durumdaysa diğer kodları gerçekleştireceğiz; değilse, "Something went wrong..." diyeceğiz.

Bu arada biz, direkt olarak siteye get request atmadık; dikkat edin. Biz, birleşik yapıya get request attık. Yani aranan şeyin çıkaracağı sonuçla ilgileniyoruz.

Ayrıca kaynak koduna erişip "0 Sonuç Bulundu" ifadesini kontrol edeceğimizi söylemiştim. Bunun için sourceCode = getStatus.text diyorum ve kaynak kodu çekiyorum.

if "0 Sonuç Bulundu" in sourceCode or "0 Result Found" in sourceCode: ifadesi ile bahsettiğim o ifadenin kaynak kodunun içinde olup olmadığını kontrol ediyoruz. Bu noktada o ifadenin İngilizcesini de yazmamın sebebi, yabancı kullanıcılardır. Eğer site İngilizce ise, kaynak kodundaki ifadeler de öyle olacaktır. Bir metin içinde bir şey arayacaksanız if "aranan şey" in <aradığınız yer> şeklinde bir kontrol sağlayabilirsiniz.

Eğer "0 Sonuç Bulundu" ifadesi kaynak kodun içindeyse "<kelime> ile ilgili bir blog bulunamadı" yazsın istiyoruz. Ancak orada "0 Sonuç Bulundu" yerine örneğin "4 Sonuç Bulundu" yazıyorsa bu, geri dönüş aldığımızı gösterir. O yüzden else kısmında birleşik yapıyı webbrowser ile açıyorum. Gördüğünüz gibi webbrowser sadece URL almıyor, formatlanmış URL de alabiliyormuş.

Evet, projemiz bu kadardı. Şimdi, bunu deneyelim.

Gördüğünüz gibi ben sadece -e deyip ip kelimesini aratmak istiyorum dedim; Python siteyi açtı, kelimeyi arattı (URL'e dikkat edin), sonuçları döndürdü. Şimdi, var olmayan bir kelime aratalım.

Bakın burada da hiçbir şey bulamadığı için ne siteyi açtı ne de bana başka bir şey gösterdi. Sadece 'bulamadım' dedi. Aslında arka planda Python siteyi açtı, kelimeyi arattı, sonuçları döndürdü, kaynak kodunda o ifadeleri aradı ve bulamadı.

Şimdi bunu, olmayan bir sitede deneyelim. Eski sitemizi kullanabiliriz.

Program oldukça güzel çalışıyor.

GÖREV: Yaptığımız bu programı, Google arama motoru için yapmanızı istiyorum. Yapan arkadaşlar bana Instagram veya Telegram üzerinden erişirse onları bir Reel'e konuk edebilirim. Google URL örneği aşağıda mevcut.


Yayınlanma Tarihi: 2022-11-28 21:46:21

Son Düzenleme Tarihi: 2022-12-01 12:27:26