Go-从具有已知结构的文档中获取单个特定HTML元素的文本

Go-从具有已知结构的文档中获取单个特定HTML元素的文本,html,regex,go,Html,Regex,Go,在我正在编写的一个小脚本中,我向一个web服务发布了一篇文章,并收到一个HTML文档作为响应。除了单个textarea的内容外,本文档基本上与我的需要无关。这个textarea是页面中唯一的textarea,它有一个我提前知道的特定名称。我想抓住这段文字,而不必担心文档中的任何其他内容。目前,我正在使用正则表达式获取正确的行,然后删除标记,但我觉得可能有更好的方法 以下是文档的外观: <html><body> <form name="query" action="h

在我正在编写的一个小脚本中,我向一个web服务发布了一篇文章,并收到一个HTML文档作为响应。除了单个
textarea
的内容外,本文档基本上与我的需要无关。这个
textarea
是页面中唯一的
textarea
,它有一个我提前知道的特定
名称。我想抓住这段文字,而不必担心文档中的任何其他内容。目前,我正在使用正则表达式获取正确的行,然后删除标记,但我觉得可能有更好的方法

以下是文档的外观:

<html><body>
<form name="query" action="http://www.example.net/action.php" method="post">
    <textarea type="text" name="nameiknow"/>The text I want</textarea>
    <div id="button">
        <input type="submit" value="Submit" />
    </div>
</form>
</body></html>

我想要的文本
以下是我目前获取文本的方式:

s := string(body)

// Gets the line I want
r, _ := regexp.Compile("<textarea.*name=(\"|')nameiknow(\"|').*textarea>")
s = r.FindString(s)

// Deletes the tags
r, _ = regexp.Compile("<[^>]*>")
s = r.ReplaceAllString(s, "")
s:=字符串(正文)
//得到我想要的线路

r、 @regexp.Compile(“尽管这不是使用regex解析HTML的最佳实践。但是正如您所希望的,它是:

(<textarea\b[^>]*\bname\s*=\s*(?:\"|')\s*nameiknow\s*(?:\"|')[^<]*<\/textarea>)

(]*\bname\s*=\s*(?:\“|”)\s*nameiknow\s*(?:\“|”)[^尽管这不是使用正则表达式解析HTML的最佳实践。但正如您所希望的,这里是:

(<textarea\b[^>]*\bname\s*=\s*(?:\"|')\s*nameiknow\s*(?:\"|')[^<]*<\/textarea>)

(]*\bname\s*=\s*(?:\“|”)\s*nameiknow\s*(?:\“|”)[^看看这个包:。它类似于jQuery,但用于Go。它允许您执行以下操作

text := doc.Find("strong").Text()
完整工作示例:

package main

import (
    "bytes"
    "fmt"

    "github.com/PuerkitoBio/goquery"
)

var s = `<html><body>
<form name="query" action="http://www.example.net/action.php" method="post">
    <textarea type="text" name="nameiknow">The text I want</textarea>
    <div id="button">
        <input type="submit" value="Submit" />
    </div>
</form>
</body></html>`

func main() {
    r := bytes.NewReader([]byte(s))
    doc, _ := goquery.NewDocumentFromReader(r)
    text := doc.Find("textarea").Text()
    fmt.Println(text)
}
主程序包
进口(
“字节”
“fmt”
“github.com/purkitobio/goquery”
)
变量s=`
我想要的文本
`
func main(){
r:=字节。新读取器([]字节))
doc,:=goquery.NewDocumentFromReader(r)
text:=doc.Find(“textarea”).text()
fmt.Println(文本)
}

打印:“我想要的文本”。

看看这个包:。它类似于jQuery,但用于Go。它允许您执行以下操作

text := doc.Find("strong").Text()
完整工作示例:

package main

import (
    "bytes"
    "fmt"

    "github.com/PuerkitoBio/goquery"
)

var s = `<html><body>
<form name="query" action="http://www.example.net/action.php" method="post">
    <textarea type="text" name="nameiknow">The text I want</textarea>
    <div id="button">
        <input type="submit" value="Submit" />
    </div>
</form>
</body></html>`

func main() {
    r := bytes.NewReader([]byte(s))
    doc, _ := goquery.NewDocumentFromReader(r)
    text := doc.Find("textarea").Text()
    fmt.Println(text)
}
主程序包
进口(
“字节”
“fmt”
“github.com/purkitobio/goquery”
)
变量s=`
我想要的文本
`
func main(){
r:=字节。新读取器([]字节))
doc,:=goquery.NewDocumentFromReader(r)
text:=doc.Find(“textarea”).text()
fmt.Println(文本)
}
打印:“我想要的文本”