引言

之前用Python写过一个解析网页的脚本,最近开始研究golang,所以准备用golang将其重构,但是这个脚本中使用了到了python中的xpath库,所以研究了下,golang也有对应的库,这个库比我们使用正则从网页中获取我们需要的内容更简单些。

实例

我们以解析网页中的ip+端口为例:网站:https://www.kuaidaili.com/free/inha

1、引入包

github.com/antchfx/htmlquery v1.2.5 

2、获得网页内容

func getHtml(url_ string) string {req, _ := http.NewRequest("GET", url_, nil)req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3776.0 Safari/537.36")client := &http.Client{Timeout: time.Second * 5}resp, err := client.Do(req)if err != nil {log.Fatalln(err)}defer resp.Body.Close()data, err := ioutil.ReadAll(resp.Body)if err != nil && data == nil {log.Fatalln(err)}return fmt.Sprintf("%s", data)
}

3、解析内容

func main()  {
urlTemplate := "https://www.kuaidaili.com/free/inha/%d/"for i := 1; i < 4000; i++ {var proxies []stringhtml := getHtml(fmt.Sprintf(urlTemplate, i))root, _ := htmlquery.Parse(strings.NewReader(html))tr := htmlquery.Find(root, "//*[@id='list']/table/tbody/tr")for _, row := range tr {item := htmlquery.Find(row, "./td")ip := htmlquery.InnerText(item[0])port := htmlquery.InnerText(item[1])//type_ := htmlquery.InnerText(item[3])p := ip + ":" + portproxies = append(proxies, p)}}
}

通过上面代码我们就可以从页面中将我们需要的ip+port内容获取到,我们可以根据这种格式解析我们自己想要的网页内容。

4、xpath语法

XPath 语法 | 菜鸟教程

5、其它是实现

golang中多个包来实现xpath,我们再看下libxml2

包引入

go get github.com/lestrrat-go/libxml2

解析内容

<ol class="grid_view"><li><div class="item"><div class="info"><div class="hd"><a href="https://movie.douban.com/subject/1292052/" class=""><span class="title">肖申克的救赎</span><span class="title">&nbsp;/&nbsp;The Shawshank Redemption</span><span class="other">&nbsp;/&nbsp;月黑高飞(港)  /  刺激 1995(台)</span></a><span class="playable">[可播放]</span></div></div></div></li>....
</ol>

golang代码

func parseUrls(url string, ch chan bool) {doc := fetch(url)defer doc.Free()nodes := xpath.NodeList(doc.Find(`//ol[@class="grid_view"]/li//div[@class="hd"]`))for _, node := range nodes {urls, _ := node.Find("./a/@href")titles, _ := node.Find(`.//span[@class="title"]/text()`)log.Println(strings.Split(urls.NodeList()[0].TextContent(), "/")[4],titles.NodeList()[0].TextContent())}time.Sleep(2 * time.Second)ch <- true
}

这种方式比第一种方式使用起来麻烦一些,并且接口和文档都不是非常的完善。

【Golang实战】——XPath解析网页相关推荐

  1. python通过xpath解析网页爬取高清大图和王者荣耀英雄海报

    python通过xpath解析网页 xpath XPath,全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言.最初是用来搜寻 XML 文档的,但 ...

  2. 用xpath解析网页

    作者:金良(golden1314521@gmail.com) csdn博客:http://blog.csdn.net/u012176591 lxml手册:http://lxml.de/index.ht ...

  3. 使用xpath解析网页的实例(完整代码)

    本文以解析搜狗网页为例,使用xpath方法解析出来它的十个搜锁热词,代码简洁通俗易懂,非常适合初学者入门.完整代码如下: #导入相关库 import requests from lxml import ...

  4. Python3使用Xpath解析网易云音乐歌手页面

    Xpath最初被设计用来搜寻XML文档,但它同样适用于HTML文档的搜索.通过简洁明了的路径选择表达式,它提供了强大的选择功能:同时得益于其内置的丰富的函数,它可以匹配和处理字符串.数值.时间等数据格 ...

  5. Python爬虫(入门+进阶)学习笔记 1-4 使用Xpath解析豆瓣短评

    本节课程主要介绍解析神器Xpath是什么.Xpath如何安装及使用,以及使用实际的例子讲解Xpath如何解析豆瓣短评的网页并获取数据. 解析神器Xpath Xpath的使用 实战环节 解析神器Xpat ...

  6. 6、通过xpath获取网页数据

    1.xpath解析网页源文件 from urllib import request from lxml import etree # 请求的url url = "http://www.dfe ...

  7. python爬取微博评论(通过xpath解析的方式)

    前段时间笔者写了一份儿爬取微博评论的代码,是用了http://m.weibo.cn的接口,通过这个接口比较好的是代码比较好写,因为数据都是json格式的,规律性非常直观,属性json数据和字典操作的朋 ...

  8. Python爬虫实战之xpath解析

    XPath 是一门在 XML 文档中查找信息的语言,最初是用来搜寻 XML 文档的,但是它同样适用于 HTML 文档的搜索. 所以在Python爬虫中,我们经常使用xpath解析这种高效便捷的方式来提 ...

  9. scrapy无法使用xpath解析?特殊网页的信息提取(1) — 百度贴吧

    scrapy无法使用xpath解析?特殊网页的信息提取(1) - 百度贴吧 1. 背景 最近在使用scrapy爬取百度贴吧帖子内容时,发现用xpath无法解析到页面元素.但是利用xpath helpe ...

最新文章

  1. DeepMind推出分布式深度强化学习架构IMPALA,让一个Agent学会多种技能
  2. 皮一皮:高考考了 692 分想当程序员的女生
  3. anaconda应答文件
  4. 假如,只是假如把支付宝存储服务器炸了,里面的钱还在么?
  5. MySQL索引面试题:优化 索引分类
  6. 链表应用——多项式相加
  7. 移远EC600低功耗唤醒锁wakelock的使用,QuecPython功耗分析
  8. python教程(八)之异常(8.Warn)
  9. datawhale8月组队学习《pandas数据处理与分析》(下)(文本、分类、时序数据)
  10. test 4:假币问题
  11. 面试重点:starter原理以及自己动手实现一个starter
  12. Android,保存图片并通知系统更新相册
  13. Centos7.6上安装水族馆遇到报错BEGIN failed--compilation aborted at /usr/local/bin/asciiquarium line 42.
  14. 《“己学”发略》发略
  15. 微信小程序期末大作业 记单词小程序 适合初学者学习使用
  16. 一个简单的字幕滚动程序~~
  17. java实现网上招标系统
  18. HTML5期末大作业:个人空间相册网页设计 (6页) HTML+CSS+JavaScript
  19. AutoCAD如何快速标注零件序号
  20. 软考初级程序员--学习

热门文章

  1. 美国五名议员因新冠病毒“自我隔离”,至少两人曾与特朗普“接触”
  2. SVN服务器详解之用户权限配置——authz文件
  3. 基于 RISC-V SoC 的可配置 FFT 系统设计(2)RISC-V 的起源及其发展历程
  4. Apple Watch教程|如何取消配对并抹掉 Apple Watch?
  5. 阿里云人脸识别C#调用示例参考
  6. 【论文笔记】Deep Reinforcement Learning Control of Hand-Eye Coordination with a Software Retina
  7. Kubernetes基础:MacOS上设定Dashboard
  8. 论如何打开.md文件
  9. 51CTO学院 c++视频
  10. 关键词指数是什么意思?