[go: nahoru, domu]

Skip to content

nisshiee/async-crawler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

async-crawler

Build Status

async-crawlerは一発稼働系クローラーを簡単に作成するサポートをするライブラリです。

主なコンセプトは以下の通りです。

  • 一定のSleepタイムを強制的に挟むことでDos攻撃にならないよう調整を自動で入れる
  • Futureを用いた非同期リクエスト
  • レスポンスの柔軟な解析と解析部分の高いモジュラリティ
  • ScalazのMonad型クラスと連携してfor, map, flatMap等を用いたコーディングを実現

How to use

sbt

libraryDependencies += "org.nisshiee" %% "async-crawler" % "1.0.0"

// 各種解析補助モジュールを利用する場合は以下のモジュールを利用できます

libraryDependencies += "org.nisshiee" %% "async-crawler-jsoup" % "1.0.0"

libraryDependencies += "org.nisshiee" %% "async-crawler-json4s" % "1.0.0"

libraryDependencies += "org.nisshiee" %% "async-crawler-filedl" % "1.0.0"

coding example

Jsoupを使ってTextNodeを抽出する例

import org.nisshiee.crawler._
import org.nisshiee.crawler.jsoup._
import org.jsoup.nodes.Document
import scalaz._, Scalaz._

val f: Fv[String] = Crawler("http://example.com") { doc: Document =>
  doc.select("h1").first.text successNel
}

f.result() // => Success("Example Domain")

Crawler.shutdown

深さ2までリンク辿ってURLリストを抽出する例

import scala.collection.JavaConverters._
import org.nisshiee.crawler._
import org.nisshiee.crawler.jsoup._
import org.jsoup.nodes.Document
import scalaz._, Scalaz._

def links(url: String): Fv[List[String]] = Crawler(url) { doc: Document =>
  doc.select("a[href]").asScala.toList map { _.attr("href") } successNel
}

val f: Fv[List[String]] = (for {
  url1 <- ListT(links("http://example.com"))
  url2 <- ListT(links(url1))
} yield url2) underlying

f.result() // => Success(List(...))

Crawler.shutdown

License

MIT