ZBLOG

go 读取html中js window.__GLOBAL_DADA的值

在 Go 语言中,你可以使用第三方库 goquery 来解析 HTML,并查找 JavaScript 代码中的 window.__GLOBAL_DATA 值。以下是一个示例代码:

package main

import (
	"fmt"
	"log"
	"net/http"

	"github.com/PuerkitoBio/goquery"
)

func main() {
	resp, err := http.Get("http://example.com") // 替换为目标网页的 URL
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()

	doc, err := goquery.NewDocumentFromReader(resp.Body)
	if err != nil {
		log.Fatal(err)
	}

	var globalData string
	doc.Find("script").Each(func(i int, s *goquery.Selection) {
		scriptText := s.Text()
		if len(scriptText) > 0 && scriptContainsGlobalData(scriptText) {
			globalData = extractGlobalData(scriptText)
			return
		}
	})

	if globalData == "" {
		fmt.Println("未找到 window.__GLOBAL_DATA 的值")
	} else {
		fmt.Println("window.__GLOBAL_DATA 的值为:", globalData)
	}
}

// 判断脚本中是否包含 window.__GLOBAL_DATA
func scriptContainsGlobalData(scriptText string) bool {
	return (len(scriptText) > 0 && (scriptText.Contains("window.__GLOBAL_DATA") || scriptText.Contains(`window['__GLOBAL_DATA']`)))
}

// 提取 window.__GLOBAL_DATA 的值
func extractGlobalData(scriptText string) string {
	startIndex := strings.Index(scriptText, "window.__GLOBAL_DATA")
	endIndex := -1

	if startIndex >= 0 {
		startIndex += len("window.__GLOBAL_DATA")
		
    if strings.HasPrefix(string(scriptText[startIndex]), "=") || strings.HasPrefix(string(scriptText[startIndex]), ":") {
			startIndex++
			if startIndex < len(scriptText) {
				endIndex = strings.IndexAny(scriptText[startIndex:], "};,\n")
				if endIndex >= 0 {
					return strings.TrimSpace(string(scriptText[startIndex : startIndex+endIndex]))
				}
			}
		}
	}

	return ""
}

请将代码中的 URL 替换为你想要获取的 HTML 页面地址。该示例使用 goquery 库来解析 HTML,并遍历所有 script 标签,检查其中是否包含 window.__GLOBAL_DATA,如果找到则提取其值。如果无法找到或提取失败,则会打印相应的消息。请注意根据具体情况进行调整和扩展。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=18461

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?