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