如何使用Swift从表中的HTML类检索标签

如何使用Swift从表中的HTML类检索标签,swift,shtml,swiftsoup,Swift,Shtml,Swiftsoup,正在尝试从下面的HTML中检索:“17,02”: <div class="overflow-auto"> <table class="w-100 tl mb4 mt3 f6" cellspacing="0"> <thead> <tr> <th class="fw6 bb b--black-20 tl pb3 pr3 bg-white tl">Kvalitet

正在尝试从下面的HTML中检索:“17,02”:

<div class="overflow-auto">
    <table class="w-100 tl mb4 mt3 f6" cellspacing="0">
        <thead>
            <tr>
                <th class="fw6 bb b--black-20 tl pb3 pr3 bg-white tl">Kvalitet</th>
                <th class="fw6 bb b--black-20 tl pb3 pr3 bg-white tl">Pris inkl. mva.</th>
                <th class="fw6 bb b--black-20 tl pb3 pr3 bg-white tl">Endring</th>
                <th class="fw6 bb b--black-20 tl pb3 pr3 bg-white tl">Gjeldene fra</th>
            </tr>
        </thead>
        <tbody class="lh-copy">
            <tr>
                <td class="pv3 pr3 bb b--black-20"><img src="./assets/95 Miles.png" alt="95 Miles"></td>
                <td class="pv3 pr3 bb b--black-20">Kr 17,02</td>
                <td class="pv3 pr3 bb b--black-20">5 øre</td>
                <td class="pv3 pr3 bb b--black-20">24.08.2018</td>
            </tr>
        </tbody>
        <tbody class="lh-copy">
            <tr>
                <td class="pv3 pr3 bb b--black-20"><img src="./assets/D Miles.png" alt="D Miles"></td>
                <td class="pv3 pr3 bb b--black-20">Kr 15,80</td>
                <td class="pv3 pr3 bb b--black-20">5 øre</td>
                <td class="pv3 pr3 bb b--black-20">24.08.2018</td>
            </tr>
        </tbody>
        <tbody class="lh-copy">
            <tr>
                <td class="pv3 pr3 bb b--black-20"><img src="./assets/95 Miles Plus.png" alt="95 Miles"></td>
                <td class="pv3 pr3 bb b--black-20">Kr 18,01</td>
                <td class="pv3 pr3 bb b--black-20">5 øre</td>
                <td class="pv3 pr3 bb b--black-20">24.08.2018</td>
            </tr>
        </tbody>
        <tbody class="lh-copy">
            <tr>
                <td class="pv3 pr3 bb b--black-20"><img src="./assets/D Miles Plus.png" alt="D Miles"></td>
                <td class="pv3 pr3 bb b--black-20">Kr 16,79</td>
                <td class="pv3 pr3 bb b--black-20">5 øre</td>
                <td class="pv3 pr3 bb b--black-20">24.08.2018</td>
            </tr>
        </tbody>
    </table>
</div>

但当我试着打印出来时,我得到了零。有人有任何解决方案或想法吗?

要选择至少属于一个类的元素,请用逗号分隔这些类:

let tds: [Element] = try doc.select(".pv3, .pr3, .bb, .b--black-20")
使用此选项选择第二个
td

let doc: Document = try SwiftSoup.parse(html)
let td: Element = try doc.select("tbody tr td").array()[1]
let text: String = try td.text()
选择器“tbody tr td”查找
tbody
内部的所有
td
s。然后我们知道第二个td就是我们想要的。因此,我们将结果转换为一个数组,然后使用下标
[1]
选择该数组中的第二个元素

如果您确定只需要html文档中的第二个td,则可以缩短选择器:

let td: Element = try doc.select("td").array()[1]
如果要获取表格中以“Kr”开头的所有第二个
td
s:

如果您想要这些
td
s的文本,但不需要“Kr”:

以下是最终代码:

