Scrapping stránek prakticky: Dívka dne na TN.cz



Podobné dokumenty
IB111 Úvod do programování skrze Python Přednáška 7

MODERNÍ WEB SNADNO A RYCHLE

Psaní jednoduchých programů (2. přednáška) F F U K. Jonathan L. Verner. Department of Logic

Programování v Pythonu

Raspberry Pi - security system

Standardní algoritmy vyhledávací.

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Konečný automat. Jan Kybic.

Django, 2. cvičení url, views, templates. Úvod

Kámen-nůžky-papír. Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické

17. července :51 z moravec@yahoo.com

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Rozklad na prvočinitele. 3. prosince 2010

Automatické testování softwaru. Testujte svůj kód! Předpoklady: Příklad: sum_digits() Možnost 1: Zkusíme funkci použít v konzoli Pythonu.

Chyby a výjimky. Chyba. Odkud se chyby berou? Kdo chyby opravuje? Co můžete dělat jako programátor? Dvě hlavní metody práce s chybami.

Vlákna a internetové protokoly

Dokument rozchození vývojového prostředí

Tvorba fotogalerie v HTML str.1

TNPW1 Cvičení aneta.bartuskova@uhk.cz

KTE / ZPE Informační technologie


ANOTACE vytvořených/inovovaných materiálů

Django. Webový framework pro Python Projekt = webová stránka Aplikace = určitá funkcionalita webu

Úvod do programování - Java. Cvičení č.4

Kámen-nůžky-papír. Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické

Specifikace reklamních formátů HTML 5 pro nasazení do ibillboard Ad Server Verze 2/2015

CSS Stylování stránek. Zpracoval: Petr Lasák

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Tvorba WWW stránek. přehled technologií používaných na webu principy jednotlivých technologií a možnosti jejich vzájemného kombinování

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

IE1 jazyk HTML a kaskádové styly

HTML - pokračování. Co už víme?

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

Programování v Pythonu

IE1 jazyk HTML a kaskádové styly

6 Příkazy řízení toku

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Název: VY_32_INOVACE_PG4102 Základní HTML značky. Autor: Mgr. Tomáš Javorský. Datum vytvoření: 05 / Ročník: 3

BASH. Kouzla s příkazovou řádkou. Petr Koloros

PHP tutoriál (základy PHP snadno a rychle)

2. lekce Algoritmus, cyklus Miroslav Jílek

Vector datový kontejner v C++.

Regulární výrazy. Vzory

Obsah. Úvodem 9. Kapitola 1 Než začneme 11. Kapitola 2 Dynamické zobrazování obsahu 25. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10

Střední odborná škola a Střední odborné učiliště, Hořovice

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Úvod do programovacího jazyka Python

Řídicí struktury. alg3 1

Python profesionálně: dynamické parametry, generátory, lambda funkce... with. Dynamické parametry

Informatika pro moderní fyziky (8) Javascript, CSS - stylování dokumentů, SVG - tvorba obrázků, složitější interaktivní dokument

(X)HTML, CSS a jquery

Strojový kód, assembler, emulátor počítača

NPRG030 Programování I, 2017/18 1 / :22:16

Úvod do programovacího jazyka Python

Algoritmizace a programování

Z. Kotala, P. Toman: Java ( Obsah )

Specifikace ASYMBO XML feedu

HTML - Úvod. Zpracoval: Petr Lasák

Instalace certifikátu

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.

Algoritmizace a programování

Část 1 Moderní JavaScript

Spojový seznam. Jan Kybic.

Kontakty Upravení kontaktu - změna údájů Přidání fotky ke kontaktu Založení nového kontaktu Kopírování ze SIM karty do telefonu Základní nastavení

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Základní nastavení telefonu Vložení SIM karty a baterky Vložení paměťové karty Zapnutí telefonu a PIN Kontakty Založení nového kontaktu Upravení

Objektově orientované programování v jazyce Python

Internet cvičení. ZS 2009/10, Cvičení 3., Tomáš Pop. DISTRIBUTED SYSTEMS RESEARCH GROUP

3. Řízení běhu programu

WNC::WebNucleatCreator

Funkční objekty v C++.

Třídění a vyhledávání Searching and sorting

Kontakty Upravení kontaktu - změna údajů Přidání fotky ke kontaktu Založení nového kontaktu Kopírování ze SIM karty do telefonu Základní nastavení

Drupal. Svobodný redakční systém. duben 2007 Jakub Suchý 1

Obsah. Začínáme programovat v Ruby on Rails 9. Úvod Vítejte v Ruby 15. O autorovi 9 Poděkování 9

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Obsah. O auto ro vi 13 V ěnování 14 Poděkování 15 Z p ětn á vazba od čtenářů 16. P rogram ování pro M in ecraft v Jávě 17

