Java中Google Chrome和Mozilla的导出书签HTML文件的解析器



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

同样,在Java中解析它们的示例代码也是最受欢迎的。

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

你感兴趣的文件位于(无论如何,在Linux上,谷歌搜索其他O/S):

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

JSON解析很简单。谷歌或从如何在Java中解析JSON开始。

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

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

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

JSOUP非常不言自明。

其他更简单的方法:

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

Java方式:我建议您使用JSON来解析这些。根据以下结构制作一个参考Java对象。

或者简单地使用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"

我回答这个问题有点晚了。但如果它仍然相关:我需要做同样的事情(以及其他书签来源:GitHub Stars、Netscape和Google Bookmarks),并建立自己的书签。你可以看看我的回购:https://github.com/IvoLimmen/mystart.

如果有人感兴趣:以下是如何解析Chrome书签JSON文件的scala片段(不过还没有经过彻底测试,只是为了了解这个想法):

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]
)

最新更新