を使うのに、今一度
で使い方を整理する。
前回
注意
参照文献はかなり古い(2019年)ため、現在のバージョンでは動作しない関数などが多いとの評判がある。そこでそういった齟齬があった場合は随時コメントする。なお筆者の環境は、
アプリケーション | バージョン |
---|---|
である。
2. Juliaによるデータエンジニアリング
2.2 効率的なインメモリストリームをつくる
############################## ### IOBufferを使った実装例 ### ############################## # 文字列を受け取り、2つの部分文字列に分ける function splitstring(s::AbstractString) bufs = [IOBuffer() for i in 1:2] idx = 1 for c in s write(bufs[idx], c) idx = 3- idx end @.String(take!(bufs)) end s = join('1':'9', "-") splitstring(s)
2.2.1 IOBuffer
のインスタンスは読み書きと追記が簡単にできるストリームをメモリ上に構築する。通常のストリームのように扱えるのが最大のメリットである。
!は
オブジェクトの中身を配列として取り出し、バッファをリセットする。
2.3 インターネットからデータを取得する
からインターネットでデータを首都屈指、
ページの情報を抽出する。
ここではサンプルとしてプロジェクトからスターの数を取得する(つもりだったが、恐らく
が変わったのか、上手く取得できていないので、オリジナルからコードを少し変えています)。
#################################### ### Internetからデータを取得する ### #################################### using HTTP, Gumbo, Cascadia r = HTTP.get("https://github.com/JuliaWeb"); h = Gumbo.parsehtml(String(r.body)); # qs = HTMLElement[] # Cascadia.matchAllInto(sel"h3 .d-inline-block", h.root,qs); qs = Cascadia.eachmatch(Selector("body"),h.root) #names_links = Tuple{String,String}[] for q in qs name = strip(nodeText(q)) println(name) #link = q.attributes["ihref"] #push!(names_links, (name, link)) end
2.3.1 Pythonを呼び出して同じことをしてみる
############################## ### Pythonを呼び出して使う ### ############################## using PyCall using Conda Conda.add("scrapy") ssel = pyimport("scrapy.selector") s = ssel.Selector(text = page_body) elems = s.xpath("//a[@itemprop='name codeRepository']") strip(elems[1].xpath("text()")[1].extract()) strip(elems[2].xpath("text()")[1].extract()) a = elems[2].xpath("@href")[1].extract() println(a)