Selamlar, bir süredir Python ile münasebet içerisindeyim, temelde sektör sebebiyle kullanmakta olduğum dil C/C++ olsa da bu yeni ve güzel platformda neler yapılabildiğini görmek için ara ara biraz kurcalıyorum.

C++ veya ne bileyim, daha üst seviye diller (Java, C#) ile arasında ne farklar var diye bakınırken, aklıma güzel bir uygulama fikri geldi.

Ne zamandır, Windows 10’un böyle Lock Screen’inde falan çıkan güzel fotoğrafların (Windows Spotlight) kaynağını arıyodum. Sonradan buldum da, ama biraz beklediğimden fazla sayıdalardı ve tek tıkla indirmeye müsait değildi.

Bir arkadaş, sayfasında bu imajları host ediyor sağolsun. Buradan bu imajları kod marifetiyle scrape’leyebilir miyim diye merak ettim. Sonra da bunu neden Python ile yapmayayım ki dedim. İlgili crawler kodu aşağıdadır. (Spyder üzerinde Python 3 kullanarak yazdım.)

Not: Bu dilde yeniyim, sürç-ü lisan ettiysek affola.

# -*- coding: utf-8 -*-
"""
Created on Sun Oct 27 22:11:10 2019

@author: DTunc
"""

import http.client

def getPageHtml(urlroot,urlsuffix="/"):
    #print("Getting URL: ",urlroot,urlsuffix)
    conn = http.client.HTTPSConnection(urlroot,443)
    conn.request('GET',urlsuffix)
    r= conn.getresponse()
    output = r.read()
    conn.close()
    return output

#burayı tabi ki kendinize göre değiştirmek isteyeceksiniz
downloadFolder = "D:/Torrent Download/WindowsSpotlight/"

pageRoot = 'spotlight.it-notes.ru'
pageSuffix = '/page/'
totalBytes = 0
currentPageNumber = 1
maxPageNumber = -1


rootHtml = getPageHtml(pageRoot)
pageNumberDividerPhrase = "next page-numbers"

pageNumberSplit = str(rootHtml).split(pageNumberDividerPhrase)
pageNumberStr = pageNumberSplit[0]
pgNoIndex = pageNumberStr.rfind("page")
pgNoIndexStart = pgNoIndex + 5
pgNoIndexEnd = pageNumberStr.rfind("\\'>")
pageNumber = pageNumberStr[pgNoIndexStart:pgNoIndexEnd]

print("There are ",pageNumber," pages in total.")

maxPageNumber = int(pageNumber)

for p in range(1,maxPageNumber+1):    
    print("\n---Page: ",currentPageNumber,"---\n\n")
    currentPageNumber = currentPageNumber + 1
    pageHtml = getPageHtml(pageRoot,pageSuffix + str(p))    
    pageSplit = str(pageHtml).split("\"more-link\"")
    a = 1
    for l in pageSplit[1:]:
        imagelink = l[7:l.find("title")-2]
        imageID = imagelink[imagelink.rfind("/")+1:]
        imageSrc = imageID + ".jpg"
        print("\n\n",str(a),"------------------\n\n",imagelink,"- ID : ",imageID,"\n")
        a = a + 1
        
        imageLinkHtml = str(getPageHtml(pageRoot,imagelink[imagelink.find("images")-1:]))
          
        
        imageDlLink = imageLinkHtml[imageLinkHtml.find("wp-content/uploads"):imageLinkHtml.find(imageSrc)+len(imageSrc)]
        
        
        print("Downloading image: ",imageDlLink)
        
        image = getPageHtml(pageRoot,"/" + imageDlLink)
        
        with open(downloadFolder + imageSrc, 'wb') as f:
            f.write(image)
            f.flush()
            f.close()
            totalBytes = totalBytes + len(image)
            print(totalBytes/1024/1024," MB downloaded.")
#Finito.

Ben 1 saat kadar önce başlatmıştım, indirme işlemi az önce bitti. 450 civarı sayfa vardı ben indirdiğimde (her gün yenilerini ekliyor), her sayfada 5 Wallpaper var. Bu da toplam yaklaşık 1.5 GB etti.

Seç beğen al, güzel bir galeri. Shuffle mode’da 10 dakikada bir değişir şekilde kurdum ben.

Güle güle kullanın, afiyet olsun.

NOT: Bu site bir süredir yeni bir adrese taşınmış. Bu yüzden bu sayfada gördüğünüz script muhtemelen çalışmayacaktır. Ben de downloader script’ini güncelledim ve iyileştirdim. Buradan ulaşabilirsiniz: Wallpaper Scraper v2


DT

Random word generator.

1 yorum

Berker · 03/11/2019 08:36 tarihinde

Teşekkürler

Bir cevap yazın

Avatar placeholder

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir