12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package godo
- import (
- "kkscrap-go/controllers/scraper/common"
- "kkscrap-go/model"
- "regexp"
- "strings"
- util "kkscrap-go/controllers/scraper/util"
- "github.com/PuerkitoBio/goquery"
- )
- func Parse(body string, item *model.ItemInfo) {
- item.Language = getLanguage(body)
- doc, err := goquery.NewDocumentFromReader(strings.NewReader(body))
- util.CheckError(err)
- doc.Find("meta").Each(func(i int, s *goquery.Selection) {
- v, _ := s.Attr("property")
- if v == "og:title" {
- item.ItemName = s.AttrOr("content", "")
- } else if v == "og:image" {
- item.Images = append(item.Images, s.AttrOr("content", ""))
- } else if v == "product:price:amount" {
- item.SalesPrice = util.GetFloat32(s.AttrOr("content", ""))
- } else if v == "product:price:currency" {
- item.Currency = s.AttrOr("content", "")
- }
- })
- item.OriginDesc, _ = doc.Find("div.detail_cont").Html()
- cats := doc.Find("div.location_tit").Text()
- if strings.Contains(cats, ",") {
- item.ItemCategory = strings.Split(cats, ",")
- } else if strings.Contains(cats, "/") {
- item.ItemCategory = strings.Split(cats, "/")
- }
- item.DeliveryPrice = util.GetPrice(doc.Find("dl.item_delivery>dd>strong").Text())
- doc.Find("select.chosen-select").Each(func(i int, selection *goquery.Selection) {
- opt := model.Option{}
- selection.Find("option").Each(func(i int, selection *goquery.Selection) {
- opt.Choices = append(opt.Choices, model.Choice{Name: selection.Text()})
- })
- item.Options = append(item.Options, opt)
- })
- doc.Find("li>a>img.middle").Each(func(i int, selection *goquery.Selection) {
- img, ok := selection.Attr("src")
- if ok {
- item.Images = append(item.Images, img)
- }
- })
- item.SalesPrice = getPrice(body)
- item.Currency = getCurrency(body)
- item.Emails = common.GetEmails(body)
- return
- }
- func getLanguage(body string) string {
- reg, _ := regexp.Compile("var gdLocale = '(.*)';")
- ss := reg.FindStringSubmatch(body)
- return ss[1]
- }
- func getCurrency(body string) string {
- reg, _ := regexp.Compile("var gdCurrencyCode = '(.*)';")
- ss := reg.FindStringSubmatch(body)
- return ss[1]
- }
- func getPrice(body string) float32 {
- reg, _ := regexp.Compile("'setGoodsPrice'[ ]*:[ ]*'(.*)'")
- ss := reg.FindStringSubmatch(body)
- return util.GetFloat32(ss[1])
- }
|