-1

对于我的项目,我需要解析HTML并获取产品的价格。这就是我目前的做法:

let url = "https://www.adidas.de/adistar-trikot/CV7089.html"
let className = "gl-price__value"

do {
    let html: String = getHTMLfromURL(url: url)
    let doc: Document = try SwiftSoup.parse(html)

    let price: Elements = try doc.getElementsByClass(className)

    let priceText : String = try price.text()

    result.text = priceText

} catch Exception.Error(let type, let message) {
    print(message)
} catch {
    print("error")
}

问题:

如何更改classNameregex以下所有 3 个示例都匹配?我现在尝试了几种可能性,但无法使其发挥作用。每次帮助都很高兴!

示例 1:

<div class="price">82 EUR</div>

示例 2:

<span class="gl-price__value">€ 139,95</span>

示例 3:

<span id="priceblock_ourprice" class="a-size-medium a-color-price priceBlockBuyingPriceString">79,99&nbsp;€&lt;/span>
4

1 回答 1

1

也许getElementsByClass不是最好的方法。来自SwiftSoup 自述文件 - 使用选择器语法查找元素

SwiftSoup 元素支持类似 CSS(或 jQuery)的选择器语法来查找匹配元素,这允许非常强大和健壮的查询。

[attr~=regex]: 属性值与正则表达式匹配的元素;例如img[src~=(?i)\.(png|jpe?g)]

您的代码将类似于:

let doc: Document = try SwiftSoup.parse(html)

let priceClasses: Elements = try doc.select("[class~=(?i)price]")

for priceClass: Element in priceClasses.array() {
    let priceText : String = try priceClass.text()
    ...
}
...

price根据您提供的示例在这里使用正则表达式,但您可以根据需要进行调整。

于 2020-04-25T22:29:12.423 回答