Jak importovat a parsovat data z webu do tabulky v Google Docs

Tabulkový program v Google Docs má trojici zajímavých funkcí, které vám umožní velice jednoduše importovat data z webových stránek a XML feedů. Pro zpracování dat z webu nemusíte tedy nic programovat, stačí si rozumět s webovým tabulkovým programem.

Reklama

Není to žádná novinka, nicméně já se o funkcích pro import dat z webových stránek do tabulek v Google Docs dozvěděl až nedávno (nebo jsem na ně spíše od doby jejich uvedení zapomněl). Předpokládám, že takových nás bude víc, proto přijměte malou připomínku těchto funkcí.

Import tabulek a seznamů do Google Docs – kurzy měn z webu ČNB

Základní funkcí pro získávání dat z webových stránek je ImportHTML(). Stejně jako všechny další funkce ji v tabulkách Google Docs použijete tak, že do prázdné buňky napíšete =ImportHTML(). Do závorky přitom uvedete argumenty této funkce.

ImportHTML() očekává specifikaci tří argumentů oddělených středníkem. Jako první je potřeba zadat URL adresu, ze které chcete data vytáhnout. Druhým argumentem pak je selektor, určující prvek na stránce, jehož data chcete do tabulky načíst. A konečně poslední argument je číslo udávající pořadí daného prvku na stránce, pokud se jich tam nachází více.

Jako druhý argument pro funkci ImportHTML() můžete použít výraz table nebo list. První slouží pro zpracování tabulek (HTML značka <table>) na stránce, druhý prochází seznamy (v HTML <ul> nebo <ol>).

Ukážeme si to na praktickém příkladu. Na webu České národní banky je k dispozici vždy aktuální kurz měn. HTML tabulek je ve struktuře stránky více, ta s kurzy měn je druhá v pořadí. Příslušná část webové stránky vypadá takto:

Web ČNB

Známe tedy adresu, víme, co z ní chceme získat a víme, kolikátá tabulka na stránce kurzy měny jsou. Otevřete si tedy Google Docs a vyberte vytvoření nového sešitu s tabulkou. Do buňky A1 pak zadejte následující:

=ImportHTML("http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.jsp";"table";2)

Po chviličce zpracovávání by se vám tabulka z ČNB měla přenést do Google Docs, kde se ní můžete dále běžným způsobem pracovat.

Import kurzů měn do Google Docs

Import XML a parsování webové stránky

Funkce ImportHTML() je určena pouze pro zpracování tabulek a seznamů na stránce. Jestliže chcete provést nějaké pokročilejší zpracování dat ze zadané adresy, budete potřebovat funkci ImportXML(). Ta používá dva argumenty. První je opět URL adresa zdroje, který chcete zpracovat, druhý pak specifikace elementu v syntaxi XPath.

Řekněme, že chceme do tabulky v Google Docs načíst všechny položky z nějakého feedu pro Zboží.cz. Pak by zápis funkce ImportXML() vypadal nějak takto:

=ImportXML("http://www.melvil.cz/zbozi.xml";"//SHOP/SHOPITEM")

Do tabulky se vám vloží veškeré údaje z daného feedu, přičemž na každém řádku bude kompletní informace o jednom nabízeném produktu v daném eshopu.

Import ceníku do Google Docs

Pokud by nás zajímaly pouze názvy produktů, zjistíme, jak XML vypadá a budeme vědět, že stačí selektor XPath upravit následovně:

=ImportXML("http://www.melvil.cz/zbozi.xml";"//SHOP/SHOPITEM/PRODUCT")

Takto můžeme jednotlivé sloupce tabulky naplnit jen daty která nás zajímají a rázem získáme kompletní ceník pro daný eshop, aniž bychom museli programovat nějakou novou exportní funkci.

Co je ovšem důležité, funkci ImportXML() lze použít i pro zpracování dat z nějaké běžné webové stránky. Představme si, že budeme chtít získat seznam názvů článků, které se nacházejí na titulní straně Maxiorla:

=Importxml("http://www.maxiorel.cz/";"//div[contains(@class, 'node')]/h2")

Poznámka: //h2 v XPath by nestačilo, protože na stránce mohou být další nadpisy H2, proto tedy procházíme selektorem všechny DIVy obsahující v atributu class výraz node a následně všechny v nich zanořené H2.

Podobně můžete parsovat i výsledky ve vyhledávači. Například získání odkazů na stránky, kde je použit výraz Jan Polzer by zápis vypadal takto (při parsování výsledků na Seznam.cz):

=Importxml("http://search.seznam.cz/?q=Jan+Polzer";"//h3/a/@href")

Funkce ImportXML() i ImportHTML() můžete v rámci jednoho tabulkového dokumentu použít maximálně 50x. I to ale myslím stačí na zajímavé využití dat na webu ve vašich tabulkách. Data vystupující z těchto funkcí můžete samozřejmě začlenit do dalších funkcí, které Google Docs podporuje.

Vyzkoušet můžete také funkci ImportFeed(), která slouží pro zpracování dat z RSS kanálu. Kompletní přehled funkcí, které Google Docs u tabulek podporuje, najdete v dokumentaci.

Reklama

Komentáře

Na Seznamu dotaz xpath nefunguje a nejde vyzobnout žádná data.

No, pravda, koukám. Seznam totiž od doby, kdy byl tento článek napsán, změnil vizuál výsledků hledání z původního seznamu odkazů pod sebou do podoby dlaždic. Tím došlo také ke změně HTML kódu výsledků hledání. Když si v příkazu upravíte část s XPath, tak vám to zase bude fungovat.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Jak upravit ten xPath pro nový Seznam? Dneska jsem si s tím hrál, ale nedaří se mi výsledky načíst. Vám to jede?

Tak jsem na to koukal a obávám se, že to nepůjde. Zkuste si seznam načíst bez JavaScriptu. Místo výsledků hledání zobrazí jen hlášku, že je potřeba mít zapnutý JS. To samozřejmě funkce ImportXML nemá, takže proto nefunguje, ať už s xPath kouzlíte jakkoli. Jestli má někdo nějaké řešení, sem s ním.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Právě že je to zvláštní. Strávil jsem nad tím několik večerů. Když si zobrazím výsledky Seznamu bez JS, tak se mi normálně vypíší. I když si stránku stáhnu třeba přes curl. Takže v JS by podle mě problém být neměl. Spíš jestli nemá seznam nějakou zmatenou syntaxi stránky, že by se v tom ImportXML nevyznal. Nebo nevíte, nemá ImportXML nějaké omezení na velikost zpracovávaného kódu? Jestli není kód moc dlouhý, že by tam k těm výsledkům nedošel...

Divné, je fakt, že curl to stahuje v pořádku.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Šlo by to použít i na ISIR? Tohle se snažím načíst, ale zatím bez úspěchu. Je tam zřejmě nějaké omezení nebo špatně zadávám Xpath. https://isir.justice.cz:8443/isir_ws/services/IsirPub001/getIsirPub001?C...

Řešil jste prosím někdo automatický update XML pro import do google tabulek?
Stále se mi ukazuje stará verze importu.

Přidat komentář