【发布时间】:2018-06-10 16:36:09
【问题描述】:
我想从 HTML 中获取键值。 目前使用 swift soup 按索引获取元素。 如果网站元素索引发生变化,我将无法获取该值。 想根据键检索值 下面是示例 HTML:
<table class="Tbl"><tbody><tr><td colspan="4" style="background-color:#D49F3E"><div class="Val" style="text-align:center;color:#540000">Saturday, December 30, 2017</div></td></tr><tr><td style="width:18%"><div class="Key">Sunrise:</div></td><td style="width:32%"><div class="Val">06:30</div></td><td style="width:18%"><div class="Key">Sunset:</div> </td><td style="width:32%"><div class="Val">17:52</div></td></tr>
我现在的密码是
do{
let htmlContent = html
do{
let doc = try SwiftSoup.parse(htmlContent as String)
do{
let element = try doc.select("[class=Val]").array()
do{
let today = try element[0].text()
let Sunrise = try element[1].text()
print(today)
print(Sunrise)
}catch{
}
}catch{
}
}catch{
}
}
请教如何通过钥匙获取阀门
EDIT-1: 试图申请。在代码下方并出现错误。有什么建议吗?
let data = try? Data(contentsOf: url! as URL)
let html = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)!
do{
let html1: String = html as String
let els: Elements = try SwiftSoup.parse(html1).getElementsByClass("Tbl")
for keyVal: Element in els.array(){
let keyValText: String = try keyVal.text()
print(keyValText)
let components = keyValText
.components(separatedBy: .newlines)
.filter{
!$0.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
}
if let index = components.index(where: {$0.contains(find: "Sunrise")}){
let sunriseTest = components[components.index(after: index)] //Error : Thread 1: Fatal error: Index out of range
print("sunriseTest: ", sunriseTest)
}else{
}
}
}catch Exception.Error(let type, let message){
print(message)
}catch{
print("error")
}
【问题讨论】:
-
你可以将你的 html 转换为字符串
"Saturday, December 30, 2017\nSunrise:\n06:30\nSunset:\n17:52\n"并得到由 newLines 分隔的组件 -
您能否发布一个示例,说明“索引更改”时您的 html 字符串的外观?
-
示例 html,如果索引更改
<table class="Tbl"><tbody><tr><td colspan="4" style="background-color:#D49F3E"><div class="Val" style="text-align:center;color:#540000">Saturday, December 30, 2017</div></td></tr><tr><td style="width:18%"><div class="Key">Sunrise:</div></td><td style="width:32%"><div class="Val">06:30</div></td><td style="width:18%"><div class="Key">&nbsp;</div></td><td style="width:32%"><div class="Val">&nbsp;</div></td><td style="width:18%"><div class="Key">Sunset:</div> </td><td style="width:32%"><div class="Val">17:52</div></td></tr>