2021-10-09 来源:华纳网 责任编辑:韩玉玲 人气:
核心提示:GoQuery解析神器

知识点:

GoQuery解析神器

 


 

本课内容:

大家好,欢迎来到谷雨课堂,

 

与第三方平台进行数据交互时,

如果对方没有提供标准的API,

我们就需要直接解析对方系统的结构化数据,

这种技术有些应用也用于“爬虫”,

用于自动抓取网络上的数据,

在Go中,

我们可以非常方便的解析这些DOM数据,

GoQuery就是较方便之一,

 

 

以下是部分测试用的代码,

可以很好的工作:

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
package main
import ("fmt""log""net/http"

"github.com/PuerkitoBio/goquery")

func TestDomQUery() {

// 载入HTML文档  res, err := http.Get("https://news.sina.com.cn/china/")if err != nil {    log.Fatal(err)  }defer res.Body.Close()if res.StatusCode != 200 {    log.Fatalf("status code error: %d %s", res.StatusCode, res.Status)  }

// 获取文档内容  doc, err := goquery.NewDocumentFromReader(res.Body)if err != nil {    log.Fatal(err)  }

// 找所有DIV标签  doc.Find("div").Each(func(i int, s *goquery.Selection) {// 找所有链接    title := s.Find("a").Text()    fmt.Printf("Link %d: %s\n", i, title)  })}

func main() {  TestDomQUery()}


 

扩展阅读:

GoQuery是基于Go标准库net/html及css选择器cascadia的基础实现的。

GoQuery对外暴露两个struct:

Document和Selection,

一个interface:Matcher。

与 jQuery 不同,

jQuery 作为 DOM 文档的一部分加载,

因此对包含的文档进行行为,

GoQuery 不知道要对哪个 HTML 文档进行操作。

因此,它需要被告知Document。

它持有根文档节点作为要操作的初始Selection值。

 

jQuery 通常具有同一函数的许多变体

(无参数、selector字符串参数、jQuery 对象参数、DOM 元素参数等)。

为了在GoQuery中公开具有可变空接口参数的同样特性的单个方法,

按照以下命名约定使用静态类型标识:

 

当 jQuery 等效项没有参数可以被调用时,

它具有与无参数标识的 jQuery 相同的名称(例如:Prev()),

并且具有一个selector字符串参数的版本称为XxxFiltered()(例如:PrevFiltered())

 

当 jQuery 等效项需要一个参数时,

selector字符串版本使用与 jQuery 相同的名称(例如:Is())

 

接受 jQuery 对象作为参数,

在 GoQuery 中定义为XxxSelection(),

并且将*Selection对象作为参数(例如:FilterSelection())

 

在 jQuery 中接受 DOM 元素作为参数的标识,

在 GoQuery 中定义为XxxNodes(),

并具有类型的可变参数*html.Node(例如:FilterNodes())

 

在 jQuery 中接受函数作为参数的标识,

在 GoQuery 中定义为XxxFunction(),

并且将函数作为参数(例如:FilterFunction())

 

可以用selector字符串调用的GoQuery方法有一个对应的版本,

该版本采用Matcher接口,定义为XxxMatcher()

 

不在 jQuery 中但在 Go 中有用的实用程序函数作为函数实现(以*Selection 为参数),

以避免*Selection方法上的潜在命名冲突(为 jQuery 等效行为保留)。

 

 

完整的源代码可以登录【华纳网】下载。

https://www.worldwarner.com/




 





免责声明:本文仅代表作者个人观点,与华纳网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。