在 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助手提供,问题来源于学员提问