Pythonowe życioumilacze #1 Galerie z kwejka
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