Go 经常解析失败(goquery)

Go parsing failing quite often (goquery)

我有一个 Python program 检查亚马逊产品价格是否低于预期。

出于学习目的并使其更具可移植性,我将该代码移植到 Go。这是我的第一个 Go 程序。

为了解析 html,我使用 goquery。到目前为止,我只是想检索产品的名称。这是代码:

package main

import (
    "flag"
    "fmt"
    "log"

    "github.com/PuerkitoBio/goquery"
)

func main() {
    url := flag.String("url", "", "URL of the product")
    flag.Parse()

    doc, err := goquery.NewDocument(*url)
    if err != nil {
        log.Fatal(err)
    }

    name := doc.Find("#productTitle").Text()
    fmt.Println(name)
}

我遇到了什么问题?它在 8 次执行中大约有 1 次返回名称。这绝对是不正确的。这不是亚马逊的问题,也不是标签 #productTitle 的问题,因为 Python 代码每次都有效。

可能出了什么问题?我怎样才能进一步调试这个问题?我重复一遍,第一个使用 Go 的代码 :)

我发现了问题:)

我的 Python 代码和 Go 代码有些不同。在 Python 中,我发布了一个真正的 user-agent header,而在 Go 中,它是该包的默认值。

这意味着,实际上是亚马逊阻止了大部分尝试,并返回了验证码。