- Konuyu başlatan
- #21
Teşekkürler sağ olun : )Ellerinize sağlık
Follow along with the video below to see how to install our site as a web app on your home screen.
Not: This feature may not be available in some browsers.
Teşekkürler sağ olun : )Ellerinize sağlık
Eline sağlık hocam detaylı bir açıklama olmuş![]()
Merhaba dostlar hoş geldiniz
Bu konumuzda python ile tool nasıl yazılır onu göstereceğim
Bilmeyen arkadaşlar için ve öğrenmek isteyenler için.
Tool yazmak için bir tane editör programı seçmenizi öneririm.
Benim önerim :
Windows: Visual Studio Code
Linux: PyCharm
Tool olarak Proxy Tool Yazıcaz
![]()
Python Nedir?
neredeyse her amaç için kullanılabilen Python, obje yönelimli, yorumlanabilir ve dinamik bir programlama dilidir.
![]()
1. Okuması, Öğrenmesi ve Yazması KolayPython, İngilizce benzeri sözdizimine sahip üst düzey bir programlama dilidir . Bu, kodun okunmasını ve anlaşılmasını kolaylaştırır.
Python'u almak ve öğrenmek gerçekten çok kolay , bu yüzden birçok insan Python'u yeni başlayanlara tavsiye ediyor. Aynı görevi gerçekleştirmek için C/C++ ve Java gibi diğer ana dillere kıyasla daha az kod satırına ihtiyacınız var .
2. Geliştirilmiş VerimlilikPython çok üretken bir dildir . Python'un basitliği nedeniyle geliştiriciler sorunu çözmeye odaklanabilir. Programlama dilinin sözdizimini veya davranışını anlamak için çok fazla zaman harcamaları gerekmez . Daha az kod yazar ve daha çok iş yaparsınız.
3. Yorumlanan DilPython, yorumlanmış bir dildir; bu, Python'un kodu satır satır doğrudan yürüttüğü anlamına gelir . Herhangi bir hata durumunda, daha fazla çalışmayı durdurur ve oluşan hatayı geri bildirir.
Python, programın birden fazla hatası olsa bile yalnızca bir hata gösterir. Bu, hata ayıklamayı kolaylaştırır .
4. Dinamik Olarak Yazılan Bir DilPython, biz kodu çalıştırana kadar değişkenin türünü bilmez. Yürütme sırasında veri türünü otomatik olarak atar . Programcının değişkenleri ve veri türlerini bildirmek konusunda endişelenmesine gerek yoktur.
5. Ücretsiz ve Açık KaynakPython, OSI onaylı açık kaynak lisansı altında gelir . Bu yapar özgür için kullanmak ve dağıtmak . Kaynak kodunu indirebilir, değiştirebilir ve hatta Python sürümünüzü dağıtabilirsiniz. Bu, bazı belirli davranışları değiştirmek ve sürümlerini geliştirme için kullanmak isteyen kuruluşlar için kullanışlıdır.
6. Geniş Kitaplıklar DesteğiPython'un standart kütüphanesi çok büyüktür, göreviniz için gereken hemen hemen tüm fonksiyonları bulabilirsiniz. Bu nedenle, harici kütüphanelere bağımlı olmanız gerekmez.
Ancak yapsanız bile, bir Python paket yöneticisi (pip) , Python paket dizininden (PyPi) diğer harika paketleri içe aktarmayı kolaylaştırır . 200.000'den fazla paketten oluşur.
7. TaşınabilirlikC/C++ gibi birçok dilde , programı farklı platformlarda çalıştırmak için kodunuzu değiştirmeniz gerekir . Python'da durum aynı değil. Yalnızca bir kez yazıp her yerde çalıştırırsınız.
Ancak, sisteme bağlı herhangi bir özelliği dahil etmemeye dikkat etmelisiniz .
![]()
1. Yavaş HızPython'un dinamik doğası, Python'un yavaş hızından da sorumludur, çünkü kodu yürütürken fazladan iş yapması gerekir. Bu nedenle Python, hızın projenin önemli bir yönü olduğu amaçlar için kullanılmaz.
2. Bellek Verimli DeğilGeliştiriciye basitlik sağlamak için Python'un biraz ödün vermesi gerekiyor. Python programlama dili büyük miktarda bellek kullanır . Bellek optimizasyonunu tercih ettiğimizde uygulamalar oluştururken bu bir dezavantaj olabilir.
3. Mobil Bilişimde ZayıfPython genellikle sunucu tarafı programlamada kullanılır . Aşağıdaki nedenlerden dolayı istemci tarafında veya mobil uygulamalarda Python'u göremiyoruz. Python bellek açısından verimli değildir ve diğer dillere kıyasla yavaş işlem gücüne sahiptir .
4. Veritabanı ErişimiPython'da programlama yapmak kolay ve stressizdir . Ancak veritabanı ile etkileşime girdiğimizde, geride kalıyor.
Python'un veritabanı erişim katmanı, JDBC ve ODBC gibi popüler teknolojilere kıyasla ilkel ve az gelişmiştir .
Büyük kuruluşlar , karmaşık eski verilerin sorunsuz etkileşimine ihtiyaç duyar ve bu nedenle Python, kuruluşlarda nadiren kullanılır.
5. Çalışma Zamanı HatalarıPython'un dinamik olarak yazılan bir dil olduğunu bildiğimiz gibi, bir değişkenin veri tipi her an değişebilir. Tamsayı içeren bir değişken gelecekte bir dize tutabilir ve bu da Çalışma Zamanı Hatalarına yol açabilir .
Bu nedenle Python programcılarının uygulamaları kapsamlı bir şekilde test etmesi gerekir.
![]()
İlk önce oluşturduğumuz .py uzantılı dosyanın içerisine import etmemiz gereken 3 tane modül var
Modülleri import önce Modülleri yüklememiz gerekiyor :sudo apt install python3-pip
pip3 install requests
pip3 install beautifulsoup4
pip3 install choice
![]()
Python:import requests from bs4 import BeautifulSoup from random import choice![]()
İmport kodlarımızı ve modüllerimizi yazdık peki bu kodlar ve modüller ne işe yarıyor?
amaçları nedir?
import = Kendi yazdığımız bir modüle başka bir projedeihtiyaç hissettiğimizde o modülü yeni projeye aktarma işlemeine import denir.
requests = Bu modül ile web üzerindeki isteklerinizi yöneteceksiniz. Mesela bu modül ile API entpointlerine PUT, DELETE, POST gibi istekler atabilirsiniz.
From = Bir isim alanı bir nesnedir; dolayısıyla modülde tanımlanan değişken ve fonksiyonlara erişmek için nokta notasyonu kullanılır. Modülden sadece belli isimleri almak istiyorsak from import komutunu kullanabiliriz.
BeautifulSoup = Bu modül ile bir kaynak içerisindeki HTML kodlarını ayrıştırıp sadece istediğimiz alanları kesen programlar, daha popüler adıyla BOT yazabiliriz.
bs4 = BeatufilSoup4
random = Eğer yazdığınız programlarda, belirli bir aralıkta rastgele sayıların üretilmesine ihtiyaç duyarsanız Python’ın standart kütüphanesinde bulunan random adlı bir modülü kullanabilirsiniz.
choice = choice() random modülünün choice() adlı fonksiyonunu kullanarak, dizi niteliği taşıyan veri tiplerinden rastgele öğeler seçebiliriz.
![]()
Python:import requests from bs4 import BeautifulSoup from random import choice def proxydeneme(): proxyurl = 'https://free-proxy-list.net/' Req = requests.get(proxyurl) Beasoup = BeautifulSoup(Req.content, 'html5lib') return {'IP addres ve PORT': choice(list(map(lambda x: x[0]+':'+x[1],list(zip(list(map(lambda x: x.text, Beasoup.find_all('td')[::8])), (map (lambda x: x.text, Beasoup.find_all('td')[1::8])))))))} print (proxydeneme())![]()
Toolumuzun gövdesini oluşturduk
Peki bu gövdeyi oluşturuyorken neler yaptık?
Kodlarımız nasıl işliyor?
Def proxydeneme () = def komutu atama ( = ) işlemi gibi çalışır bunun bir yan faydası, varolan bir fonksiyona başka isimler verebilme imkanıdır. İki ismin de aynı nesneye işaret ettiğini is komutuyla doğrulayabiliriz. Yine aynı dinamik özellik sayesinde, fonksiyon veren fonksiyonlar (“fonksiyon fabrikaları”) tanımlanabilir. Ve biz burada proxydeneme fonksiyonu oluşturmuş bulunmaktayız
proxyurl = 'Free Proxy List - Just Checked Proxy List' = Burada bir url ataması yaptık gerekli olan fonksiyonları bir url'nin içinden alıcaz yani
(fonksiyon fabrikaları) işlevini kullandık
Req = requests.get(proxyurl) = belirtilen url'ye bir GET isteği gönderdik.
Beasoup = BeautifulSoup(Req.content, 'html5lib') = Requests modülü ile siteye bir GET isteği yaptık bunu bir Req objesine atadık, sonra da BeautifulSoup içine Req.content değerini verdik, html5lib kütüphanesi ile parse etmesini seçtim, çünkü hızlı.
Kullanabileceğiniz kütüphaneler şunlar:
lxml html.parser lxml-xml html5lib
return {'IP addres ve PORT': choice(list(map(lambda x: x[0]+':'+x[1],list(zip(list(map(lambda x: x.text, Beasoup.find_all('td')[::8])), (map (lambda x: x.text, Beasoup.find_all('td')[1::8])))))))} = return komutu ile çağırdığımız fonksiyonun değerini buraya getirmesini sağladık ve o değerin ismini IP addres ve PORT olarak atadık sonrasında choice ile rastgele bir ip addres ve ona bağlı olan bir portu döndürmesini sağladık ve döndürme işlemini listeleyerek vermesini istedik map ile parametre olarak aldığı listenin her elemanını sırasıyla parametre olarak göndermesini sağladık lambda tek satırlık fonksiyon olduğu için lambdayı kullandık ve tek bir satıra Ip addresimizi ve portumuzu koydurduk. x[0] olarak ip adresimizi adlandırdık ve x[1] olarakta portumuzu adlandırdık, (Yazılımda 0'dan başlanır sayısal olarak) ve sonrasında bir listeleme ve zip ile iki dizisel elemanın öğelerini birbirleriyle eşleştirirerek bir zip objesi oluşturduk sonrasında o zipi listeledik ve map ile parametreleri sırasıyla uyguladık sonrasında lambda ile o parametreler'den rastgele bir tanesini alıp bize çıktı vermesini sağladık, text olarak. Beasoup.find_all fonksiyonu ile html içerisinde ki bilgileri bize vermesini sağlıcaz Ip addres'ler ve portlar 'td' içerisindeydi o yüzden ('td') olarak işaretledik ve [1::8] komutu ile 1'den başlayıp sekizer sekizer almasını sağladık bu komut ile.
Toolumuz daha bitmedi ama hadi bakalım nasıl çalışıyor?
![]()
Evet tamda istediğimiz gibi herhangi bir Ip addresi ve ona bağlı olan portu bize verdi
şimdi ileriki safhalara geçelim..
Python:import requests from bs4 import BeautifulSoup from random import choice def proxydeneme(): proxyurl = 'https://free-proxy-list.net/' Req = requests.get(proxyurl) Beasoup = BeautifulSoup(Req.content, 'html5lib') return {'IP addres ve PORT': choice(list(map(lambda x: x[0]+':'+x[1],list(zip(list(map(lambda x: x.text, Beasoup.find_all('td')[::8])), (map (lambda x: x.text, Beasoup.find_all('td')[1::8])))))))} def proxykullan(proxyurl): while True: try: proxy = proxydeneme() r = requests.get(url,proxies=proxy,timeout=5) if r.status_code == 200: print('Proxy Çalışıyor = ', proxy) break except: print('Proxy çalıştırılamadı:', proxy) pass return r url = 'https://www.ipify.org/' x = proxykullan(url) print(x.text)Bu kısımda toolumuzu bitiriyoruz ve nasıl çalışacağını test edicez
Yine kodlarımızın işlevini aneliz edelim..
def komutu ile yeni bir proxykullan fonksiyonu oluşturduk
ve o fonksiyonu proxyurl atamasına bağdaştırdık yani 'Free Proxy List - Just Checked Proxy List' adresine bağladık
while true ile bir döngü oluşturduk içinde'ki işlemleri sonsuza kadar döndüren bir döngü
try komutu ile aşağısına girdiğimiz kodlara hata denetlemesi yapıcaz
proxy = proxydeneme() bir atama sağladık burada
r = requests.get(url,proxies=proxy,timeout=5) ile proxy adresimiz eğer 5 saniyeden geç gelirse iptal edilip diğer ip addrese geçmesini istedik
r = r.status_code == 200: ile Bu bir HTTP durum kodudur, "Tamam" anlamına gelir (Örn: Sunucu http isteğini başarıyla yanıtladı) demek
print('Proxy çalışıyor =', proxy) ile proxy'miz 5 saniyeden geç geldiğinde o proxy'i bize sağlamasını istedik
break döngünün hemen o anda bitirilmesini istedik. Program akışı döngüden sonra her ne varsa onunla devam edicez çünkü
except ile try komutunda olduğu gibi kodlara hata denetlemesi yapıcaz
print('proxy çalıştırılamadı:', proxy) bize 5 saniye geç bağlanan proxy'leri iptal ettiricek ve diğer proxylere geçicek
pass komutu bize diğer proxyleri denememiz için yardım eden komut
return r bir fonksiyonun sonlandırılmasına ve fonksiyonun çağrıldığı yere değer götürmesine yardım edicek
url = 'ipify - A Simple Public IP Address API' ataması ile ipify adresine atadık
x = proxykullan (url) ile x atamasına proxykullan fonksiyonunu ve önceden atama yaptığımız url atamasını bağdaştırdık.
print(x.text) ise bize çıktı bilgilerini text olarak bize göndermesini sağlıyor.
Kodlarımız bu kadardı hadi şimdi nasıl çalıştığına bakalım
![]()
Toolumuz çalıştı ancak html kodlarını'da beraberiyle getirdi mantıkken öyle olması gerekiyordu zaten.
Umarım bir şeyler anlatabilmişimdir : ))
Bu konumuz bu kadardı
Kendinize dikkat edin
İyi günler.
![]()