Spec for defining a parser.
body() :: String.t()
opts() :: map()
page() :: %Crawler.Store.Page{ body: body(), opts: opts(), processed: term(), url: url() }
url() :: String.t()
parse(page()) :: {:ok, page()}
parse({:error, term()}) :: :ok