Sitede yer alan 1’den 10000’e kadar olan fotoğrafları bilgisayarımıza indirmek istediğimizi varsayalım. Ya da html gibi not defteriyle açıldığında anlamlı sonuç vermeyen yani binary modda olan dosyaları indirmek için kullanabileceğimiz bir program. Verilen linkteki JPG dosyalarını çekiyor. Bulunmayan dosyaların yerine hata verilmemesi için bir try – except yapısı kullandık. Kodlarımıza bakalım: #-*-coding:utf8-*- import urllib2 for num in range(5,1500): try: num=str(num) adresim="http://foto.gurayyildirim.com.tr/fotolar/"+num+".JPG" print adresim a=urllib2.urlopen(adresim) c="gelenler/"+num+".JPG" b=file.open(c,"wb") b.write(a.read()) b.close() a.close() except: continue # TRY EXCEPT yapısını kullanma sebebimiz eğer o isimde dosya yoksa, yani # numaralar sırayla gitmiyorsa oluşacak olan hataları görmezden geldirme # bu sayede program takılmadan ilerler.
Urllib modülünü kullanarak elimizdeki proxy’ler yardımıyla sitelere giriş yapabiliriz. Bunun için önce proxy’leri Python’un istediği şekilde bir sözlüğe koyup ardından FancyURLopener() fonksiyonu ve en son da open() fonksiyonunun elinden geçirerek siteye bağlanıyoruz. Hemen bir örnek kod üzerinde görelim. import urllib proksiler={'http': 'http://proksi.gurayyildirim.com.tr:0000/'} asama2=urllib.FancyURLopener(proksiler) baglanti=asama2.open("http://www.python.gurayyildirim.com.tr") print baglanti.read() Kısaca açıklamak gerekirse önce sözlük içerisine bir proxy adresi ve portunu http://proxyadresi:port şeklinde yazdık ve bunu proksiler isimli değişkene atadık. Daha sonra asama2 olarak adlandırdığımız değişkene proksiler değişkenini FancyURLopener fonksiyonu yardımıyla atadık ve en son da 3.
Kullanmak nasip olmadı ancak bir siteden verileri çeken bir bot yapmıştım. Kodları verip kısaca açıklayayım. Tkinter kullanmıştım ancak ekleme sayısı düzgün çalışmıyor. Başlangıç numarasının verildiği dosyadan veriyi alıp program kapatılana kadar seri bir şekilde ekliyor. Verileri de re modülünün nimetlerinden yararlanarak ayrıştırdım. Aslında çok kısa sürede binlerce veri çekebiliyor ve çekilen sitenin de sağlığı düşünülürse ana döngüye time.sleep() eklemek mantıklı geldi. Kendi sitenizse bunu kaldırıp işleminizi hızlı yapabilirsiniz tabii ki sizin seçiminiz.