症状
golang で http リクエストを投げてスクレイピングしたい時、特定のサイトでは全く情報が取れない時がありました。
解決策
Header 情報に Agent の情報を入れてあげると解決しました。
req.Header.Add("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1")
全体のコード
package main import ( "net/http" "fmt" "github.com/PuerkitoBio/goquery" ) const ( BaseUrl = "https://www.xxx/xxx_yyy" ) func main() { // リクエストを作る req, err := http.NewRequest("GET", BaseUrl, nil) if err != nil { panic(err) } req.Header.Add("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1") // リスエスト投げてレスポンスを得る client := &http.Client{} resp, err := client.Do(req) fmt.Println(resp) // レスポンスをNewDocumentFromResponseに渡してドキュメントを得る doc, err := goquery.NewDocumentFromResponse(resp) if err != nil { panic(err) } fmt.Println(doc) doc.Find("span.sub").Each(func(i int, s *goquery.Selection) { fmt.Println(s.Text()) fmt.Println(s) }) }