【问题标题】:Swift how to load an HTML page with URL that contains #Swift如何加载包含#的URL的HTML页面
【发布时间】:2016-04-16 17:34:00
【问题描述】:

我要加载 HTML 页面的 URL 地址以“#2”结尾。 我的问题是每次加载第 1 页时 (#1)。

为什么会这样?

func getUrl ( Page: Int) -> String
{ 
    let myUrlString="http://www.amazon.de/gp/bestsellers/digital-text/530887031/ref=zg_bs_nav_kinc_1_kinc#2"
    if let myURL = NSURL(string: myUrlString)
    {
    var error: NSError?
    let myHTMLString: NSString?
    do { myHTMLString = try NSString(contentsOfURL: myURL, encoding: NSISOLatin1StringEncoding) }

    catch let error1 as NSError
    {
    error = error1
    myHTMLString = nil
    }

    if let error = error    { print("Error !!: \(error)", terminator: "") }
    else                    {
                              HTMLPage=String(myHTMLString)
                              //print("HTML : \(myHTMLString)")
                            }
    }
    else { print("Error 123: \(myUrlString) doesn't seem to be a valid URL", terminator: "") }

    return (HTMLPage)
}

【问题讨论】:

  • 你需要在你的字符串中添加百分比转义符"yourLink".stringByAddingPercentEncodingWithAllowedCharacters( NSCharacterSet.URLQueryAllowedCharacterSet())!
  • 感谢您的回复。我已经检查过了,但它不起作用。修改后的网址为amazon.de/gp/bestsellers/books/287480/ref=zg_bs_nav_b_1_b%232。如果我将此网址直接放在 safari 浏览器中,我会得到第 1 页

标签: html xcode swift url load


【解决方案1】:

法郎,很遗憾,这行不通。如果您在浏览器中打开链接并仔细查看,您会看到它加载了第 1 页,但很快就会出现一个微调器并加载第 2 页。

这是因为分页是通过 JavaScript/Ajax 控制的。浏览器会触发分页事件,因此检索和解析页面 HTML 将永远不会让您进入第 2 页(或更远)。

此外,URL 中的 # 字符主要用于链接到页面锚点和 JavaScript/Ajax 状态控制,在这种情况下是分页。这两个事件都是客户端的(由 Web 浏览器触发),因此“获取”页面 HTML 不会触发此类事件。


很遗憾,但有什么办法呢?

你为什么要获取页面 HTML,无论如何?亚马逊有一个extensive API,如果您要查找的是针对特定搜索的结果产品,它很可能能够提供您想要的数据。

我建议您查看一下 Amazon API,您可能会发现它更容易完成您想要的任何事情。

【讨论】:

  • 感谢您的回答。我知道这与 Swift 无关。
猜你喜欢
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多