Scala和HTML解析

Lui*_*max 20 html xhtml scala

如何将HTML DOM文档加载到Scala中?尝试加载xmlns标记时,XML单例有错误.

import java.net._
import java.io._
import scala.xml._

object NetParse {

   import java.net.{URLConnection, URL}
   import scala.xml._

   def netParse(sUrl: String): Elem = {
       var url = new URL(sUrl)
       var connect = url.openConnection

       XML.load(connect.getInputStream)
   }
}
Run Code Online (Sandbox Code Playgroud)

最后我找到了解决方案!- 需要使用scala 2.7.7或更高版本(2.7.0有一个致命错误): 如何使用-TagSoup-with-Scala-XML

pri*_*kar 15

这可以帮助您 处理真实世界的HTML,就好像它是scala中的XML一样

  • 今天查看该页面,大多数代码示例都丢失了.这是一个仍然包含所有原始内容的版本的链接:http://web.archive.org/web/20111121010724/http://www.hars.de/2009/01/html-as-xml-in- scala.html (2认同)

Dan*_*ral 6

请尝试使用scala.xml.parsing.XhtmlParser.

  • 值得注意的是,这个解决方案不适用于"标签汤" - 只有格式良好的XHTML才能成功解析.因此,与scala.xml.XML.load*相比,它基本上只添加标准HTML实体并显然保留了CDATA块.(就我而言,这就是我所需要的,所以是的!) (3认同)

Jes*_*har 5

我刚刚尝试使用scala 2.8.1的这个答案,最后使用了以下工作:

http://www.hars.de/2009/01/html-as-xml-in-scala.html

我需要的有趣的一点是:

val parserFactory = new org.ccil.cowan.tagsoup.jaxp.SAXFactoryImpl
val parser = parserFactory.newSAXParser()
val source = new org.xml.sax.InputSource("http://www.scala-lang.org")
val adapter = new scala.xml.parsing.NoBindingFactoryAdapter
adapter.loadXML(source, parser)
Run Code Online (Sandbox Code Playgroud)


Mat*_*aun 5

斯卡拉刮刀

我推荐Scala Scraper,它可以让你像这样优雅地解析 HTML:

// Parse elements from files, URLs or plain strings
val browser = JsoupBrowser()
val doc = browser.parseFile("core/src/test/resources/example.html")
val doc2 = browser.get("http://example.com")
val doc3 = browser.parseString("<html><h1>parse me</h1></html>")

// Extract the text inside the element with id "header"
doc >> text("#header")

// Extract the <span> elements inside #menu
val items = doc >> elementList("#menu span")

// From each item, extract all the text inside their <a> elements
items.map(_ >> allText("a"))
Run Code Online (Sandbox Code Playgroud)

示例取自 Scala Scraper 的自述文件