Funkce - opakování. Funkce může přijímat parametry na vstupu a může vracet parametry na výstupu.

[APLIKACE PRO PŘEHRÁVÁNÍ VIDEA - PROJEKT MIAMI]

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Návod na provedení upgrade IS Harmonik

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Příručka pro editaci kontaktů na eagri

Kurz Databáze. Přechod na SQL server. Obsah. Vytvoření databáze. Lektor: Doc. Ing. Radim Farana, CSc.

Objektově orientované programování v jazyce Python

Přednáška 3. Rekurze 1

Programujeme v softwaru Statistica - příklady

DUM 14 téma: Interakce s uživatelem

Hranová konzistence. Arc consistency AC. Nejprve se zabýváme binárními CSP. podmínka odpovídá hraně v grafu podmínek

Obsah. Úvod 11. Moodle 11 Zaměření vzorového e-learningového kurzu 12 Komu je kniha určena 13 Struktura knihy 14 Opravy a návrhy 15 Poděkování 15

Programování v Pythonu

Knihovna XmlLib TXV druhé vydání říjen 2012 změny vyhrazeny

Návod pro práci s SPSS

Obsah. O autorech 9 Earle Castledine 9 Myles Eftos 9 Max Wheeler 9 Odborný korektor 10. Předmluva 11 Komu je kniha určena 12 Co se v knize dočtete 12

Programování v Pythonu

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Programování v jazyce JavaScript

Transkript:

Scrapping stránek prakticky: Dívka dne na TN.cz Obsah Scrapping stránek prakticky: Dívka dne na TN.cz...1 Praktický příklad scrapping-u v Python-u...1 Analýza galerie Dívky dne...2 Krok 1: zjištění URL adres všech stránek s galeriemi...2 Krok 2: získání jednotlivých obrázků z galerie...2 Závěrem anebo naco je to vůbec dobrý?...3 Appendix A: Zdrojový kód scrapper.py...3 Kdo se alespoň trochu zajímá o webové dění, tvoření MFA stránek a podobných neužitečnostech, tak jste určitě o scrappingu stránek slyšeli. Jedná se o dolování (mining) pro nás užitečných informací z již existujících stránek. Samozřejmě, někdy se jedná o hotovou vědu, hlavně když jsou potřebné informace uložené v dost prasáckém nestrukturovaném složení.ale my jsme šikovní kluci od bobří řeky a na všechno máme odpověď. Praktický příklad scrapping-u v Python-u V tomto článku si ukážeme, jak prakticky provádět scrapping v Python-u. Vše co k tomu budeme potřebovat je defaultní instalace Python a mou oblíbenou parsovací knihovnu BeautifulSoup, na prvotní analýzu HTML kódu Firefox s pluginem Firebug. Úkol zní jasně: vybrakovat všechny obrázky Dívek dne ze stránky TN.cz. Illustration 1: Příklad galerie dívky dne na TN.cz

Analýza galerie Dívky dne Ještě prvně než se pustíme do psaní kódu si stránku pořádně prohlídneme a zanalyzujeme. Přikládám screenshot z obrazovky galerie (červeným je to co nás bude zajímat): Illustration 2: Analýza galerie Dívky dne na TN.cz Číslami jsou označeny odkazy (v HTML kódu je to tag A) na konkrétní galerií. Na každé stránce je pět odkazů na samostatné galerie, pro dalších pět musíme kliknout na link další. Stránek je celkem 30 co je zhruba 150 galerií a v každé z nich 6 obrázků. Krok 1: zjištění URL adres všech stránek s galeriemi V prvním kroku si zjistíme všechny URL adresy kde se nachází galerie. Začneme tedy od nejnovější galerie, zjistíme všech 5 odkazů na jednotlivé galerie a pak následujeme link označen další a postup opakujeme. Konec prolézání zjistíme, ak žádný link s anchor textem další se na stránce nenachází. Výňatek kódu v Pythone, který používa BeautifulSoup na rozparsování odkazu další : soup.find('div', {'class':'main_page_navigator_navigation'}).find( lambda tag: tag.name == 'a' and tag.contents[0] == u'další') V skratke: najdeme tag <div class= main_page_navigator_navigation > a v něm tag a, který obsahuje text další (všimněte si, že do funkce find() můžeme dát jak název tagu který hledáme nebo rovnou funkci). Další částí skládanky je rozparsování všech odkazů na galerie (na obrázku 2 označená číslicemi 1 až 5): soup.find( 'ul', {'class':'galery_2'} ).findall(lambda tag: tag.name == 'a' and u'dívka dne' in tag.contents[0] ) Táhle část kódu nám vráti všechny odkazy na galerie, samotný odkaz uloží BeautifulSoup v atributu href.

