我需要从特定网站检索文字。但是,我只需要它的一部分。我怎样才能使用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];
}`
同样,我想用Swift完成这个。
答案 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
我的迅速生锈了。但这可能会对你有所帮助。这是大致翻译,但完全概述了您的需求