Kanna.Parsing on swift


#1

Привет, господа!

Есть у нас сайт новостей http://www.glunews.ru/news/?page=0
Мы хотим распарсить все-все новости, то есть надо page=0 менять на 0…351.

Так вот, как это лучше всего сделать?

Спасибо!


#2

Видимо вам сюда: Интерполяция строк


#3

И что ты хочешь этим сказать? Попробуй запусти :slight_smile:


#4

С картинки набирать как то не горю желанием)

Ваш вопрос не совсем понятен.

В хотите парсить все страницы сразу?
Или вам не понятно как поменять номер страницы?


#5

Можно сделать вызов NSURLSession в цикле for. Он по очереди будет выводить html каждой страницы. Но увы, менять кол-во итераций не получится :frowning:


#6

А зачем? Ведь не все страницы разом показываются, от этого логичней - открыл страницу загрузил данные


#7

В этом есть смысл :slight_smile:


#8

Обычно так и делают и загруженные в кеш добавляют. Не кто не любит ждать по пол часа, пока все страницы загрузятся)


#9

Ты в точку! Мне не особо понятно, как парсить все сразу и поменять номер страницы :frowning:

впишите текст сюда; также, отключить форматирование текста можно, начав строку с четырех пробелов

впишите текст сюда; также, отключить форматирование текста можно, начав строку с четырех пробелов

class ViewController: UIViewController {
 
 @IBOutlet weak var webView: UIWebView!

override func viewDidLoad() {
    super.viewDidLoad()
     displayURL()
}

func displayURL() {
        let myUrlAdress = "http://www.glunews.ru/news/?page=0"
        let myUrl = NSURL(string: myUrlAdress)
        let UrlTask = NSURLSession.sharedSession().dataTaskWithURL(myUrl!) {
            myData, response, error in
            guard error == nil else {return}
            
            let stringHTML = String(data: myData! , encoding: NSUTF8StringEncoding)
            self.webView.loadHTMLString(stringHTML! , baseURL: nil)
            // если хотим полный код страницы
            //print(stringHTML)
            if let doc = Kanna.HTML(html: stringHTML!, encoding: NSUTF8StringEncoding) {
                print(doc.title)
                
               
                for link in doc.css("a, div") {
                    print(link.text)
                   // print(link["href"])
                }
            }
        }
            UrlTask.resume()
}
}

#10

Я вам не советую грузить все страницы сразу, но если сильно хочется то как то так:

func displayURL(pageCount: Int) {
  let group = dispatch_group_create()
  var result: [String] = []

  for i in 0..<pageCount {
    dispatch_group_enter(group)
            
    let myUrlAdress = "http://www.glunews.ru/news/?page=\(i)"
    let myUrl = NSURL(string: myUrlAdress)
    let UrlTask = NSURLSession.sharedSession().dataTaskWithURL(myUrl!) { myData, response, error in
                
      let stringHTML = String(data: myData! , encoding: NSUTF8StringEncoding)!
      result.append(stringHTML)
                
      dispatch_group_leave(group)
    }
    UrlTask.resume()
  }
        
  dispatch_group_notify(group, dispatch_get_main_queue()) {
    print(result)
  }
}
      

#11