导出书签的解析器谷歌浏览器的HTML文件和Java中的Mozilla

时间:2013-02-22 04:58:24

标签: java html parsing google-chrome firefox

如何用Java解析Google Chrome和Mozilla Firefox中导出的书签文件。是否有任何库可以直接解析它们并获取其中的URL。

另外,欢迎使用Java解析它们的示例代码。

4 个答案:

答案 0 :(得分:7)

在大多数情况下,您实际上不需要解析HTML文件。 Chrome将书签存储在JSON文件中。使用JSON解析器读取该文件要简单得多。

您感兴趣的文件位于(在Linux上,无论如何,谷歌周围的其他操作系统):

/home/your_name/.config/google-chrome/Default/Bookmarks

JSON解析很简单。 Google周围或以How to parse JSON in Java开头。

如果您想在开始挖掘之前可视化JSON数据,那么还要查看http://chris.photobooks.com/json/default.htm

答案 1 :(得分:3)

根据发布的新评论,解决方案是使用JSOUP开源程序来执行此操作。 JSOUP只接受HTTP或HTTPS协议,因此您可能希望在tomcat等本地服务器上托管导出的书签HTML并获取它的DOM

 http://yourip:<port>/<yourProject>/<bookmark.html>. 

JSOUP非常明显。

其他更简单的方法:

Chrome和Firefox书签存储为JSON,如下所示。

Java方式:我建议您使用JSON来解析这些。基于以下结构创建引用Java Object。

或只是使用UNIX命令提示符并执行

 grep -i "url" <bookmark file path> | cut -d":" -f2

但是,如果您仍然对使用Chrome API感兴趣,请访问:http://developer.chrome.com/extensions/bookmarks.html

{
   "checksum": "702d8e600a3d70beccfc78e82ca7caba",
   "roots": {
  "bookmark_bar": {
     "children": [ {
        "date_added": "12939920104154671",
        "id": "3",
        "name": "Development/Tutorials/Git/git-svn - KDE TechBase",
        "type": "url",
        "url": "http://techbase.kde.org/Development/Tutorials/Git/git-svn"
     }, {
        "date_added": "12939995405838705",
        "id": "4",
        "name": "QJson - Usage",
        "type": "url",
        "url": "http://qjson.sourceforge.net/usage.html"

答案 2 :(得分:0)

我对这个问题有点迟了。但是,如果它仍然有意义:我需要做同样的事情(以及其他书签资源:GitHub Stars,Netscape和Google书签)并构建自己的。您可以从我的仓库https://github.com/IvoLimmen/mystart中查看并获取它。

答案 3 :(得分:0)

如果有人感兴趣:以下是有关如何解决解析Chrome书签JSON文件(不过尚未完全测试,仅是为了弄清主意)的简要说明:

import org.json4s.DefaultFormats
import org.json4s.native.JsonMethods
import org.junit.Test

class BookmarksImporterTest {

  implicit val formats: DefaultFormats.type = DefaultFormats

  def analyse(element: Node): List[Node] = {
   element.children.flatMap(c => {
      c.`type` match {
        case Some("folder") => c.children.flatMap(r => analyse(r))
        case Some("url")    => List(c)
        case _              => println("???"); List()
      }
    })
  }

  @Test
  def test(): Unit = {
    val source    = scala.io.Source.fromFile("bookmarks.json")
    val json      = JsonMethods.parse(source.reader())
    val bookmarks = json.extract[ChromeBookmarks]

    val bms = bookmarks.roots.flatMap {
      case (name, elements) => analyse(elements)
    }
    println("found " + bms.size + " entries")
  }

}

case class ChromeBookmarks(checksum: String, roots: Map[String, Node], version: Int)

case class Node(
    id: Option[String],
    name: Option[String],
    url: Option[String],
    children: List[Node],
    `date-added`: Option[Long],
    `date-modified`: Option[Long],
    `type`: Option[String]
)