从 HTML 源 Swift 中提取链接

Posted

技术标签:

【中文标题】从 HTML 源 Swift 中提取链接【英文标题】:Extract link from HTML source Swift 【发布时间】:2016-04-27 14:03:24 【问题描述】:

我想从网站中提取链接。我已经使用以下代码检索了网站的 html

let myHTMLString = try String(contentsOfURL: myURL)

并给出以下输出:

...
<div class="map-overlay-box">
<a href="directions_link" target="_blank" class="store-info self clear">
...

我想找到网页的 directions_link 部分。当我进入 Safari 并检查元素时,我能够看到该链接,但在我的应用程序中,它只是替换为该占位符。

我曾尝试像这样使用Kanna (see here),但没有结果:

if let doc = Kanna.HTML(html: myHTMLString, encoding: NSUTF8StringEncoding) 
     for link in doc.xpath("//div[@class='map-overlay-box']") 
          print(link.text)
          print(link["href"])
     

有什么想法吗?

【问题讨论】:

【参考方案1】:

XPath 没有 CSS 类选择器的原生等效项。

试试下面的xpath

//*[contains(concat(' ', normalize-space(@class), ' '), 'map-overlay-box')]

要排除您使用由 javascript 生成的动态 HTML,请尝试使用您的输出进行测试:

let myHTMLString = "<div class=\"map-overlay-box\"><a href=\"directions_link\" target=\"_blank\" class=\"store-info self clear\"></a></div>"

如果您的 HTML 是动态生成的,请记住您还有 stringByEvaluatingJavaScriptFromString 来帮助您解释 JS 并获取您的 html 字符串..

【讨论】:

仍然没有打印出任何东西 你收到的输出是静态HTML?还是由javascript动态生成?尝试使用 let htmlOutput=" 我使用了以下但“你好”没有打印出来:for link in doc.xpath("//*[contains(concat(' ', normalize-space(@class), ' '), 'map-overlay-box')]") print("HELLO") 我只是用let myHTMLString = try String(contentsOfURL: myURL) 实现了HTML 好的,使用测试 myHTMLString xpath 可以工作,但是我如何从网页中获取正确的 HTML 呢?

以上是关于从 HTML 源 Swift 中提取链接的主要内容,如果未能解决你的问题,请参考以下文章

租房不入坑不进坑,Python爬取链家二手房的数据,提前了解租房信息

Python爬虫项目--爬取链家热门城市新房

python爬虫:爬取链家深圳全部二手房的详细信息

python 爬取链家二手房信息

如何从 HTML 中提取链接?

SSIS Design1: 源数据提取