[Swift]AlamofireとKannaでスクレイピングをする

swift

SwiftでWebサイトをスクレイピングしてみます。

AlamofireとKannaを使います。

やること

かなり簡単なサンプルを作ってみます。あるサイトにアクセスして、サクッとクローリングします。

使うのは、AlamofireとKannaというライブラリ。

さっそく見ていきましょう。

Xcodeでプロジェクトを作る

まずは、いつものようにXcodeでプロジェクトを立ち上げます。プロジェクト名は適当に。

次に、CocoapodsからAlamofireとKannaをインストールします。

Alamofireというのは、Webサイトにリクエストを送るやつでKannaは取得したhtmlコードをパースするやつです。

iOSアプリ開発でCocoapodsが使えるように環境を作る方法

cocoapodsをインストールする。エラーに会った時やインストール後の対応まとめ

 

cocoapodsをインストールしていきます。ターミナルを立ち上げて、プロジェクトまで移動します。

xxx-no-MacBook-Pro:testClawler xxx$ pod init

移動したところで、pod initでPodfileを作成します。

次にopen Podfileでファイルを開きます。(Finderから開いてもOK)

xxx-no-MacBook-Pro:testClawler xxx$ open Podfile

Podfileには以下のように記述します。

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'testClawler' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for testClawler

  # 以下2つを追記
  pod "Alamofire"
  pod "Kanna"

end

余談ですけど、PodfileってRubyで書かれているんですよね。

podを追記し保存したところで、ターミナルに戻りpod installします。

xxx-no-MacBook-Pro:testClawler xxx$ pod install

これで、プロジェクトにAlamofireとKannaを反映させる準備ができました。ここでいったんXcodeを閉じて、再度白色のファイルを開くようにします。

ファイルを開いて、importしておきます。

import UIKit
import Alamofire
import Kanna

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

これで、下準備はOKです。次で実際にサイトにリクエストを送る→パースするコードを書いていきます。

コードを書く

コード全文を載せます。

import UIKit
import Alamofire
import Kanna

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        scrapeWebsite()
    }
    
    func scrapeWebsite() {
        
        //GETリクエスト 指定URLのコードを取得
        Alamofire.request("https://www.yahoo.co.jp").responseString { response in
            print("\(response.result.isSuccess)")
            
            if let html = response.result.value {
               self.parseHTML(html: html)
            }
        }
    }
    
    func parseHTML(html: String) {
        if let doc = try? HTML(html: html, encoding: .utf8) {
            print(doc.title)
            
            for link in doc.css("a, link") {
                print(link.text)
                print(link["href"])
            }
        }
    }
}

今回はtitleタグとリンクタグを取得しました。

Alamofireで指定URLにGETリクエストを送って、Kannaでパースします。

詳しい使い方はGithubを見てください。

https://github.com/Alamofire/Alamofire

https://github.com/tid-kijyun/Kanna

 

注意点

httpsのサイトは問題なく動作しますが、httpのサイトだとエラーが出ます。

もし、httpのサイトに接続する場合はinfo.plistをいじる必要があります。

info.plistを開いて、Information Property Listから+で、App Transport Security Settingを追加。同じく+でAllow Arbitary Loadsを追加。最後にValueをYESとします。これでhttpのサイトでもOKです。

 



カテゴリー