美文网首页
go解析html

go解析html

作者: 岑吾 | 来源:发表于2021-12-21 22:33 被阅读0次

在go中可以使用goquery库来解析html,这个有点类似于jQuery的库,提供与 jQuery 相近的接口。

一、安装

go get -u github.com/PuerkitoBio/goquery

二、使用

1. 创建goquery对象

使用NewDocument简单的创建,但不推荐这么用,建议使用http.Get()成功后,装body传给NewDocumentFromReader创建

doc, err := goquery.NewDocument("https://zengwu.com.cn")

使用NewDocumentFromReader创建还可以从本地文件或内存中构造对象

res, err := http.Get("https://zengwu.com.cn")
  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)
  }

2. 查找head中数据

<html class="theme-next pisces use-motion" lang="zh-CN">
<head>
  <meta charset="UTF-8"/>
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
  <meta name="theme-color" content="#222">
  ...

如有以上网页头数据,我们要找出charset编码

    // 查找head
    head := doc.Find("head")
    
    // 查找meta属性项charset
    charset := head.Find("meta[charset]")
    
    // 获取charset中的charset属性值
    str, _ := charset.Attr("charset")

    fmt.Println(str)

3. 查找html中的id

<nav class="site-nav">
    <ul id="menu" class="menu">
        <li class="menu-item menu-item-home">
          <a href="/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-home"></i> <br /> 首页
          </a>
        </li>
...

如有以上网页头数据,要找出id为menu的项

menu := doc.Find("#menu")

4. 查找html中的class

还是上面代码,要找出nav class为site-nav的项

menu := doc.Find("nav.site-nav")

5. 查找所有div或列表数据

<div class="pull-left" style="white-space:nowrap">
    01-01
    <a href="/p/26da89a5.html" title="将阿里云盘映射成本地磁盘">将阿里云盘映射成本地磁盘</a>
</div><br>

<div class="pull-left" style="white-space:nowrap">
    12-05
    <a href="/p/c1edbab3.html" title="bat中的enabledelayedexpansion">bat中的enabledelayedexpansion</a>
</div><br>

<div class="pull-left" style="white-space:nowrap">
    11-21
    <a href="/p/afe6edd9.html" title="Nginx配置跨域">Nginx配置跨域</a>
</div><br>

<div class="pull-left" style="white-space:nowrap">
    11-19
    <a href="/p/e334394.html" title="curl发送POST请求">curl发送POST请求</a>
</div><br>

<div class="pull-left" style="white-space:nowrap">
    11-18
    <a href="/p/334d5fc9.html" title="Java中byte数组和String字符串相互转换">Java中byte数组和String字符串相互转换</a>
</div><br>

找出所有class为pull-left的div,然后在每个div下搜索<a>,获取<a>的显示文本内容

    var txt = []string{}
    doc.Find("div.pull-left").Each(func(i int, s *goquery.Selection) {
        a := s.Find("a").Text()
        txt = append(txt, a)
    })

    fmt.Println(txt)

相关文章

  • go解析html

    在go中可以使用goquery库来解析html,这个有点类似于jQuery的库,提供与 jQuery 相近的接口。...

  • go实现htmltemplate不转义html标签

    go中如何让html/template不转义html标签(实现前端htm能够解析服务器返回的带html标签的字符串...

  • go小项目-html解析

    项目要求 解析一个html页面,将其中的href标签中的链接地址和href标签所包裹的content内容,组成一个...

  • golang:xpath选择器htmlquery简单用法

    在做爬虫时,经常要用到html解析器提取数据,Python里面有神器lxml,go里面可以选择htmlquery或...

  • 记一次jsoup的使用

    Jsoup是用于解析HTML,就类似XML解析器用于解析XML。 Jsoup它解析HTML成为真实世界的HTML。...

  • golang微服务框架go-zero系列-3:在go-zero中

    go-zero本身支持html模板解析,我们只需要添加url对应模板解hanlder,实现逻辑就可以了 但是win...

  • lxml的使用方法

    使用lxml解析HTML代码 1.解析html字符串:使用lxml.etree.HTML进行解析,示例代码如下: ...

  • 阻塞解析与阻塞渲染

    Block Parsing: 阻塞解析 script 标签会阻塞 html 页面的解析,阻塞解析:html 页面会...

  • 重绘和重排(回流)

    一、浏览器渲染HTML的步骤 HTML被HTML解析器解析成DOM Tree, CSS则被CSS解析器解析成CSS...

  • 虚拟DOM是啥?

    一、浏览器渲染HTML的步骤 HTML被HTML解析器解析成DOM Tree, CSS则被CSS解析器解析成CSS...

网友评论

      本文标题:go解析html

      本文链接:https://www.haomeiwen.com/subject/oqrfqrtx.html