Úvod do Open Refine pro webmastery a analytiky

Zdroje dat

  • URL adresa
  • Nahrání souboru: TSV, CSV, *SV, Excel (.xls and .xlsx), JSON, XML, RDF as XML, Google Data
  • Import projektu Open Refine
  • Vložením formou CTRL + V.

Problém není ani import několika souborů / URL současně. S Open Refine lze na jednom místě snadno analyzovat vaše každodenní reporty v Excelu za celý rok. A to už se vyplatí.

Jako vstupní zdroj dat používám nejčastěji soubor. V případě analýzy webu sitemap.xml, který si buď vezmu přímo z analyzovaných webových stránek. Pokud není, tak si nechám vygenerovat přes Xenu, nebo SiteMap generator

Další formou získávání vstupních dat je scraping pomocí pluginu prohlížeče Scraper: plugin pro Chrome a ručně nascrapovat výsledky vyhledávání na Google (site:seowebmaster.cz). Tak získám seznam zaindexovaných URL u webů, ikdyž nemám přístup do Google Search Console. Scraper je také užitečný pomocník pro získávání obsahu ze stránek generovaných AJAXem (Facebook, Zbozi.cz, etc.).

Nahrání tabulky z databáze

Dump databáze a export do Open Refine provádím, pokud databázi chci vyčistit, zmigrovat na jiný web, nebo získat určitá data uložená v databázi webu.

Ke stažení tabulky z SQL databáze lze použít různé nástroje pro správu databází. Praktickým nástrojem je Adminer, který stačí nahrát na webhosting webu. Po zpracování dat v Open Refine exportuju do .csv souboru a můžu opět nahrát do příslušné tabulky databáze. Bacha na závislosti a strukturu! A zálohovat, zálohovat, zálohovat :).

Analýza webu: H1, title, descriptions

Uvažujme případ, že bych chtěl mít přehled o nadpisech, title a descriptions na webu SEOwebmaster.cz. Jako první skočím po sitemap.xml. V Refine dám založit nový projekt načtením výše uvedeného sitemap.xml z URL. Následně vymezím oblast importu dat z XML na tag <loc>. První sloupec s názvem loc je seznamem všech URL obsažených v mapě webu pro vyhledávače.

Od sloupce loc vytvořím nový sloupec: Edit Columm > Add column by fetching URLs... Sloupce nazvu HTML, protože to bude zdrojový kód dané URL. Pak nastává čekání, než se data stáhnou. Když už mám vytvořený a hlavně plný sloupec HTML, tak můžu vytvořit další sloupec formou: Add column based on this columns. Název sloupce budiž H1. Zadám GREL výraz value.parseHtml().select("h1")[0].htmlText(). Právě vznikl sloupec s nadpisy H1 na webu SEOwebmaster.cz. Z HTML budu nadále čerpat další data. Obdobně vytvořím sloupec title, descriptions, vyberu si zajímavý odstavec (např. anotace). Tím jsem získal základní data pro obsahovou analýzu a cenné podklady pro analýzu klíčových slov.

Záznam a řádek

Open Refine umí zpracovávat data po řádcích (rows) a záznamech (records). Jeden záznam může mít n-řádků. Každý řádek jde filtrovat a upravovat jednotlivě v režimu řádky. Pokud je řádek součástí záznamu, tak se v režimu záznam zobrazí při stejném nastavení filtrů i ostatní řádky, které jsou v daném záznamu.

Příkladem využití záznamu je produkt, který má více variant a tak je rozepsán na více řádků. Například produkt LIEBHERR CP 4023 muže mít stejný kód, ale index -20, nebo -21. Jednotlivé indexy hrají roli v označení energetických štítků, jelikož se téměř každým indexem zvyšuje úspornost. Data v řádcích jsou tedy částečně rozdílná, ale mají společný jmenovatel: je to stále stejný produkt. Sloupec produkt bude pro mě klíčem k záznamu, přesunu ho na 1 místo a v menu sloupce zvolím Sort a nechám sloupec seřadit dle abecedy. Následně se mi vedle počítadla počtu stránek zobrazí fltr "Sort". Zvolím možnost "Reorder rows pernamently". Teď by všechny produkty s názvem LIEBHERR CP 4023 měly být u sebe. Nyní vytvořím záznam. V menu sloupce zvolím Edit cells > Blank down. Nyní mi vznikl záznam. Můžu přepnout na práci se záznamy a vidět všechna data různých indexů LIEBHERR CP 4023 v jednom filtru.

