使用golang解析损坏的HTML [英] Parse broken HTML with golang

查看:92
本文介绍了使用golang解析损坏的HTML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在HTML字符串中找到元素.不幸的是,HTML几乎已损坏(例如,关闭标签而没有开头对).

I need to find elements in an HTML string. Unfortunately the HTML is pretty much broken (e.g. closing tags without an opening pair).

我尝试将XPath与 launchpad.net/xmlpath 一起使用,但是它无法解析HTML文件,因此该死的越野车.

I tried to use XPath with launchpad.net/xmlpath but it can't parse an HTML file so damn buggy.

如何使用golang查找损坏的HTML中的元素?我更喜欢使用XPath,但是如果我可以使用它来查找具有特定ID或类的标签,我也愿意接受其他解决方案.

How can I find elements in a broken HTML with golang? I would prefer using XPath, but I am open for other solutions too if I can use it to look for tags with a specific id or class.

推荐答案

似乎 net/html 完成任务.

这就是我现在正在做的事情:

So that's what I am doing now:

package main

import (
    "strings"
    "golang.org/x/net/html"
    "log"
    "bytes"
    "gopkg.in/xmlpath.v2"
)

func main() {
    brokenHtml := `<!DOCTYPE html><html><body><h1 id="someid">My First Heading</h1><p>paragraph</body></html>`

    reader := strings.NewReader(brokenHtml)
    root, err := html.Parse(reader)

    if err != nil {
        log.Fatal(err)
    }

    var b bytes.Buffer
    html.Render(&b, root)
    fixedHtml := b.String()

    reader = strings.NewReader(fixedHtml)
    xmlroot, xmlerr := xmlpath.ParseHTML(reader)

    if xmlerr != nil {
        log.Fatal(xmlerr)
    }

    var xpath string
    xpath = `//h1[@id='someid']`
    path := xmlpath.MustCompile(xpath)
    if value, ok := path.String(xmlroot); ok {
        log.Println("Found:", value)
    }
}

这篇关于使用golang解析损坏的HTML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