回答.用户PuerkitoBio帮我解决了他的goquery包裹,我相信我不会是唯一一个想知道怎么做的人.(我可以在两天内将此问题标记为"已回答")
当goquery用于查找html标签的类时,我在类包含空格时遇到了问题.这是一个例子:
package main
import (
"fmt"
"github.com/PuerkitoBio/goquery"
"strings"
)
func main() {
html_code := strings.NewReader(`
<html>
<body>
<h1>
<span class="text title">Go </span>
</h1>
<p>
<span class="text">totally </span>
<span class="post">kicks </span>
</p>
<p>
<span class="text">hacks </span>
</p>
</body>
<html>
`)
doc, _ := goquery.NewDocumentFromReader(html_code)
}
Run Code Online (Sandbox Code Playgroud)
如果我想找到班级"text title",我想我会这样做:
doc.Find(".text title").Each(func(i int, s *goquery.Selection) {
class, _ := s.Attr("class")
fmt.Println(class, s.Text())
})
Run Code Online (Sandbox Code Playgroud)
但这不起作用.(答案如下.)
我正在使用goquery包从网页中提取信息片段。请在下面查看我的代码。运行该函数后的结果是:
Description field: text/html; charset=iso-8859-15
Description field: width=device-width
Description field: THIS IS THE TEXT I WANT TO EXTRACT
Run Code Online (Sandbox Code Playgroud)
我快到了,但是我只想获取 name == 'description' 的元字段。不幸的是,我不知道如何将这个额外的条件添加到我的代码中。
func ExampleScrapeDescription() {
htmlCode :=
`<!doctype html>
<html lang="NL">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-15">
<meta name="viewport" content="width=device-width">
<meta name="description" content="THIS IS THE TEXT I WANT TO EXTRACT">
<title>page title</title>
</head>
<body class="fixedHeader">
page body
</body>
</html>`
doc, err := goquery.NewDocumentFromReader(strings.NewReader((htmlCode)))
if err != nil {
log.Fatal(err)
}
doc.Find("meta").Each(func(i int, s *goquery.Selection) {
description, _ := …Run Code Online (Sandbox Code Playgroud) 我在尝试将 HTML 表转换为 Golang 数组时遇到问题。我尝试使用 x/net/html 和 goquery 来实现它,但都没有成功。
假设我们有这个 HTML 表格:
<html>
<body>
<table>
<tr>
<td>Row 1, Content 1</td>
<td>Row 1, Content 2</td>
<td>Row 1, Content 3</td>
<td>Row 1, Content 4</td>
</tr>
<tr>
<td>Row 2, Content 1</td>
<td>Row 2, Content 2</td>
<td>Row 2, Content 3</td>
<td>Row 2, Content 4</td>
</tr>
</table>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我想以这个数组结束:
------------------------------------
|Row 1, Content 1| Row 1, Content 2|
------------------------------------
|Row 2, Content 1| Row 2, Content 2|
------------------------------------
Run Code Online (Sandbox Code Playgroud)
正如你们所看到的,我只是忽略了内容 3 和 4。
我的提取代码:
func …Run Code Online (Sandbox Code Playgroud) 我正在学习Go,在这个领域是一个真正的新手.
当我尝试复制某些值时,我遇到了问题.
我在做的是:
- 我想在[response]中使用httpRequest获得一些响应.
httpClient := &http.Client{}
response, err := httpClient.Do(req)
if err != nil {
panic(err)
}
Run Code Online (Sandbox Code Playgroud)
- 之后,我想在'origin.txt'的响应中保存存储的值
origin_ ,_:= ioutil.ReadAll(response.Body)
f_, err := os.Create("origin.txt")
f_.Write(origin_);
Run Code Online (Sandbox Code Playgroud)
- 我想通过使用goquery包获得一个特定的值.
doc, err := goquery.NewDocumentFromReader(response.Body)
if err != nil {
log.Fatal(err)
}
doc.Find(".className").Each(func(i int, s *goquery.Selection) {
w.WriteString("============" + strconv.Itoa(i) + "============")
s.Find("tr").Each(func(i int, s_ *goquery.Selection) {
fmt.Println(s_.Text())
w.WriteString(s_.Text())
})
}
Run Code Online (Sandbox Code Playgroud)
)
但在这种情况下,我可以从2)得到一个我想要的值,但不能从3)得到任何东西.
首先,我认为问题是,3)的响应对象受2)动作的影响.因为它是一个参考对象.
所以我试着把它复制到另一个对象,然后再做一次.
origin := *response
Run Code Online (Sandbox Code Playgroud)
但是,我得到了与第一个相同的结果.
我该怎么办?如何通过其值将参考值分配给另一个?
我应该每次尝试两次吗?
我想使用 goquery 获取 DOM 的类型名称,如“a”、“img”、“tr”、“td”、“center”。我怎样才能得到?
package main
import (
"github.com/PuerkitoBio/goquery"
)
func main() {
doc, _ := goquery.NewDocument("https://news.ycombinator.com/")
doc.Find("html body").Each(func(_ int, s *goquery.Selection) {
// for debug.
println(s.Size()) // return 1
// I expect '<center>' on this URL, but I can't get it's name.
// println(s.First().xxx) // ?
})
}
Run Code Online (Sandbox Code Playgroud) 我想使用 Go 检索具有特定 id 的所有标签。显然,最简单的方法就是使用 goquery。
假设我正在网站中寻找ul带有 id 的标签。我想列出这样一个 .txt 文件中包含的所有内容。我以前从未使用过 jQuery,所以我感觉有点失落。MyTagsiteliul
resp, _ := http.Get(site)
httpBody := resp.Body
node, _ := html.Parse(httpBody)
document := goquery.NewDocumentFromNode(node)
document.Find("ul.MyTag").Each(func(i int, ul *goquery.Selection) { //MyTag will not work here
ul.Find("li").Each(func (i int, li *goquery.Selection){
...
})
})
Run Code Online (Sandbox Code Playgroud)
更具体地说,我的 html 看起来像
<html>
<body>
<ui id="yes">
<li key="1">a</li>
<li key="2">b</li>
<li key="3">c</li>
<li key="4">d</li>
</ui>
<ui id="no">
<li key="1">11</li>
<li key="2">22</li>
<li key="3">33</li>
<li key="4">44</li>
</ui>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我想取回钥匙 …
Goquery 在 语法方面,它尽可能接近 jQuery,尽可能使用相同的函数名称,以及温暖而模糊的可链接界面。
doc.Find("meta[property='og:image']").Each(func(i int, s *goquery.Selection) {
fmt.Fprintln("og data=", s)
})
Run Code Online (Sandbox Code Playgroud)
显然不够接近那个j-thing。
如何从 goquery 获取网页中的 og 数据?