Cascadia.jl

Cascadia.jlは、Julia言語からCSSセレクタを扱うためのパッケージである。ウェブスクレイピングで取得したHTMLデータの中から、条件を指定して要素を抽出することができる。

まず、Gumboを利用してHTML文字列を文書に解析する。次にCascadiaで文字列からCSSセレクタを作成し、セレクタに一致する文書内のノードを取得する。

パッケージの追加

Cascadia.jlを使用するには、Julia言語にCascadiaパッケージを追加する必要がある。

Cascadiaパッケージを追加するには、JuliaのREPLを起動して、Pkgパッケージのadd()関数を実行する。

julia> using Pkg
julia> Pkg.add("Cascadia")

Cascadia.jlは Gumbo.jl を利用するので、Gumboパッケージも追加する必要がある。

パッケージの追加は、Juliaインストール後に1度だけ行えばよい。パッケージを使うたびに追加する必要はない。

パッケージを追加せずにCascadiaを使おうとすると、次のようなエラーメッセージが出力される。

julia> using Cascadia
ERROR: ArgumentError: Package Cascadia not found in current path:
- Run `import Pkg; Pkg.add("Cascadia")` to install the Cascadia package.

Stacktrace:
 [1] require(into::Module, mod::Symbol)
   @ Base .\loading.jl:871

パッケージのロード

Cascadia パッケージを使用するためには、using キーワードで Cascadia パッケージをロードする必要がある。

julia> using Cascadia

sel

sel はCSSセレクタを作成するリテラルである。

julia> using Cascadia

julia> s = s = sel"head"
Selector(Cascadia.var"#5#6"{String}("head"))

julia> typeof(s)
Selector

Selector

Selector はCSSセレクタを作成する関数である。

julia> using Cascadia

julia> s = Selector("head")
Selector(Cascadia.var"#5#6"{String}("head"))

julia> typeof(s)
Selector

eachmatch

julia> using Gumbo

julia> doc = parsehtml("<title>Example</title>")
HTML Document:
<!DOCTYPE >
HTMLElement{:HTML}:<HTML>
  <head>
    <title>
      Example
    </title>
  </head>
  <body></body>
</HTML>

julia> using Cascadia

julia> e = eachmatch(Selector("head"), doc.root)
1-element Vector{HTMLNode}:
 HTMLElement{:head}:<head>
 <title>
  Example
 </title>
</head>

julia> typeof(e)
Vector{HTMLNode} (alias for Array{HTMLNode, 1});

参考文献

Sengupta, Avik. (2021). Algocircle / Cascadia.jl