• Welcome to Journal web site.

我是 PHP 程序员

- 开发无止境 -

Next
Prev

colly 里OnHTML获取匹配元素操作的几个方法

Data: 2020-10-06 17:40:32Form: JournalClick: 15

1、OnHTML 自带的方法

doc.OnHTML("#content", func(e *colly.HTMLElement) {
    println(`输出序号跟标签名`, e.Index, e.Name)
    //提取匹配到的元素自身的文本内容
    text := e.Text
    println(text)
    //提取指定子元素的文本内容。
    ChildText := e.ChildText("span#mine-selector")
    println(ChildText)
    //获取元素的属性值。通常用于提取链接、图片等元素的属性值。
    Attr := e.Attr("id")
    println(Attr)
    // 用于获取匹配到元素的特定子元素的单个属性值。
    // 获取第一个匹配的<span>标签的data-id属性值
    ChildAttr := e.ChildAttr("span.child", "data-id")
    fmt.Println("Child attribute:", ChildAttr)

    // 获取匹配到元素的子元素的属性值,返回一个属性值的切片。
    // 例如获取所有<li>标签的data-id属性值
    ChildAttrs := e.ChildAttrs("li", "data-id")
    for _, item := range ChildAttrs {
       fmt.Println("List item ID:", item)
    }

    // 返回匹配到的元素的DOM节点,可以用于进一步的查询或操作。
    dom := e.DOM // 获取<div class="content">DOM节点
    // 进行更多的DOM操作或查询
})

 

2、使用 e.ForEach 循环匹配子元素的方法

doc.OnHTML("body", func(e *colly.HTMLElement) {
    // 匹配和处理第一个内容
    e.ForEach("#selector-for-content-1", func(_ int, el *colly.HTMLElement) {
       // 处理第一个内容的逻辑
    })

    // 匹配和处理第二个内容
    e.ForEach("#selector-for-content-2", func(_ int, el *colly.HTMLElement) {
       // 处理第二个内容的逻辑
    })

    // ... 匹配和处理其他内容
})

 

3、使用 Unmarshal(结构体映射)的匹配方法

// 定义选择器机构体
type MovieDate struct {
    // 名称首字母必须大写
    Title string `selector:".hd span.title"`
}
//根据结构体规定的选择器来输出内容
doc.OnHTML("#content .grid_view li", func(s *colly.HTMLElement) {
    Movie := MovieDate{}
    if err := s.Unmarshal(&Movie); err != nil {
       log.Panicln("Failed to unmarshal:", err)
       return
    }
    fmt.Println("Title:", Movie.Title)
})

 

Name:
<提交>