folder Tahribat.com Forumları
linefolder Python
linefolder Python İle Mechanize Ve Beautifulsoup Modülleri



Python İle Mechanize Ve Beautifulsoup Modülleri

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cnr437
    cnr437's avatar
    Banlanmış Üye
    Kayıt Tarihi: 03/Nisan/2007
    Erkek

    Python ile Mechanize ve BeautifulSoup modüllerini kullanarak wallbase.net sitesindeki

    tüm resimleri indirmeye yarayan Linux için python ile ufak bir script yazdım.

    Bu modüllerin kullanımına örnek olabileceği için paylaşıyorum.

    Windows üzerinde denemedim, fakat dizin işlemlerini os modülü ile yaptığım için çalışabilir.

    Şimdilik resimleri tek tek sırayla indiriyor. Daha sonra threading eklenebilir.

     

    wallbase.py şeklinde kaydedip, çalıştırabilirsiniz.

     

    #!/usr/bin/env python

    # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
    # Wallbase.net Wallpaper Grabber
    # ----------------------------------
    # Libraries: mechanize, cookielib, beautifulsoup
    # It can grab wallpapers from http://www.wallbase.net site
    #  and save them in a specified directory.
    # ----------------------------------
    # cnr437
    # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

    import os, sys, re
    import mechanize
    import cookielib
    from BeautifulSoup import BeautifulSoup as BS

    url = "http://www.wallbase.net/wallpaper/"
    START = 179588        # baslangic resmi numarasi
    TEST = 1000        # test icin resim sayisi
    FULL = 502000        # sitenin icerdigi resim sayisi

    if len(sys.argv)>1:
        own_path = sys.argv[1]
        if not os.path.isdir(own_path):
            print "No such directory. It was set default to working directory."
            own_path = os.getcwd()
            print "%s\n" % own_path
    else:
        own_path = os.getcwd()

    path = os.path.join(own_path,"WallBase.net")
    if not os.path.isdir(path):
        os.mkdir(path)

    os.chdir(path)

    # indirilmis resimler listesi
    local_files = []
    # indirilecek resimler listesi
    net_files = []

    sys.stdout.write("Loading...\r")

    # resimleri listelemek
    for root,dirs,files in os.walk(path):
        local_files.extend([os.path.splitext(f)[0] for f in os.listdir(root)])   
    #    for dir in dirs:
    #        for file in files:
    #            print file
    #            local_files.append(file)

    # sitede olmayan, yada olupta silinmis olan resimlerin numaralarini listelemek
    no_img = open("no_image.txt","a+")
    no_list = [line.strip() for line in no_img.readlines()]
    no_img.close()

    # indirilecek resimlerin listelenmesi
    for number in xrange(START,START+TEST):        #TEST yerine FULL yazilacak
        if str(number) not in local_files and str(number) not in no_list:
            net_files.append(str(number))

    sys.stdout.flush()

    #debug
    #print local_files
    #print no_list
    #print net_files

    # Tarayiciyi baslat
    br = mechanize.Browser()

    # Cookieleri aktif et
    cj = cookielib.LWPCookieJar()
    br.set_cookiejar(cj)

    # Handlerlari aktif et
    br.set_handle_equiv(True)
    br.set_handle_redirect(True)
    br.set_handle_referer(True)
    br.set_handle_robots(False)
    br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(),max_time=1)

    # User-agent
    br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.8) Gecko/20100723 ZUbuntu/10.04 (kerkenez) Firefox/3.6.8')]

    # resmi indirme fonksiyonu
    def image_get(img_number):

        # sayfayi tarayici ile acmak
        br.open(url+img_number)
        # sayfayi html olarak okumak
        html = br.response().read()
        # html'i beautifulsoup ile derlemek
        # (beautifulsoup html'in icersindeki nesneleri daha rahat okumayi saglar)
        soup = BS(html)
        # resmin icinde bulundugu "div" bulur
        img_div = soup.find('div', {'id':'bigwall','class':'right'})

        if not img_div:
            # eger resim yoksa
            no_img = open("no_image.txt","a")
            no_img.write(img_number+'\n')
            no_img.close()
            # debug
            #print "There is not image with this number: %s in wallbase.net" % img_number
            return

        img = img_div.find('img')
        # resmin linki
        img_link = img.attrs[0][1]

        stat_div = soup.find('div', {'class':'stats left'})
        #resmin kategorisi
        stat = stat_div.contents[2].replace('  ','').strip()

        ext_div = soup.find("span", {'class':re.compile('right imgtype*')})
        #resmin uzantisi
        ext = ext_div.contents[0].lower()

        directory,category = stat.split(' / ')

        #dizinlerin ayarlanmasi ve olusturulmasi
        dir_dir = os.path.join(path,directory)
        if not os.path.isdir(dir_dir):
            os.mkdir(dir_dir)
        dir_cat = os.path.join(dir_dir,category)
        if not os.path.isdir(dir_cat):
            os.mkdir(dir_cat)

        file_name = os.path.join(dir_cat,img_number+'.'+ext)

        try:
            # resmin siteden cekilmesi ve kaydedilmesi
            br.retrieve(img_link,file_name)[0]
        except:
            print "Downloading Error."
            sys.exit(0)

    # durum ve yuzde gostergesi
    def status(percent,count,total):
        sys.stdout.write("Downloading  %3.2f%% [%d. file of %d files]\r" % (percent,count,total))
        sys.stdout.flush()

    if __name__ == "__main__":

        tot = len(net_files)
        cnt = 1
        #indirilecek resimlerin listesinin dongusu
        for image in net_files:
            perc = (float(cnt) / tot)*100.0
            status(perc,cnt,tot)
            image_get(image)
            cnt += 1

        # bitir :)
        print "Finished. Bye :)"
        raw_input("Enter.")


    Bizim olduğumuz her yerde herşey bizim yüzümüzden olmuştur. Ben benim amk bana bişey olmasın!
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cnr437
    cnr437's avatar
    Banlanmış Üye
    Kayıt Tarihi: 03/Nisan/2007
    Erkek

    2.000 tane duvar kağıdı indirdim daha şimdiden :)

    500.000 tane kaldı :)

     

    cnr437 aşşağıda bunu yazdı :)
    -----------------------------

    Ahanda windows versiyonu :D

    wine'da da çalışıyo :D

    Program Files\WallBase Grabber\WallBase.net dizini içerisine atıyor

    http://filebin.ca/nbtyg/WallBase_v0.1.exe

    Not: Şimdi şöyleki, wallbase'in içerisindeki resimlerin hepsini sırayla indirmeyi amaç edindiğinden ötürü sakıncalı (+18) duvar kağıdı indirme durumu da var. Dikkatli olursunuz. :)


    -----------------------------


    Bizim olduğumuz her yerde herşey bizim yüzümüzden olmuştur. Ben benim amk bana bişey olmasın!
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Blitz
    Blitz's avatar
    Kayıt Tarihi: 30/Eylül/2007
    Erkek
    Windows için olanıni derleyebilir misin peki ?

    validen
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    BeelzeBuB
    BeelzeBuB's avatar
    Kayıt Tarihi: 20/Mayıs/2006
    Erkek

    Blitz bunu yazdı:
    -----------------------------
    Windows için olanıni derleyebilir misin peki ?
    -----------------------------

    derlemek derken? ahah. python interpreter dilidir hocam compiler değil. pythonu kur kodları wallbase.py olarak kaydet ve çift tıkla dosyana.


    hadi ordan seksi!
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Blitz
    Blitz's avatar
    Kayıt Tarihi: 30/Eylül/2007
    Erkek
    Hıı öyle desene. Hiç python la uğraşmadım bilmiyorum o yüzden. Değiştiriyorum soruyu pythonu kurup bunu çalıştrabilir miyiz bi düzenleme yapmadan windows için ? :)

    validen
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cnr437
    cnr437's avatar
    Banlanmış Üye
    Kayıt Tarihi: 03/Nisan/2007
    Erkek

    Blitz bunu yazdı:
    -----------------------------
    Windows için olanıni derleyebilir misin peki ?
    -----------------------------

    windows için bir exe oluşturmaya şuan vaktim yok, ama olursa yaparım.

     

    BeelzeBuB bunu yazdı:
    -----------------------------

    derlemek derken? ahah. python interpreter dilidir hocam compiler değil. pythonu kur kodları wallbase.py olarak kaydet ve çift tıkla dosyana

    -----------------------------

    python kurması yetmeyebilir, 2 tane modül dışarıdan.

    mechanize ve beautifulsoup modüllerini bulmak ve yüklemek gerekebilir.


    Bizim olduğumuz her yerde herşey bizim yüzümüzden olmuştur. Ben benim amk bana bişey olmasın!
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Buremba
    Buremba's avatar
    Kayıt Tarihi: 16/Haziran/2006
    Erkek

    cnr437 bunu yazdı:
    -----------------------------

    Blitz bunu yazdı:
    -----------------------------
    Windows için olanıni derleyebilir misin peki ?
    -----------------------------

    windows için bir exe oluşturmaya şuan vaktim yok, ama olursa yaparım.

     

    BeelzeBuB bunu yazdı:
    -----------------------------

    derlemek derken? ahah. python interpreter dilidir hocam compiler değil. pythonu kur kodları wallbase.py olarak kaydet ve çift tıkla dosyana

    -----------------------------

    python kurması yetmeyebilir, 2 tane modül dışarıdan.

    mechanize ve beautifulsoup modüllerini bulmak ve yüklemek gerekebilir.


    -----------------------------

    modülleri indirmeyi denedim ama olmadı easyinstall diye bir program varmış onu kurduktan sonra konsoola gelip easy_install mechanize yazıyormuşsun ama öyle bir komut yok diyor :S


    . . .. . ... .
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cnr437
    cnr437's avatar
    Banlanmış Üye
    Kayıt Tarihi: 03/Nisan/2007
    Erkek

    modülleri,

    python setup.py install

    komutu ile yüklemeyi dene

    Not: Eğer windows kullanıyorsan, python komutunu çalıştırabilmen için, python dizinini Ortam Değişkenlerine eklemen gerekir.


    Bizim olduğumuz her yerde herşey bizim yüzümüzden olmuştur. Ben benim amk bana bişey olmasın!
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cnr437
    cnr437's avatar
    Banlanmış Üye
    Kayıt Tarihi: 03/Nisan/2007
    Erkek

    Ahanda windows versiyonu :D

    wine'da da çalışıyo :D

    Program Files\WallBase Grabber\WallBase.net dizini içerisine atıyor

    http://filebin.ca/nbtyg/WallBase_v0.1.exe

    Not: Şimdi şöyleki, wallbase'in içerisindeki resimlerin hepsini sırayla indirmeyi amaç edindiğinden ötürü sakıncalı (+18) duvar kağıdı indirme durumu da var. Dikkatli olursunuz. :)


    Bizim olduğumuz her yerde herşey bizim yüzümüzden olmuştur. Ben benim amk bana bişey olmasın!
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    THE_MILLER
    THE_MILLER's avatar
    Kayıt Tarihi: 28/Ekim/2009
    Erkek

    faytonun gözünü seveyim.


    Türkiye'nin geleceği çelikten yoğruluyor; belki biz olmayacağız ama bu çelik aldığı suyu unutmayacak.
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    anarsistherif
    anarsistherif's avatar
    Kayıt Tarihi: 27/Ağustos/2009
    Erkek
    Oha tüm siteyi mi indiriyoruz? Tüm resimleri ha? Kaç GB Yer tutar bu la? :D

    =)
Toplam Hit: 3519 Toplam Mesaj: 12