使用Swift从特定网页检索和解析文本

时间:2015-09-22 14:17:11

标签: ios swift parsing text

我需要从特定网站检索文字。但是,我只需要它的一部分。我怎样才能使用swift实现这一目标。

我在objective-c中找到了以下内容,但我不确定它是否提供了如何从特定网站引用它:

NSString *webString = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.innerText"];
NSScanner *stringScanner = [NSScanner scannerWithString:webString];
NSString *content = [[NSString alloc] init];
while ([stringScanner isAtEnd] == NO) {

[stringScanner scanUpToString:@"Start of the text you want" intoString:null];
[stringScanner scanUpToString:@"End of the text you want" intoString:&content];
}`

我在下面举例说明了我的意思:enter image description here

同样,我想用Swift完成这个。

2 个答案:

答案 0 :(得分:2)

如果您的HTML可以使用标识符或类名轻松定位,我建议您使用Kanna等库。但是我已经看过你的页面,你需要的文字在divs的海洋中消失了......

所以我很快就用componentsSeparatedByString来破解你的文字了:我正在逐块切割HTML,直到我到达我们感兴趣的部分。

请注意,它不是最有效的方式:您应该使用NSScanner来识别所需的HTML块,而不是使用componentsSeparatedByString

话虽这么说,这是我在游乐场测试的工作黑客的例子:

enum CustomErrors : String, ErrorType {
    case InvalidURL = "Invalid URL"
}

do {
    let str = "http://www.golfwrx.com/328370/mizuno-to-offer-custom-grips-at-no-additional-charge/"
    guard let url = NSURL(string: str) else { throw CustomErrors.InvalidURL }
    let html = try String(contentsOfURL: url)
    let separator1 = "<div class='mailmunch-forms-before-post' style='display: none !important;'></div><p>"
    let temp = html.componentsSeparatedByString(separator1)
    let separator2 = "</p>\n<p>"
    let temp2 = temp[1].componentsSeparatedByString(separator2)
    let separator3 = "</p><div class='mailmunch-forms-in-post-middle'"
    let separated = temp2[1].componentsSeparatedByString(separator3)
    let result = separated[0]
    print(result)
} catch {
    print(error)
}

注意:我的例子是Swift 2(Xcode 7)。

答案 1 :(得分:1)

对于具体细节感到抱歉,我是一名Objective-C家伙。但是,这是一个如何使用NString来获取网站HTML内容的例子

NSString *url = @"http://www.example.com"; // Your URL
NSURL *urlRequest = [NSURL URLWithString:url]; // Make a request with your URL
NSError *err = nil; // Error handler

NSString *html = [NSString stringWithContentsOfURL:urlRequest encoding:NSUTF8StringEncoding error:&err]; // Try to get the HTML in the string

if(err)
{
    //Do something as it didn't work! Maybe a connection problem
}
else
{
    // Use NScanner on html string
}

http://nshipster.com/nsscanner/是了解NScanner for swift的好地方

编辑:以上翻译为swift

var err: NSError? // Error handler
let url: NSURL = NSURL(string: "http://www.example.com") // NSURL, put your website URL in here
let string = NSString(contentsOfURL: url, encoding: NSUTF8StringEncoding, error: &err) // String will now hold your HTML
// Now use NScanner (See Link) to parse the HTML output

我的迅速生锈了。但这可能会对你有所帮助。这是大致翻译,但完全概述了您的需求