質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

486閲覧

swift 'HTMLDocument' cannot be constructed because it has no accessible initializers のエラー

globalplus

総合スコア119

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/03/20 06:00

編集2019/03/20 06:01

あるサイトからKannaを使ってスクレイピングしてデータ収集をしようとしています。
しかし。下記のコードの中で**'HTMLDocument' cannot be constructed because it has no accessible initializers**というエラーが出現し困っております。
解決策ご存知の方、教えていただければ嬉しいです。よろしくお願いします。

swift

1import UIKit 2import Kanna 3 4class event 5{ 6 var name = "" 7 var importance = "" 8 var range: Double = 0 9 var previous_rate: Double = 0 10 var expectation: Double = 0 11 var result: Double = 0 12} 13 14class FirstViewController: UIViewController { 15 16 /// 今日のデータArray 17 var todayData: [event] = [] 18 19 var activityindicator = UIActivityIndicatorView() 20 21 @IBOutlet weak var update_button: UIButton! 22 @IBOutlet weak var textView: UITextView! 23 24 override func viewDidLoad() { 25 super.viewDidLoad() 26 } 27 28 #更新ボタン 29 @IBAction func buttonTapped(_ sender: Any) 30 { 31 self.excute() 32 } 33 34 func excute() 35 { 36 self.activityindicator.startAnimating() 37 38 let group = DispatchGroup() 39 let queue1 = DispatchQueue(label: "hoge.fuga.queue1") 40 41 // キューとグループを紐付ける 42 queue1.async(group: group) 43 { 44 // 今日 45 guard let url = URL(string: "ユーアールエル") else 46 { 47 fatalError("Error: URL") 48 } 49 let data = self.getHtml(url: url) 50 self.todayData = self.parseHtml(name: "today", data: data) 51 } 52 // タスクが全て完了したらメインスレッド上で処理を実行する 53 group.notify(queue: DispatchQueue.main) 54 { 55 // 編集してUITextViewに表示 56 var s = "" 57 for e in self.todayData 58 { 59 s += e.name + "-" + e.importance + "I: " + String(e.range) + "R: " + String(e.previous_rate) + "PR: " + String(e.expectation) + "E: " 60 + String(e.result) + "Re: " 61 } 62 self.textView.text = s 63 self.activityindicator.stopAnimating() 64 } 65 66 } 67 /// HTML取得 68 func getHtml(url: URL) -> Data { 69 do { 70 return try Data(contentsOf: url) 71 } catch { 72 fatalError("fail to download") 73 } 74 } 75 /// スクレイピング 76 func parseHtml(name: String, data: Data) -> [event] { 77 // KannaでHTMLDocumentを生成 78     //ここにエラー、'HTMLDocument' cannot be constructed because it has no accessible initializersが出ます。 79 guard let doc = try! HTMLDocument(html: data, encoding: String.Encoding.utf8) else 80 { 81 fatalError("Error: HTML") 82 } 83 var retData: [event] = [] 84 // HTMLの<table>の時刻の列を基準にLoopし、該当行の気温の列をKannaでスクレイピング 85 for i in (1...24) { 86 let node = doc.xpath("//*[@id='tbl_list']//tr[td[1][text()='(i)']]/td[2]") 87 if let nodeFirst = node.first, let content = nodeFirst.content, let value = Double(content) { 88 // 値が入っている場合のみ取得 89 let e = event() 90 e.name = String() 91 e.importance = value 92 e.range = value 93 e.previous_rate = value 94 e.expectation = value 95 e.result = value 96 retData.append(e) 97 } 98 } 99 return retData 100 } 101 102} 103 104

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2019/03/20 08:06

使い方を見ると、HTML()でインスタンス生成するのでは? https://github.com/tid-kijyun/Kanna HTMLDocumentだとエラーの通りそんな方に初期化できんということなのでは?
guest

回答1

0

ベストアンサー

google翻訳
'HTMLDocument' アクセス可能な初期化子がないため、構築できません

投稿2019/03/20 09:26

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問