gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:53:19 25 4
gpt4 key购买 nike

在我正在编写的一个小脚本中,我向 Web 服务发送了一个 POST 并接收了一个 HTML 文档作为响应。除了单个 textarea 的内容外,该文档与我的需求基本无关。这个 textarea 是页面中唯一的 textarea,它有一个我提前知道的特定 name。我想获取该文本而不用担心文档中的任何其他内容。目前我正在使用正则表达式来获取正确的行,然后删除标签,但我觉得可能有更好的方法。

这是文档的样子:

<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, "")

我认为在这种情况下使用完整的 HTML 解析器可能有点过分,这就是我朝这个方向前进的原因,尽管据我所知还有更好的东西。

非常感谢您的任何建议。

最佳答案

看看这个包:https://github.com/PuerkitoBio/goquery .它就像 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)
}

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

关于html - Go - 从具有已知结构的文档中获取单个特定 HTML 元素的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22543629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com