2016-12-06 3 views
0

Ich verwende den folgenden Code, um Wetterinformationen aus dem HTML einer Website zu extrahieren. Der Code verfolgt über die angegebene URL und sucht nach Inhalt, der durch die beiden Sätze getrennt ist, die ich als Strings angegeben habe. Die Information, die ich extrahieren muss, ist zwischen zwei Phrasen, aber die erste Phrase hat einen Zeilenumbruch im HTML.Wie stelle ich Zeilenumbrüche in HTML innerhalb einer Zeichenfolge in Swift dar 3

Wie stelle ich dies in der Zeichenfolge dar? Ich habe versucht, einfach den Zeilenumbruch zu entfernen und auch \n zu benutzen, aber dies macht den Abruf erfolglos, da er diese Phrase nicht finden kann. Ich habe den Zeilenumbruch in meinem Code als vier Sterne dargestellt.

Ich habe auch ein Bild von dem HTML angehängt, das ich mir ansehe. In diesem Fall versuche ich, die im HTML angegebene Zeit zu extrahieren, aber ich möchte auch das Bit 'Clear, cloudless sky' extrahieren, das sich offensichtlich regelmäßig ändert, wie auch einige der vorhergehenden Inhalte.

Der Grund für die Notwendigkeit der Zeit ist, dass ich das weiß und der Wind wird sich ändern, und ich möchte schließlich die aktuellen Bedingungen extrahieren, so muss ich den Code sagen, um die richtige Zeit und Wind in der Lage sein um die aktuellen Bedingungen zu holen.

if let url = attemptedURL { 
    let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) -> Void in 
     if let urlContent = data { 
      let webContent = NSString(data: urlContent, encoding: String.Encoding.utf8.rawValue) 
      let websiteArray = webContent?.components(separatedBy: "<span class=\"current_description\">****<span>") 

      if websiteArray!.count > 1 { 
       let conditionArray = websiteArray![1].components(separatedBy: "</span>") 

       if conditionArray.count > 1 { 
        self.wasConSuccessful = true 

        let extract = conditionArray[0].replacingOccurrences(of: "&deg;", with: "º") 

        DispatchQueue.main.async(execute: {() -> Void in 
         print(extract) 
        }) 
       } 
      } 

      if self.wasConSuccessful == false { 
       self.conditionsLabel.text = "!" 

Image of HTML

+0

Versuchen Sie es mit den Zeilenumbruch als '
darstellt'. –

+0

Nein - das schien nicht den Trick zu machen. Danke für den Vorschlag, obwohl –

+0

Versuch \ r \ n, das hat es für mich getan –

Antwort

0

SwiftSoup

do{ 
    let doc: Document = try SwiftSoup.parse("<span class=\"current_description\"><span>5:30</span><span>3 km/h</span></span>") 
    let current_desc = try doc.getElementsByClass("current_description").first() 
    try print(current_desc?.select("span").get(1).text())//"5:30" 
}catch Exception.Error(let type, let message){ 
    print(message) 
}catch{ 
    print("error") 
} 
Verwandte Themen