如何在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]
)