html - Swiftsoup解析未找到所有HTML类

标签 html ios swift css-selectors swiftsoup

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

@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,即使它们匹配classNames,也不会打印所有的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>

该函数的输出是这样的:

产品价格价格文字:

股票价格重试

价格文字:
股票价格重试

价格文字:

它没有打印class=current-price。我的regex出了点问题,或者为什么找不到class

编辑:

我发现price实际上不在HTMLurl2内部。内部只有实际打印出的classes。这是什么原因,我该如何解决?

最佳答案

html不是静态的。它会随着时间而变化。如果您对网站的URL进行获取请求,您将获得该网站的html的初始值。
但是在浏览器上有一个叫做javascript的东西,可以使页面的HTML随时间变化。实际上这很普遍:
-网站首先会加载一些JavaScript
-javascript(由网站的创建者开发)比运行并能完成的工作
-通过该javascript调用一些API,内容可以动态更改

您无法通过基本网址的HTML抓取来抓取该内容。

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

但是,据我对您最后几个问题的理解,您不想这样做。

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

webView.evaluateJavaScript("document.documentElement.outerHTML.toString()", 
                           completionHandler: { (html: Any?, error: Error?) in
    print(html)
})

有关更多信息,请查看this answer

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

关于html - Swiftsoup解析未找到所有HTML类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61441843/

相关文章:

ios - 模仿马车线最好的方法是什么?

ios - 共享云数据库不支持 CKQuerySubscriptions

ios - 我如何使用 Alamofire 获取 JSON 的长度值

ios - 将 MPMediaItemArtwork 分配给 UIImage

jquery - 如果 jQuery 有焦点,如何防止切换操作

jquery - 同步多个 CSS3 动画

javascript - 在 <table> 中使用 <div> 有效吗?选择表格行内的所有选项

ios - Swift:UICollectionView 到 UIViewController。何时向下滚动集合内容以使用完整 View ?

iOS 应用程序被杀死并重新启动 显示我最后的 VC

html - <sup> 有 2 行时的 CSS 样式问题