SSブログ

iOS上でHTMLパーサでスクレイピング [プログラミング]

ちょっとiPhoneで作りたいアプリがあったので調べた。
HTMLからスクレイピングをしたいと思っていた。

https://qiita.com/_tid_/items/c228b1931cd9b23d52d3

Kannaというもので使えるっぽい。CocoaPodsで楽できそうだけど
問題がありそうなのでCarthageで入れるのがいいのかも。

これでimgタグのURLを取ってきてファイル表示すればOKかも。
相対URLのは先のもので変換してね。

// HTML内のリンク(URL)を抜き出す
for node in doc!.css("a, link") {
    println(node["href"])  // href属性に設定されている文字列を出力
}

って書いてあったから
// HTML内のリンク(URL)を抜き出す
for node in doc!.css("img, link") {
    println(node["href"])  // href属性に設定されている文字列を出力
}

でいいのかもね。

おなじかもしれんけどこれもね。
https://qiita.com/yogita109/items/977e5c0e8d40795748d8

Alamofireとかあるらしいけど、標準で用意されているっていうんだから、それを使ったほうがいい気はする。でも、気楽に書きたい気もするなぁ。だが依存するライブラリは少ない方がいいに決まっている。



・URLを相対パスから絶対パスへ。
URL url=new URL("http://www.abc.com/aa/bb/cc/file.html");
String relativePath="../file2.html"; //maybe is "/file3.html"
new URL(url, relativePath);

これはHTMLから相対パスをスクレイピングした時に必要だな。


・URLSessionを使ってファイルを取る。

https://qiita.com/shungo_m/items/64564fd822a7558ac7b1

let url = URL(string: "https://hogehoge.hoge")!  //URLを生成
var request = URLRequest(url: url)               //Requestを生成
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in  //非同期で通信を行う
    guard let data = data else { return }
    do {
        let object = try JSONSerialization.jsonObject(with: data, options: [])  // DataをJsonに変換
        print(object)
    } catch let error {
        print(error)
    }
}
task.resume()

最後にスクレイピングするファイルを取ってきたり、スクレイピングされたURLを取ってきたりするのに使う。これが一番最初な気もするけど、まぁいいか。


まずSwiftUIで二分割したウインドウをどう連携させるかというのが必要かな。でも、正直SwiftUIに対する情報が少なすぎるというのが厳しい。

コメント(0) 
共通テーマ:パソコン・インターネット

コメント 0