knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "man/figures/README-", out.width = "100%" )
Smyslem balíčku csfd je umožnit novinářům a akademickým pracovníkům skrejpování veřejně přístupných dat z Česko-Slovenské filmové databáze (ČSFD). Balíček není oficiálním produktem ČSFD a není určen ke komerčnímu využití. Pokud někdy v budoucnu ČSFD uvede do provozu standardní webovou API (po vzoru IMDB), bude balíček deprekován.
# install.packages("devtools") devtools::install_github("jchrom/csfd")
Frekvence stahování je omezena na 15 požadavků za minutu, aby se zamezilo přetěžování serveru neurvalým masovým skrejpováním.
Příkazem níže získáme stránku třetí série seriálu Star Trek: Nová generace.
Adresu https://www.csfd.cz/film/69432-star-trek-nova-generace/483364-serie-3/prehled/
můžeme sice zadat celou, ale postačí i část s typem díla a číselný identifikátor
(cesty audiovizuálních děl začínají na ČSFD vždy /film
, bez ohledu na typ díla):
library(csfd) tng <- csfd_fetch("/film/483364", quiet = TRUE)
Výsledkem je objekt <csfds_scraper>
, který obsahuje zdrojový HTML kód a jednu
nebo několik funkcí, určených k seškrabání dat. V příkladu níže jsou scrapery
označeny symbolem $
.
tng
Vybraný scraper zavoláme stejně, jako když vracíme hodnotu při běžném indexování,
například použitím $
:
tng$summary
<csfds_scraper>
pozná, o jaký typ stránky se jedná, takže máte vždy k dispozici
ty správné scrapery. Občas se stane, že má vrácená tabulka nula řádků, pokud určitá
data na stránce chybí. Například tag cloud bývá na stránkách filmů/seriálů,
ale pokud nikdo dané dílo neotagoval, data budou logicky chybět.
Stažení stránky se seznamem epizod:
# Kmpletni URL. csfd_fetch("https://www.csfd.cz/film/69432-star-trek-nova-generace/epizody/") # Funguje i kratsi varianta. csfd_fetch("/film/69432/epizody/")
Stažení profilu herce:
# Text za ciselnym identifikatorem ("-patrick-stewart") neni nutny, ale ani nevadi. csfd_fetch("/tvurce/2052-patrick-stewart")
Stažení stránky s filmovými cenami. Důležitá je v tomto případě i část adresy za otazníkem, která určuje rozmezí let, v nichž bylo ocenění uděleno:
csfd_fetch("/oceneni/2-cesky-lev/?yearsSpan=2002-2011")
Stažení stránky s uživatelskými recenzemi:
csfd_fetch("/film/69432-star-trek-nova-generace/recenze/?page=2")
K vyhledávání slouží tři různé funkce:
csfd_search_titles()
csfd_search_creators()
csfd_search_ranks()
Příklad: Seznam českých seriálů od roku 1989, řazený podle průměru hodnocení.
Narozdíl od csfd_fetch()
není třeba URL stránky, ale hodnoty vybraných parametrů
(pro zobrazení nápovědy použijte příkaz ?csfd_search
).
tv_shows <- csfd_search_titles( type = "tv_show", origin = list(any = c("Česko", "Československo")), released = c(1989, 2022), sort = "rating_average" ) tv_shows$results
Vyhledání akčních filmů herečky Michelle Yeoh - číselný identifikátor pochází z URL adresy její stránky na ČSFD.
csfd_search_titles( type = c("film", "tv_film"), genre = "Akční", fields = list(actor = 1818), sort = "year_asc" )
Balíček má pěkné pokrytí stránek filmů, seriálů a podobně. Stáhnout si ale můžete libovolnou ČSFD stránku a data seškrabat po svém, a to funkcemi z balíčků rvest a xml2.
Zdrojový HTML kód lze získat přes pole html
:
tng$html
Takto získaný objekt typu <xml_document>
nepřetrvá do příšího spuštění Rka,
a nemá smysl jej ukládat na disk. Jedná se pouze o tzv. external pointer,
který po ukončení Rka už na nic neukazuje. Je ale možné uložit celý <csfd_scraper>
objekt, který uchovává HTML v podobě syrových bajtů, a v případě potřeby ho znovu
načte do paměti (takže volání tng$html
v příkladu bude fungovat vždycky).
saveRDS(tng, "tng.rds")
Případně zapsat HTML kód jako text:
xml2::write_html(tng$html, "tng.html")
Změny ve HTML struktuře stránek mohou mít za následek nesprávná nebo chybějící data. Protože je tento nástroj neoficiální a není vyvinut v součinnosti s ČSFD, není možné dopředu vědět, kdy se který HTML tag na které stránce změní.
Pokud zjistíte, že vám <csfds_scraper>
vrací nesprávná nebo chybějící data,
nahlašte to prosím zde.
csfd podléhá licenčnímu ujednání MIT.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.