Loading... goquery类似jquery,它是jquery的go版本实现。使用它,可以很方便的对HTML进行处理。 ## 接本使用 ```Golang dom,err := goquery.NewDocumentFromReader(strings.NewReader(html)) dom.Find("表达式").Each(func(i int, selection *goquery.Selection) { fmt.Println(selection.Text()) }) ``` ## 选择器 ### 元素选择器 ```Golang //选择并遍历所有div标签 dom.Find("div").Each(func(i int, selection *goquery.Selection) { fmt.Println(selection.Text()) }) ``` 直接使用 `a` `p` `div`这类标签名就可以表示选中所有标签。 ### ID/CSS选择器 **ID选择器** ```Golang //选择并遍历所有id为title的标签 dom.Find("#title").Each(func(i int, selection *goquery.Selection) { fmt.Println(selection.Text()) }) //选择并遍历所有id为title的div标签 dom.Find("div#title").Each(func(i int, selection *goquery.Selection) { fmt.Println(selection.Text()) }) ``` **CSS选择器** ```Golang //选择并遍历所有class为content的标签 dom.Find(".content").Each(func(i int, selection *goquery.Selection) { fmt.Println(selection.Text()) }) //选择并遍历所有class为content的p标签 dom.Find("p#content").Each(func(i int, selection *goquery.Selection) { fmt.Println(selection.Text()) }) ``` ### 参数选择器 ```Golang //选择并遍历所有包含class参数的div标签 dom.Find("div[css]").Each(func(i int, selection *goquery.Selection) { fmt.Println(selection.Text()) }) //选择并遍历所有class参数为name的div标签 dom.Find("div[css=name]").Each(func(i int, selection *goquery.Selection) { fmt.Println(selection.Text()) }) ``` | 选择器 | 说明 | | - | - | | Find("div[lang]") | 筛选含有lang属性的div元素 | | Find("div[lang=zh]") | 筛选lang属性为zh的div元素 | | Find("div[lang!=zh]") | 筛选lang属性不等于zh的div元素 | | Find("div[lang¦=zh]") | 筛选lang属性为zh或者zh-开头的div元素 | | Find("div[lang*=zh]") | 筛选lang属性包含zh这个字符串的div元素 | | Find("div[lang~=zh]") | 筛选lang属性包含zh这个单词的div元素,单词以空格分开的 | | Find("div[lang$=zh]") | 筛选lang属性以zh结尾的div元素,区分大小写 | | Find("div[lang^=zh]") | 筛选lang属性以zh开头的div元素,区分大小写 | 当然你也可以使用多个属性筛选器组合使用,比如:`Find("div[id][lang=zh]")`。 ### 子元素选择器 ```Golang //选择并遍历所有 父元素为body的一级div标签 dom.Find("body>div").Each(func(i int, selection *goquery.Selection) { fmt.Println(selection.Text()) }) //选择并遍历所有 父元素为body的div标签 dom.Find("p#content").Each(func(i int, selection *goquery.Selection) { fmt.Println(selection.Text()) }) ``` ### 相邻/兄弟选择器 ```Golang //选择并遍历所有 div相邻的下一个p标签 dom.Find("div+p").Each(func(i int, selection *goquery.Selection) { fmt.Println(selection.Text()) }) ``` ```Golang //选择并遍历所有 div相邻的同级p标签 dom.Find("div~p").Each(func(i int, selection *goquery.Selection) { fmt.Println(selection.Text()) }) ``` ## 过滤器 ### :first-child过滤器 ```Golang //选择第一个结果 dom.Find("div:first-child").Each(func(i int, selection *goquery.Selection) { fmt.Println(selection.Html()) }) ``` ### :first-of-type过滤器 ```Golang //选择第一个同类型结果 dom.Find("div:first-of-type过滤器").Each(func(i int, selection *goquery.Selection) { fmt.Println(selection.Html()) }) ``` ### :last-child 和 :last-of-type过滤器 与前两个相同,不过是选择最后一个。 ### :nth-child(n) 过滤器 选择第n个子元素。 ### :nth-of-type(n) 过滤器 选择第n个同类型子元素。 ### :nth-last-child(n) 和:nth-last-of-type(n) 过滤器 与前两个相同,不过是选着倒数第n个 ### :only-child 过滤器 ```Golang html := `<body> <div lang="zh">DIV1</div> <span> <div>DIV5</div> </span> </body> ` dom,err:=goquery.NewDocumentFromReader(strings.NewReader(html)) if err!=nil{ log.Fatalln(err) } dom.Find("div:only-child").Each(func(i int, selection *goquery.Selection) { fmt.Println(selection.Html()) }) ``` 在这里只有DIV5会被选出来,因为他是他父标签的“独生子”。 ### :only-of-type 过滤器 只选择同类型的子元素。 Last modification:November 8th, 2020 at 01:30 pm © 允许规范转载