什么是soup

类似python中beatifulsoup,用于提取html标签提取,多用于爬虫。它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航,搜索以及修改剖析树的操作。利用它我们不在需要编写正则表达式就可以方便的实现网页信息的提取。soup是一个小型的网页提取包,其接口与beauthoulsoup非常相似。

下载

go get github.com/anaskhan96/soup

接口

  • var Headers map[string]string 将头文件设置为键-值对的映射,这是单独调用Header()的替代方法
  • var Cookies map[string]string 将Cookie设置为键-值对的映射,这是单独调用Cookie()的另一种方法
  • func Get(string) (string,error) {} 将url作为参数,返回HTML字符串
  • func GetWithClient(string, *http.Client) {} 将url和自定义HTTP客户端作为参数,返回HTML字符串
  • func Post(string, string, interface{}) (string, error) {} 以url、bodyType和负载为参数,返回HTML字符串
  • func PostForm(string, url.Values) {} 接受url和正文。bodyType设置为“application/x-www-form-urlencoded
  • func Header(string, string) {} 接受key,value对,将其设置为Get()中的HTTP请求的头
  • func Cookie(string, string) {} 接受key,value对,将其设置为要与Get()中的HTTP请求一起发送的Cookie
  • func HTMLParse(string) Root {} 以HTML字符串为参数,返回一个指向构造的DOM的指针
  • func Find([]string) Root {} Element标记,(属性键值对)作为参数,返回指向第一个出现的指针
  • func FindAll([]string) []Root {} 与Find()相同,但返回指向所有匹配项的指针
  • func FindStrict([]string) Root {} Element tag,(attribute key-value pair)作为参数,指向第一次出现的指针返回了完全匹配的值
  • func FindAllStrict([]string) []Root {} 与FindStrict()相同,但指向返回的所有引用的指针
  • func FindNextSibling() Root {} find指向同一个functing}元素的下一个functing}指针
  • func FindNextElementSibling() Root {} 指向返回的DOM中元素的下一个同级元素的指针
  • func FindPrevSibling() Root {} 指向返回的DOM中元素的上一个同级的指针
  • func FindPrevElementSibling() Root {} 指向返回的DOM中元素的上一个同级元素的指针
  • func Children() []Root {} 查找此DOM元素的所有直接子级
  • func Attrs() map[string]string {} map返回元素的所有属性作为对其各自值的查找
  • func Text() string {} 返回非嵌套标记内的全文,在嵌套标记中返回前半部分e
  • func FullText() string {} 返回嵌套/非嵌套标记内的全文
  • func SetDebug(bool) {} 将调试模式设置为true或false;默认为false
  • func HTML() {} HTML返回特定元素的HTML代码

例子

package main

import (
"fmt"
"os" "github.com/anaskhan96/soup"
) func main() {
resp, err := soup.Get("http://zhaohaiyu.com")
if err != nil {
os.Exit(1)
}
doc := soup.HTMLParse(resp)
links := doc.Find("div", "class", "res-cons").FindAll("article","class","post")
fmt.Println(links)
for _, link := range links {
l := link.Find("a")
fmt.Println(l.Text(), "-------->", l.Attrs()["href"])
}
}

结果

【置顶】golang目录 --------> https://zhaohaiyu.com/post/go/go_catalog/
go语言文件系统 --------> https://zhaohaiyu.com/post/go/go_file/
Flex --------> https://zhaohaiyu.com/post/javascript/flex/
makefile --------> https://zhaohaiyu.com/post/go/makefile/
air热加载 --------> https://zhaohaiyu.com/post/go/air/
thrift的介绍及其使用 --------> https://zhaohaiyu.com/post/go/thrift/
golang中间件的实现 --------> https://zhaohaiyu.com/post/go/middleware/
zap高性能日志 --------> https://zhaohaiyu.com/post/go/zap/
viper配置管理 --------> https://zhaohaiyu.com/post/go/viper/
proto Prometheus --------> https://zhaohaiyu.com/post/go/promethues/

