我正在学习"Go"用于网络爬网。我想从以下网站获取一些文本:;https://edition.cnn.com/markets/fear-and-greed">
此网站需要等待时间才能加载所有html文本。所以我用chromedp从这个网站获取文本
但是,当我运行这个脚本时,没有任何响应。代码是
package main
import (
"context"
"log"
"strings"
"github.com/chromedp/chromedp"
)
func main() {
opts := append(chromedp.DefaultExecAllocatorOptions[:],
chromedp.Flag("headless", false),
)
ctx, cancel := chromedp.NewExecAllocator(context.Background(), opts...)
defer cancel()
ctx, cancel = chromedp.NewContext(ctx)
defer cancel()
var res string
err := chromedp.Run(ctx,
chromedp.Navigate("https://edition.cnn.com/markets/fear-and-greed"),
chromedp.Text(".market-fng-gauge__dial-number-value", &res, chromedp.NodeVisible),
)
if err != nil {
log.Fatal(err)
}
log.Println(strings.TrimSpace(res))
}
什么是错的?我真的想废弃这个网站使用";去吧;。请让我知道怎么做。
我不知道为什么你没有得到结果,但chromedp似乎对你的任务有点太投入了。你可能更喜欢看https://github.com/antchfx/htmlquery,这是一个更简单的包,用于查找HTML文档中的各种元素。
这样更改代码:
diff --git a/main.go b/main.go
index dbc75b3..51521a8 100644
--- a/main.go
+++ b/main.go
@@ -23,7 +23,7 @@ func main() {
var res string
err := chromedp.Run(ctx,
chromedp.Navigate("https://edition.cnn.com/markets/fear-and-greed"),
- chromedp.Text(".market-fng-gauge__dial-number-value", &res, chromedp.NodeVisible),
+ chromedp.Text(".market-fng-gauge__dial-number-value", &res, chromedp.ByQuery, chromedp.NodeVisible),
)
if err != nil {
log.Fatal(err)
解释
请注意,默认情况下,chromedp.Query
操作使用chromedp.BySearch
选项,该选项包装DOM.performSearch。它返回由纯文本、css选择器或XPath匹配的所有结果。
因此,您应该指定chromedp.ByQuery
以确保它返回您想要的节点。
有关详细信息,请参阅此处:https://github.com/chromedp/chromedp/issues/936#issuecomment-951480271