Swiftsoup解析未找到所有HTML类

Swiftsoup解析未找到所有HTML类,html,ios,swift,css-selectors,swiftsoup,Html,Ios,Swift,Css Selectors,Swiftsoup,我有一种使用Swiftsoupgo获取产品价格的方法来解析网站: @objc func actionButtonTapped(){ let url = "https://www.overkillshop.com/de/c2h4-interstellar-liaison-panelled-zip-up-windbreaker-r001-b012-vanward-black-grey.html" let url2 = "https://www.asos.com/de/asos-d

我有一种使用
Swiftsoup
go获取产品价格的方法来解析网站:

@objc func actionButtonTapped(){

    let url = "https://www.overkillshop.com/de/c2h4-interstellar-liaison-panelled-zip-up-windbreaker-r001-b012-vanward-black-grey.html"

    let url2 = "https://www.asos.com/de/asos-design/asos-design-schwarzer-backpack-mit-ringdetail-und-kroko-muster/prd/14253083?clr=schwarz&colourWayId=16603012&SearchQuery=&cid=4877"



    do {


        let html: String = getHTMLfromURL(url: url2)
        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()
            print(try priceClass.className())
            print("pricetext: \(priceText)")
        }

    } catch Exception.Error(let type, let message) {
        print(message)
    } catch {
        print("error")
    }
}
该方法适用于
url
,但对于
url2
,它不会打印所有
类名,即使它们与
regex
匹配。这就是实际价格:

<span data-id="current-price" data-bind="text: priceText(), css: {'product-price-discounted' : isDiscountedPrice }, markAndMeasure: 'pdp:price_displayed'" class="current-price">36,99 €</span>
36,99€
该函数的输出如下所示:

产品价格文本:

股价下跌

价格文本: 股价重试

价格文本:

它没有打印
class=当前价格
。我的
regex
有什么问题吗?或者为什么它找不到
class

编辑:


我发现
price
实际上并不在
url2
HTML
中。只有实际打印出来的
类才在内部。原因是什么?我如何解决这个问题?

html不是静态的。它可以随着时间的推移而改变。如果您对站点的URL发出get请求,您将获得该站点html的初始值。 但是在浏览器上有一种叫做javascript的东西,它可以使页面的HTML随着时间的推移而改变。事实上,这很常见: -该站点首先会加载一些javascript -javascript(由网站的创建者开发)比运行和做其他事情更重要 -通过javascript调用一些API,内容会动态变化

您不能通过HTML抓取基本URL来抓取该内容

如果你问我该怎么做,那就是通过查找网站的HTTP请求来获取内容。看看那个API,然后自己使用那个API。获取数据,并将其存储在我的一些服务器中。 而在客户端,我调用服务器的API来获取数据。 我也不确定这是否合法

但是,据我所知,你的最后两个问题,你不想这样做

如果确实需要在客户端执行此操作,可以使用
WKWebView
,加载页面,等待内容显示,然后通过执行以下操作获取页面的当前HTML:

webView.evaluateJavaScript(“document.documentElement.outerHTML.toString()”,
completionHandler:{(html:Any?,error:error?)在
打印(html)
})
更多关于这方面的信息,请参阅


我希望这能解决您所有的问题,因为我想我没有更多的时间来帮助您:D

您在
[class~=(?I)price]
中使用的是css选择器,而不是正则表达式。哦,对不起,这是问题吗?或者我该怎么解决?谢谢你的帮助。问题是我实际上使用的是
ShareExtension
,我从那里获取当前URL并使用它。有没有办法在我的
ShareExtension
中调用
evaluateJavascript
??