TR | Data Hacking with Python
Bu yazıda mechanize ve bs4 modülleri kullanarak bgabank.com sisteminde bulunan id manipulation olayından faydalanarak bütün kullanıcıların kişisel verilerini otomatik olarak çekeceğiz
Mechanize Modülü
Bir tarayıcı gibi davranarak, web tabanlı işlemlerimizi yapmamıza olanak tanıyan çok güçlü bir
modüldür.
Kurlumu
pip install mechanize
Verileri çekmek için yazacağımız kod üç kısımdan oluşacaktır :
- Kullanıcı adı ve parola ile siteye giriş işlemi
- Giriş işleminden sonra dönen veriyi okuma
- Son olarak okuduğumuz veriden istediğimiz kısımları ayrıştırmak
Giriş işlemi için kullanacağımız bilgiler
- login_URL : ‘http://isube.bgabank.com/giris.aspx’
- Kullanıcı Adı : 10000150
- Parola : 100019
Zafiyet bulunan URL adresi
- ‘http://isube.bgabank.com/profil.aspx?musteriID=’
İlk olarak kullanacağımız kütüphaneleri kodumuza dahil edelim
İmport mechanize İmport bs4
Nasıl bir tarayıcıda bir siteye girmek için öncelikle o tarayıcıyı açıyorsak aynı şekilde mechanize tarayıcımızı açmamız gerekiyor.
br = mechanize.Browser()
Şimdi de login amaçlı belirlediğimiz URL adresini açıyoruz.
Gerekli tanımlamaları yaptıktan sonra daha önce tanımladığımız url adresini mechanize modülünü kullanarak açıyoruz.
Şimdi sayfada mevcut olan form alanlarını görüntülemek için aşağıdaki görselde yapılanları uyguluyoruz.
Gördüğünüz üzere bu form alanlarından bir tanesi müşteri numarası ve parola değerleri istemekte. Bizde bu form alanını kullanacağız. Bu form alanını seçmek için :
br.select_forms(nr=1)
metodunu kullanıyoruz. Burada nr=1 değeri seçtiğimiz formu temsil eder, bir diğer deyişle listelenen form alanlarını bir listenin elemanları gibi düşünebiliriz.İlk form ‘0’ ikinci form ‘1’ diye devam eder.
Son olarak seçtiğimiz form için gerekli alanları dolduruyoruz ve gönderiyoruz:
Login işlemini tamamladığımıza göre artık diğer müşteri bilgilerini okumak için biraz daha ileri gidebiliriz.
Şimdi elde ettiğimiz bu veriyi ayrıştırmaya çalışacağız ve bunun için bs4 modülünü kullanacağız.
- Kurulumu için :
pip install BeautifulSoup4 bt = bs4.BeautifulSoup(info, "lxml")
- Bu bize p tagı ile başlayan bir liste döndürür.
bt.find_all("p")
Daha düzenli bir hale getirmek için:
name = bt.find_all("p")[3].input['value']
surname = bt.find_all("p")[4].input['value']
phone = bt.find_all("p")[5].input['value']
Yazdıklarımızın hepsini derleyip bir python dosyası oluşturup çalıştırdığımızda ise :