summaryrefslogtreecommitdiff
path: root/scrape/query.go
blob: 1fe5ea4fab2c2e135993e54e724108fa700c7130 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package scrape

import (
	"strings"

	"github.com/PuerkitoBio/goquery"
)

var emptyDoc, _ = goquery.NewDocumentFromReader(strings.NewReader(""))

func Doc(html string) *goquery.Selection {
	doc, err := goquery.NewDocumentFromReader(strings.NewReader(html))
	if err != nil {
		return emptyDoc.Selection
	}
	return doc.Selection
}

func Query(s *goquery.Selection, selector string) string {
	val := s.Find(selector).First().Text()
	return strings.TrimSpace(val)
}

func QueryAttr(s *goquery.Selection, selector, attr string) string {
	val := s.Find(selector).First().AttrOr(attr, "")
	return strings.TrimSpace(val)
}

func QueryHTML(s *goquery.Selection, selector string) string {
	val, err := goquery.OuterHtml(s.Find(selector))
	if err != nil {
		return ""
	}
	return strings.TrimSpace(val)
}

func QueryFunc(s *goquery.Selection, selector string, f func(*goquery.Selection)) {
	s.Find(selector).Each(func(i int, s *goquery.Selection) {
		f(s)
	})
}