Stejný způsob, jako při vytváření záznamu, lze využít pro odstranění duplicit. Pouze nepřepnu na záznam, ale zůstanu v režimu řádky. Pak nastavím na sloupec produkt filtr: Facet > Customized facets > Facet by blank. Vyfiltruju prázdné řádky a ty odstraním.

Záznam se hodí, ikdyž chci přidat nové řádky. Do posledního řádku ruční editací přidám několik čárek, např. 5.: , , , , ,. U sloupce zvolím možnost Edit cells >> Split multi-valued cells. Za rozlišující znak pro rozdělení řádku označím výše uvedenou čárku. Zapsal jsem 5 čárek, mám tedy 5 nových řádků.

Podobně postupuju, když chci data dostat do jednoho řádku, ale v tomto případě začínám u záznamu a postupuju Edit cells >>Join multi-valued cells. Data mám teď v jednom řádku, tak si je snadno můžu přeimportovat do jiné tabulky.

Podrobnosti najdete na Wiki pod heslem Variables.

Taháky pro GREL v Open Refine

GREL Popis
value.parseHtml().select("meta[name=description]")[0].htmlAttr("content") Zobrazí meta descriptions URL
value.parseHtml().select("h1")[0].htmlText() Zobrazí nadpis H1
value.parseHtml().select("div.Vyber")[0].htmlText() Vybere obsah div s třídou Vyber ( class="Vyber")
value.split("Barva:")[1] Zobrazí řetězec za slovem "Barva:"
value.split("/")[5] Zobrazí řetězec za 5tým lomítkem
value.parseHtml().select("img")[0].htmlAttr("src") Zobrazí zdrojovou URL 1. obrázku
cells["SloupecZeKterehoChciZkopirovatData"].value Vloží data ze sloupce SloupecZeKterehoChciZkopirovatData
cell.cross("ZdrojovaTabulka","Klic").cells["NovySloupec"].value[1] Nový sloupec od sloupce Klic, který přidá sloupec NovySloupec z tabulky ZdrojovaTabulka, která obsahuje taktéž sloupec Klic
value.replace('CoChciNahradit','CimToChciNahradit ') Nahradí text CoChciNahradit za text CimToChciNahradit
facetCount(value, "value", "Srovnej") Počet shod hodnot se sloupcem Srovnej.
value.splitByLengths(2)[0] Zkrátní řetězec na první dva znaky
value.replace(cells['Duplicita'].value,'').trim() Odstraní řetězec obsažený ve sloupci Duplicita
replace(value,/<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)\/?>/,'') Odstraní všechny HTML tagy (javascript a CSS zůstane)
value.escape('javascript') Zobrazí mezery z JavaScriptu (využítí např. při čištění sloupce s klíčem)
value.replace("Kč","").replace(",",".")
.escape('javascript').replace("\\u00A","").toNumber()
Změním sloupec Tržby s hodnotami v Kč (např. export z Google Analytics) do číselné hodnoty
value.replace("\n","") Odstraní zalomení řádků.
toString(toDate(value),"dd/MM/yyyy") Zobrazí datum ve formátu Den/Měsíc/Rok
round(value) Zaokrouhlí na celá čísla.
cells["Cena s DPH"].value - (cells["Cena s DPH"].value * 0.21)

value-(value * 0.21)
Načte data ze sloupce Cena s DPH a odečte daň 21%
To stejné, ale v rámci stejného sloupce.
partition(value, "Vyznamný text")[0] Rozdělí hodnotu dle výskytu slova Významný text a vybere první řetězec před prvním objevením této fráze [0], další blok je [1], atd...
row.index Přidá číslo řádku jako hodnotu.

Více informací najdete na Wiki projektu Open Refine.