golangHTML标签提取器soup的更多相关文章

  1. lua标签解析器

    lua 标签解析器 概述 一个类xml标签解析函数,将标签解析成Lua中的表结构它可以用来解析简单xml结构,可以作为RichLabel控件的字符串解析组件(其实它现在就是这么用的;-)) 原理 使用 ...

  2. Jmeter之Json提取器详解(史上最全)

    参考资料:https://www.bbsmax.com/A/D854lmBw5E/ Jsonpath在线测试:http://jsonpath.com/ 实际工作中用到的一些场景: 提取某个特定的值 提 ...

  3. JMeter 将上一个请求的结果作为下一个请求的参数——使用正则提取器(转载)

    在接口测试和压力测试过程中,经常会将几个流程串联起来才能测试.如:我要进行获取用户信息接口测试,我就要先登录成功后,才能获取用户信息.所以,我就要首先要登录,获得我的登录凭证(tokenId或tick ...

  4. jmeter 如何将上一个请求的结果作为下一个请求的参数——使用正则提取器

    1.简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可以用于测试静态和动态资源例如 ...

  5. Jmeter—5 关联 响应数据传递-正则表达式提取器

    在测试过程中,遇到一个问题:用户登录成功后服务器会返回一个登录凭证,之后所有的操作都需要带上此凭证.我们怎么获取登录凭证并传递给后续的操作? Jmeter提供了正则表达式提取器,用变量提取参数,后续通 ...

  6. Scala 深入浅出实战经典 第77讲:模式匹配下的提取器动手构造实战

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  7. JMeter学习-011-JMeter 后置处理器实例之 - 正则表达式提取器(三)多参数获取进阶引用篇

    前两篇文章分表讲述了 后置处理器 - 正则表达式提取器概述及简单实例.多参数获取,相应博文敬请参阅 简单实例.多参数获取. 此文主要讲述如何引用正则表达式提取器获取的数据信息.其实,正则表达式提取器获 ...

  8. JMeter学习-009-JMeter 后置处理器实例之 - 正则表达式提取器(二)多参数获取

    前文简述了通过后置处理器 - 正则表达式提取器 获取 HTTP请求 响应结果中的特定数据,未看过的亲,敬请参阅 JMeter学习-008-JMeter 后置处理器实例之 - 正则表达式提取器(一). ...

  9. JMeter学习-008-JMeter 后置处理器实例之 - 正则表达式提取器(一)概述及简单实例

    上文我们讲述了如何对 HTTP请求 的响应数据进行断言,以判断响应是否符合我们的预期,敬请参阅:JMeter学习-007-JMeter 断言实例之一 - 响应断言 那么我们如何获取 HTTP请求 响应 ...

随机推荐

  1. 第三篇 -- HTML基础

    买的课程学习 Web 前端标准 web前端技术指的不是某一项技术,而是一系列技术的集合,主要包括: html -- 结构标准:负责网页结构的搭建 css -- 样式标准/表现标准:负责网页的美化工作 ...

  2. JS 之循环 应用案例1

    应用场景:将el-select下拉框的lab值,显示在下面的详情text框,见下图 用到了 el-select 传值,js循环判断options.code是否等于传进来的值,等于就break; tex ...

  3. SpringCloud升级之路2020.0.x版-3.Eureka Server 与 API 网关要考虑的问题

    本系列为之前系列的整理重启版,随着项目的发展以及项目中的使用,之前系列里面很多东西发生了变化,并且还有一些东西之前系列并没有提到,所以重启这个系列重新整理下,欢迎各位留言交流,谢谢!~ 之前我们提到了 ...

  4. Java进阶练习题整理(1)

    1. 检查时异常.非检查时异常.运行时异常. Throwable是一切异常.错误类的超类,Throwable有两个子类,Error(错误)和Exception(异常).Exception异常又分为Ru ...

  5. RHCSA_DAY07

    echo $PATH 用户账号管理 用户账号的作用:用户账号可用来登录系统,可以实现访问控制 用户模板目录:/etc/skel/ [root@localhost ~]# ls -a /etc/skel ...

  6. 强烈IDEA这些插件,让你的开发速度飞起来!

    大家好,我是大彬~ 俗话说:工欲善其事必先利其器.今天给大家介绍几款我自己经常用的 IDEA 插件,很强大,助力大家开发. 插件安装 以IDEA为例,进入settings->Plugins-&g ...

  7. IOC(概念和原理)

    什么是 IOC (1)控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理 (2)使用 IOC 目的:为了耦合度降低 (3)做入门案例就是 IOC 实现 IOC 底层原理 xml 解 ...

  8. Linux下MySQL多实例部署记录

    什么是MySQL多实例 简单地说,Mysql多实例就是在一台服务器上同时开启多个不同的服务端口(3306.3307),同时运行多个Mysql服务进程,这些服务进程通过不同的socket监听不同的服务端 ...

  9. MySQL学习03(MySQL数据管理)

    MySQL数据管理 外键 外键概念 如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键.由此可见,外键表示了两个关系之间的相关联系.以另一个关系的外键作主关键字的表被称为主 ...

  10. GO语言的基本语法之变量,常量,条件语句,循环语句

    GO语言的基本语法之变量,常量,条件语句,循环语句 作为慕课网得笔记自己看 定义变量: 使用var关键字 var a, b, C bool var s1, s2 string = "hell ...