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
|
func getDoc1(url string) error {
// NewDocument 根据网址拿到整个 html页面,仅作解释所以不处理 err
d, _ := goquery.NewDocument(url)
// Find 选择器 '.xxx'代表 class="xxx",'#'代表 id="xxx",没有 '.'或 '#'则匹配标签
// Find("div[class]") Find包含 class的 div,同理可以用 Find("div[class=name]")甚至Find("div[id][lang=zh]")继续缩小筛选范围,关于它的其他用法见代码块下面的表格
// Find("parent>child"),表示筛选parent这个父元素下,符合child这个条件的最直接(一级)的子元素
// Find("parent child"),表示筛选parent这个父元素下,符合child这个条件的所有(无论多少级)子元素,如 想要 body里的所有 div
// Find("div[lang=zh]+p"),查找相邻标签,和div[lang=zh]相邻的标签
// Find("div[lang=zh]~p"),查找兄弟(同级)标签,和div[lang=zh]同级的标签,不要求相邻
// Find("div,span") 选择器或(|)运算 以 ','分割 同时筛选出 div 和 span
// Find("div:contains(DIV2)"),内容过滤器
// :contains(DIV2) 表示筛选出的元素文本中要包含"DIV2",如<div>DIV2</div>
// :has(selector) contains差不多,只不过这个是包含的是元素节点,就是括号里的,Find("span:has(div)")的意思是找到包含 包含div的节点 的 span节点
// :first-child 只筛选的 first-child
// :first-of-type 只筛选的和 first-child同类型的节点
// :last-child 和 :last-of-type 同first
// :nth-child(n) 和 :nth-of-type(n) 类似上面的first,只不过这里指定第几个,:nth-child(1)等价于 :first-child
// :nth-last-child(n) 和:nth-last-of-type(n),同上不过是从后往前数,:nth-last-child(1)等价于 :last-child
// :only-child 独生子节点过滤器,匹配没有兄弟节点
// :only-of-type
d.Find(".el-image").Each(func(i int, s *goquery.Selection) {
// Attr 获取对应的标签的属性
href,_:=s.Attr("src")
fmt.Printf("%v src: ",s.Text())
fmt.Println(href)
})
return nil
}
|