为了账号安全,请及时绑定邮箱和手机立即绑定

GET 请求的输出与查看源不同

GET 请求的输出与查看源不同

Go
HUX布斯 2022-01-04 10:00:12
我正在尝试从 whoscored.com 中提取匹配数据。当我在 firefox 上查看源代码时,我在第 816 行找到了一个很大的 json 字符串,其中包含我想要的 matchid 数据。我的目标是最终得到这个 json。为此,我尝试下载https://www.whoscored.com/Matches/ID/Live 的每一页,其中 ID 是比赛的 ID。我写了一个小的 Go 程序来 GET 请求每个 ID 到某个点:package mainimport (    "fmt"    "io/ioutil"    "net/http"    "os")// http://www.whoscored.com/Matches/614052/Live is the match for// Eveton vs Manchesterconst match_address = "http://www.whoscored.com/Matches/"// the max id we getconst max_id = 300const num_workers = 10// function that get the bytes of the match id from the websitefunc match_fetch(matchid int) {    url := fmt.Sprintf("%s%d/Live", match_address, matchid)    resp, err := http.Get(url)    if err != nil {        fmt.Println(err)        return    }    // if we sucessfully got a response, store the    // body in memory    defer resp.Body.Close()    body, err := ioutil.ReadAll(resp.Body)    if err != nil {        fmt.Println(err)        return    }    // write the body to memory    pwd, _ := os.Getwd()    filepath := fmt.Sprintf("%s/match_data/%d", pwd, matchid)    err = ioutil.WriteFile(filepath, body, 0644)    if err != nil {        fmt.Println(err)        return    }}// data type to send to the workers,// last means this job is the last one// matchid is the match id to be fetched// a matchid of -1 means don't fetch a matchtype job struct {    last    bool    matchid int}func create_worker(jobs chan job) {    for {        next_job := <-jobs        if next_job.matchid != -1 {            match_fetch(next_job.matchid)        }        if next_job.last {            return        }    }}该代码似乎可以工作,因为它用 html 填充了一个名为 match_data 的目录。问题是这个html和我在浏览器中得到的完全不同!这是我认为执行此操作的部分:(来自http://www.whoscored.com/Matches/614052/Live的 GET 请求正文。我认为是这种情况的原因是页面中的 javascript 获取并将 DOM 编辑为我在查看源中看到的内容。如何让 golang 运行 javascript?有图书馆可以做到这一点吗?更好的是,我可以直接从服务器获取 JSON 吗?
查看完整描述

2 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

一般来说,最好使用 Web API 而非抓取。例如,whoscored 自己使用 OPTA,您应该可以直接访问它。

http://www.jokecamp.com/blog/guide-to-football-and-soccer-data-and-apis/#opta


查看完整回答
反对 回复 2022-01-04
?
富国沪深

TA贡献1790条经验 获得超9个赞

这可以通过https://godoc.org/github.com/sourcegraph/webloop#View.EvaluateJavaScript完成 阅读他们的主要示例https://github.com/sourcegraph/webloop

一般来说,您需要的是“无头浏览器”。


查看完整回答
反对 回复 2022-01-04
  • 2 回答
  • 0 关注
  • 312 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信