質問: 私はSwiftでサイトのHTMLを取得し、Stringにして出力するところまでできたのですが、そこから要素を取り出す方法がわかりません。 例えばAppleのホームページを指定したら「オールスクリーンのデザイン。iPhoneで最も長いバッテリー駆動時間。」などの要素を取得したいです。 つまりHTMLから不要な情報を削除するということです。 おそらく<>の中を削除するというようにすればいいのだと思うのですが、やり方を調べてもヒットしませんでした。 わかる方がいらっしゃったら教えてください。 追記:やはりパーサーを使うべきでしょうか ※初投稿でよくわかっていないので、やり方が違っても教えてください
回答: 取得したHTMLソースから表示されるテキストを文字列として取得したいのであれば、`AttributedString`を使う方法があります。 以下は、OS X 10.14.4 & Xcode 10.2 の`playground`で動作する例です。 ``` import Cocoa let html = """ test title This is a test This is a test two """ if let htmlData = html.data(using: String.Encoding.utf8) { do { if let attributedHTMLStr: NSAttributedString = try NSAttributedString(data: htmlData, options: [NSAttributedString.DocumentReadingOptionKey.documentType : NSAttributedString.DocumentType.html], documentAttributes: nil) { print(attributedHTMLStr.string) // attributedHTMLStr.string が、取得したいテキスト要素 } } catch let (error) { print(error.localizedDescription) // 例外が起きたとき、その例外の内容を表示するためのprint文 } } ``` `AttributedString`クラスのインスタンスのプレーンテキストを参照する`string`というプロパティで取得出来ますので、 今回は`NSAttributedString`のインスタンスは`attributedHTMLStr`ですので、 `let str: String = attributedHTMLStr.string` で変数`str`に`html`ソースからタグや図を取り除いた文字列が得られます。