Krok 2: získání jednotlivých obrázků z galerie Takže máme všechny URL na jednotlivé galerie, nyní nám už chybí jenom samotné rozparsování galerie a získání všech obrázků. Není nic jednoduššího: soup.find('div', {'id':'red_section_girl_of_the_day_photogallery'}).findall('img') Tenhle kód nám z tagu <div id= red_section_girl_of_the_day_photogallery > vrátí všechny obrázky. Samotný odkaz na obrázek je pochopitelně v atributu src. Závěrem anebo naco je to vůbec dobrý? Zde představený příklad představuje standardní postup v scrapování běžné stránky: rozparsovat jednotlivé podstránky a z podstránek získat potřebné informace ( v případě dívky dne na TN.cz obrázky nahých slečen). Na co je scrapování dobrý? V prvním řadě na získání informací ke vlastnímu, leckdy nekalému prospěchu (můžeme si scrapper dát do cronu, spojit z databází a postavit si vlastní zdroj RSS z jakékoliv stránky, získávat data na vlastní MFA weby, možnosti jsou neomezené, záleží jenom na fantazií). Python se svou bohatou standardní knihovnou a rozšířením BeautifulSoup značně ulehčuje práci a programování scrapera bývá i často zábava... V příštích dílech si můžeme něco povykládat o báječném rozšíření Pythonu processing a jak nám může řádově zrychlyt scrapování a využít naplno síťovou linku a naše zahálející multijádrové procesory. Appendix A: Zdrojový kód scrapper.py -*- coding: utf-8 -*- Příklad skrapování obsahu "for fun & profit" ;-) Skrapování odkazů na všechny fotky Dívek dne ze serveru TN.cz Pro víc skvělých příkladů navštivte http://www.kiwwisk.cz Pozor! Pouze pro edukativní účely, kopírování obsahu bez svolení majitele je trestné. import urllib2 from BeautifulSoup import BeautifulSoup from time import sleep def get_beautiful_soup( url, pocet_opakovani = 5 ): get_beautiful_soup( url, pocet_opakovani ) Vrati BeautifulSoup objekt ze zadane adresy (url),

kdyz z nejakeho duvodu funkce urlopen() selze, zaspi na 1 s a opakuje ji pocet_opakovani krat while True: try: stream = None stream = urllib2.urlopen( url ) soup = BeautifulSoup( stream.read() ) return soup except urllib2.urlerror: pocet_opakovani -= 1 if pocet_opakovani < 0: raise sleep( 1 ) finally: if stream: stream.close() def nasleduj_link_a_vrat_polivku( domain, url, funkce_s_podminkou ): nasleduj_link_a_vrat_polivku( domain, url, funkce_s_podminkou ) Iterator, kteri vraci BeautifulSoup objekt z adresy v tvaru domain+url a dale vyhleda dle funkce_s_podminkou() nasledujici link ktery navstivi a tak dale dokolecka. Kdyz funkce_s_podminkou() vrati False, cyklus konci. Funkce je vhoda na prechazeni html stranek ktere jsou nejakym zpusobem strankovane while True: soup = get_beautiful_soup( domain + url ) yield soup next_link = funkce_s_podminkou( soup ) if next_link: url = next_link['href'] continue break def vrat_mi_url_galerie( start_url ): vrati_mi_url_galerie( start_url ) Iterator, ktery generuje url galeri s divkami dne. Ocakava startovaci url <- nejlepe nejnovejsi galerii. Z teto url pak pokracuje ke starsim tak, ze nasleduje link, ktery obsahuje text 'další'

for soup in nasleduj_link_a_vrat_polivku( "http://tn.nova.cz", start_url, lambda soup: soup.find('div', {'class':'main_page_navigator_navigation'}).find(lambda tag: tag.name == 'a' and tag.contents[0] == u'další') ): galerie = soup.find( 'ul', {'class':'galery_2'} ).findall(lambda tag: tag.name == 'a' and u'dívka dne' in tag.contents[0] ) for link in galerie: yield link['href'] def vrat_mi_vsechny_obrazky( url ): vrat_mi_vsechny_obrazky( url ) Iterator, ktery postupne vrati vsechny obrazky z fotogalerie Divky dne na zadane url adese. Vrati jmeno divky, link k plnymu obrazku soup = get_beautiful_soup( url ) for img_link in soup.find('div', {'id': 'red_section_girl_of_the_day_photogallery'}).findall('img'): yield img_link['title'], img_link['src'].replace('105x156', '750x750') def main( ): for url in vrat_mi_url_galerie( "/bin/front.php?section_id=280&page=1" ): for jmeno, fotka_url in vrat_mi_vsechny_obrazky( "http://tn.nova.cz" + url ): print jmeno.encode('cp852', 'ignore'), fotka_url.encode('cp852', 'ignore') if name == " main ": main( )