scala-scraper의 Validation

7374 단어 scrapingScala
scala의 스크래핑 라이브러리를 만져 본 메모입니다.
밸리데이션 주위를 중심으로 움직여 보았습니다.

기본적인 사용법은 하부의 참고 기사가 상세합니다.

scala-scraper
htps : // 기주 b. 코 m / 루이 ぺ이와 g / s ぁ-sc 등 ぺr # 콘텐 t ゔ ぃ

build.sbt
libraryDependencies += "net.ruippeixotog" %% "scala-scraper" % "2.1.0"

sample.scala
import net.ruippeixotog.scalascraper.browser._
import net.ruippeixotog.scalascraper.dsl.DSL._
import net.ruippeixotog.scalascraper.dsl.DSL.Extract._
import net.ruippeixotog.scalascraper.util.Validated._

object SampleApp {
  val content = """
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="utf-8">
            <title>Test page</title>
        </head>
        <body>
        <div id="wrapper">
            <div id="content">
                <section>
                    <h3>Section 1 h3</h3>
                    <p>Some text for testing</p>
                </section>

                <section>
                    <h3>Section 2 h3</h3>
                    <span>My Form</span>
                </section>
            </div>
        </div>
        </body>
        </html>"""

  def main(args: Array[String]): Unit = {
    val jsoupBrowser = JsoupBrowser()
    val doc = jsoupBrowser.parseString(content)

    // とりあえず普通に抽出
    println(doc >> text("div#content section h3"))
    // Section 1 h3

    // バリデーション
    println(doc >/~ validator(text("div#content section h3"))(_.nonEmpty))
    // Right(JsoupDocument(<!doctype html>......</html>)) 成功するとHTML全体

    println(doc >/~ validator(text("div#content section h3 not_exist"))(_.nonEmpty))
    // Left(()) 失敗の場合

    // バリデーションパターンを以下のようにもできる
    val succ = validator(text("title"))(_ == "AAAAAAAAAAAA") // 実際は "Test page" なので、errorsに
    val err = Seq(
      validator(text(".msg"), "Not logged in")(_.contains("sign in")),
      validator("#div content", "Empty contents")(_.isEmpty), // 該当するエラーのパターン
      validator(text("h1"),  "Internal Server Error")(_.contains("500"))
    )

    doc >/~ (succ, err) match {
      case VSuccess(content) => println(content)
      case VFailure(msg) => println(s"Error: $msg")
    }
    // Error: Empty contents
  }
}

참고



h tps:// 퀵했다. 작은 m/하 ry0000/있어 MS/0C4 그림 37 엣 b71d102cf8b0
htps : // 이 m/아라_타 3/있어 ms/8bf8c6 ぇ c86884fb6cb

좋은 웹페이지 즐겨찾기