do {
    let html: String =  """
                        <div class="overflow-auto">
                            <table class="w-100 tl mb4 mt3 f6" cellspacing="0">
                                <thead>
                                    <tr>
                                        <th class="fw6 bb b--black-20 tl pb3 pr3 bg-white tl">Kvalitet</th>
                                        <th class="fw6 bb b--black-20 tl pb3 pr3 bg-white tl">Pris inkl. mva.</th>
                                        <th class="fw6 bb b--black-20 tl pb3 pr3 bg-white tl">Endring</th>
                                        <th class="fw6 bb b--black-20 tl pb3 pr3 bg-white tl">Gjeldene fra</th>
                                    </tr>
                                </thead>
                                <tbody class="lh-copy">
                                    <tr>
                                        <td class="pv3 pr3 bb b--black-20"><img src="./assets/95 Miles.png" alt="95 Miles"></td>
                                        <td class="pv3 pr3 bb b--black-20">Kr 17,02</td>
                                        <td class="pv3 pr3 bb b--black-20">5 øre</td>
                                        <td class="pv3 pr3 bb b--black-20">24.08.2018</td>
                                    </tr>
                                </tbody>
                                <tbody class="lh-copy">
                                    <tr>
                                        <td class="pv3 pr3 bb b--black-20"><img src="./assets/D Miles.png" alt="D Miles"></td>
                                        <td class="pv3 pr3 bb b--black-20">Kr 15,80</td>
                                        <td class="pv3 pr3 bb b--black-20">5 øre</td>
                                        <td class="pv3 pr3 bb b--black-20">24.08.2018</td>
                                    </tr>
                                </tbody>
                                <tbody class="lh-copy">
                                    <tr>
                                        <td class="pv3 pr3 bb b--black-20"><img src="./assets/95 Miles Plus.png" alt="95 Miles"></td>
                                        <td class="pv3 pr3 bb b--black-20">Kr 18,01</td>
                                        <td class="pv3 pr3 bb b--black-20">5 øre</td>
                                        <td class="pv3 pr3 bb b--black-20">24.08.2018</td>
                                    </tr>
                                </tbody>
                                <tbody class="lh-copy">
                                    <tr>
                                        <td class="pv3 pr3 bb b--black-20"><img src="./assets/D Miles Plus.png" alt="D Miles"></td>
                                        <td class="pv3 pr3 bb b--black-20">Kr 16,79</td>
                                        <td class="pv3 pr3 bb b--black-20">5 øre</td>
                                        <td class="pv3 pr3 bb b--black-20">24.08.2018</td>
                                    </tr>
                                </tbody>
                            </table>
                        </div>
                        """
    let doc: Document = try SwiftSoup.parse(html)
    let tds: [Element] = try doc.select("td").array().filter { try $0.text().starts(with: "Kr ")}
    let titlesWithoutKr: [String] = try tds.map {try String($0.text().dropFirst(3))}
    print(titlesWithoutKr)
} catch Exception.Error( _, let message) {
    print(message)
} catch {
    print("error")
}
do{
让html:String=”“”
酷瓦利泰
Pris inkl.mva。
结束
格尔德内弗拉
Kr 17,02
5øre
24.08.2018
Kr 15,80
5øre
24.08.2018
Kr 18,01
5øre
24.08.2018
Kr 16,79
5øre
24.08.2018
"""
let doc:Document=try swifsoup.parse(html)
让tds:[Element]=try doc.select(“td”).array().filter{try$0.text().start(以:“Kr”)}
让titlesWithoutKr:[String]=try tds.map{try String($0.text().dropFirst(3))}
打印(标题不带KR)
}捕获异常。错误(\ux,let消息){
打印(信息)
}抓住{
打印(“错误”)
}
并打印
[“17,02”,“15,80”,“18,01”,“16,79”]


有关如何使用SwiftSoup的更多文档,请查看。

请尝试
。选择(“td.pv3.pr3.bb.b--black-20”)
@Derek朕會功夫 试过了,但还是没什么你想要“Kr 17,02”还是“17,02”?谢谢你帮我解决这个问题,但它们都以空数组的形式返回:“[]”当我尝试打印它们时。@Shift我得到了上一个
[“17,02”,“15,80”,“18,01”,“16,79”
let tds: [Element] = try doc.select("tr td").array().filter { try $0.text().starts(with: "Kr ")}
let labels: [String] = try tds.map {try $0.text()}
let tds: [Element] = try doc.select("td").array().filter { try $0.text().starts(with: "Kr ")}
let titlesWithoutKr: [String] = try tds.map {try String($0.text().dropFirst(3))}
do {
    let html: String =  """
                        <div class="overflow-auto">
                            <table class="w-100 tl mb4 mt3 f6" cellspacing="0">
                                <thead>
                                    <tr>
                                        <th class="fw6 bb b--black-20 tl pb3 pr3 bg-white tl">Kvalitet</th>
                                        <th class="fw6 bb b--black-20 tl pb3 pr3 bg-white tl">Pris inkl. mva.</th>
                                        <th class="fw6 bb b--black-20 tl pb3 pr3 bg-white tl">Endring</th>
                                        <th class="fw6 bb b--black-20 tl pb3 pr3 bg-white tl">Gjeldene fra</th>
                                    </tr>
                                </thead>
                                <tbody class="lh-copy">
                                    <tr>
                                        <td class="pv3 pr3 bb b--black-20"><img src="./assets/95 Miles.png" alt="95 Miles"></td>
                                        <td class="pv3 pr3 bb b--black-20">Kr 17,02</td>
                                        <td class="pv3 pr3 bb b--black-20">5 øre</td>
                                        <td class="pv3 pr3 bb b--black-20">24.08.2018</td>
                                    </tr>
                                </tbody>
                                <tbody class="lh-copy">
                                    <tr>
                                        <td class="pv3 pr3 bb b--black-20"><img src="./assets/D Miles.png" alt="D Miles"></td>
                                        <td class="pv3 pr3 bb b--black-20">Kr 15,80</td>
                                        <td class="pv3 pr3 bb b--black-20">5 øre</td>
                                        <td class="pv3 pr3 bb b--black-20">24.08.2018</td>
                                    </tr>
                                </tbody>
                                <tbody class="lh-copy">
                                    <tr>
                                        <td class="pv3 pr3 bb b--black-20"><img src="./assets/95 Miles Plus.png" alt="95 Miles"></td>
                                        <td class="pv3 pr3 bb b--black-20">Kr 18,01</td>
                                        <td class="pv3 pr3 bb b--black-20">5 øre</td>
                                        <td class="pv3 pr3 bb b--black-20">24.08.2018</td>
                                    </tr>
                                </tbody>
                                <tbody class="lh-copy">
                                    <tr>
                                        <td class="pv3 pr3 bb b--black-20"><img src="./assets/D Miles Plus.png" alt="D Miles"></td>
                                        <td class="pv3 pr3 bb b--black-20">Kr 16,79</td>
                                        <td class="pv3 pr3 bb b--black-20">5 øre</td>
                                        <td class="pv3 pr3 bb b--black-20">24.08.2018</td>
                                    </tr>
                                </tbody>
                            </table>
                        </div>
                        """
    let doc: Document = try SwiftSoup.parse(html)
    let tds: [Element] = try doc.select("td").array().filter { try $0.text().starts(with: "Kr ")}
    let titlesWithoutKr: [String] = try tds.map {try String($0.text().dropFirst(3))}
    print(titlesWithoutKr)
} catch Exception.Error( _, let message) {
    print(message)
} catch {
    print("error")
}