package main import ( "strings" "github.com/gocolly/colly" ) func ScrapeWhiskyde(shop Shop) []Angebot { Shop_url := "https://www.whisky.de/shop/Aktuell/Sonderangebote/" Whiskys := []Angebot{} c := colly.NewCollector( colly.AllowedDomains("whisky.de"), colly.AllowedDomains("www.whisky.de"), ) c.OnHTML(".is-buyable", func(e *colly.HTMLElement) { if e.Request.URL.String() != Shop_url { return } W := Angebot{} whisky_name := e.ChildAttr("a", "title") W.Name = whisky_name whisky_url := strings.Replace(e.ChildAttr("a", "href"), "?&searchorigin=2", "", 1) W.Url = whisky_url var err error e.ForEach(".article-price-original", func(i int, e *colly.HTMLElement) { W.Original_price, err = convert_price(e.ChildText("del")) if err != nil { Fatal(err, "Whisky.de: Converting original price failed") } }) e.ForEach(".article-price", func(i int, e *colly.HTMLElement) { W.Discounted_price, err = convert_price(e.ChildText(".article-price-default")) if err != nil { Fatal(err, "Whisky.de: Converting discounted price failed") } }) e.ForEach(".article-thumbnail", func(i int, e *colly.HTMLElement) { W.Image_url = e.ChildAttr("img", "data-src") }) e.ForEach(".article-price-prefix", func(i int, e *colly.HTMLElement) { //W.Valid_until = e.ChildText(".article-price-special") }) text_noisy := e.ChildText(".article-amount") if !strings.Contains(text_noisy, "Liter") { return } abv_noisy := strings.TrimSpace(strings.SplitAfter(text_noisy, "Liter")[1]) W.Volume, err = extract_volume(text_noisy) if err != nil { Fatal(err, "Whisky.de: Extracting volume failed") } W.Abv, err = extract_abv(abv_noisy) if err != nil { Fatal(err, "Whisky.de: Extracting abv failed") } if W.Volume == 0 { DebugOffer(W, "Whisky.de: Volume is zero") return } if W.Abv == 0 { DebugOffer(W, "Whisky.de: Abv is zero") return } W.Shop = shop.Id W.Spirit_type = "Whisky" W.Base_price, err = convert_price(e.ChildText(".article-unitprice-default")) if err != nil { Fatal(err, "Whisky.de: Converting base price failed") } e.Request.Visit(W.Url) W.Website = e.Request.Ctx.Get("website") Whiskys = append(Whiskys, W) }) c.OnHTML("body", func(e *colly.HTMLElement) { if e.Request.URL.String() == Shop_url { return } e.Request.Ctx.Put("website", string(e.Response.Body)) }) c.Visit(Shop_url) return Whiskys }