Blog (2)
Komentarze (4)
Recenzje (0)
@emilekm2Pythonowe życioumilacze #1 Galerie z kwejka

Pythonowe życioumilacze #1 Galerie z kwejka

11.02.2014 16:34

Czy was też nie wnerwiają te pokazy slajdów na onecie, kwejku i innych tego typu stronach? Trzeba klikać za każdym razem 'kolejne zdjęcie'. Żadnego lightboxa, poprostu trzeba przeładować całą stronę. Mnie wnerwiają bardzo.

Python w służbie ludzkości ;)

Dlaczego nie można by tego zautomatyzować? Od czego są w końcu języki skryptowe ;) Ten skrypt pythona działa na 100% w wersjach nowszych niż 3.2. Potrzebna jest tylko biblioteka BeautifulSoup. Dokumentacja i instalacja. Na linuksie można robić krok po kroku, ale na windowsie są cyrki z tym (portowanie do pythona 3 itp), więc przygotowałem zzipowany katalog bs4 do wrzucenia w katalog site-packages (u mnie C:\Python32\Lib\site-packages). Oto on - https://www.dropbox.com/s/hd2dobpd7vqqrru/bs4.zip

Skan z malwarebytes - http://wklej.org/id/1269727/


from bs4 import BeautifulSoup
import urllib.request
import webbrowser
class ShortGallery():
    def __init__(self,url):
        self.kwejk="http://kwejk.pl"
        self.imageslist=[]
        self.url=url
        self.soup=self.getURL()
        self.downloadImages()
        self.view()
    def getURL(self):

        x=urllib.request.urlopen(self.url)
        soup=BeautifulSoup(x)
        return soup
    def downloadImages(self):

        gallery=self.soup.find('div',{'id':'gallery'})
        images=gallery.find_all("a")
        for i in images:
            url=self.kwejk+i['href']
            x=urllib.request.urlopen(url)
            soup=BeautifulSoup(x)
            largepic=soup.find('div',{"id":"largepic"})
            image=largepic.img['src']
            self.imageslist.append(image)
            del soup
    def view(self):
        self.file=open('result.html','w')
        head="""
        <!DOCTYPE html>
        <html lang="pl">
        <head>
        <meta charset="utf-8">
        <style>#container{width:960px;border:1px solid black;margin:auto;border-radius:10px;}img{border:5px solid rgba(200,200,200,0.6);}</style>
        <title>Krótka galeria z kwejka ^^</title>
        </head>
        """
        body="""
        <body>
        <section id="container">
        """
        end="""
        </section>
        </body>
        </html>
        """
        images=''
        for i in self.imageslist:
            images=images+'<img src="'+i+'">
'

        self.file.write(head+body+images+end)
        webbrowser.open_new_tab('result.html')

url=input('Wklej url pierwszego zdjęcia w galerii  ')
ShortGallery(url)

Objaśnienie

Kod może nie jest pierwszej klasy, bo dopiero uczę się pythona, ale działa. Uruchamiamy skrypt w konsoli, wklejamu url. Program generuje plik html i automatycznie otwiera go w przeglądarce.

Magia dzieje się tutaj:


def downloadImages(self):

        gallery=self.soup.find('div',{'id':'gallery'})
        images=gallery.find_all("a")
        for i in images:
            url=self.kwejk+i['href']
            x=urllib.request.urlopen(url)
            soup=BeautifulSoup(x)
            largepic=soup.find('div',{"id":"largepic"})
            image=largepic.img['src']
            self.imageslist.append(image)
            del soup

Na kwejku odnośniki do kolejnych zdjęć galerii są w divie od id gallery dlatego gallery=self.soup.find('div',{'id':'gallery'}) Linki to , więc szukamy wszsytkich właśnie w divie z odnośnikami. find_all tworzy nam listę, przez którą można iterować pętlą. Na każdym tagu m wykonywane są działania w pętli. [code=python] url=self.kwejk+i['href'][/code]

Urle w galerii są zapisane /galeria/coś_tam/blablabla, zamiast http://kwejk.pl/glaeria/...... więc trzeba dodać właśnie to http://kwejk.pl do atrybutu href danego a. Potem otwieramy stronę, tworzymy z niej obiekt BeautifulSoup i pobieramy link do dużego obrazka. self.view() tworzy plik html z listy linków do dużych obrazków.

tak wygląda wynik - https://dl.dropboxusercontent.com/u/77507057/result.html

Wybrane dla Ciebie
Komentarze (2)