golang解析网页利器goquery的使用方法

前言

本文主要给大家介绍了关于golang解析网页利器goquery使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

java里用Jsoup,nodejs里用cheerio,都可以相当方便的解析网页,在golang语言里也找到了一个网页解析的利器,相当的好用,选择器跟jQuery一样

安装

go get github.com/PuerkitoBio/goquery

使用

其实就是项目的readme.md里的demo

package main

import (
 "fmt"
 "log"

 "github.com/PuerkitoBio/goquery"
)

func ExampleScrape() {
 doc, err := goquery.NewDocument("http://metalsucks.net")
 if err != nil {
 log.Fatal(err)
 }

 // Find the review items
 doc.Find(".sidebar-reviews article .content-block").Each(func(i int, s *goquery.Selection) {
 // For each item found, get the band and title
 band := s.Find("a").Text()
 title := s.Find("i").Text()
 fmt.Printf("Review %d: %s - %s\n", i, band, title)
 })
}

func main() {
 ExampleScrape()
}

乱码问题

中文网页都会有乱码问题,因为它默认是utf8编码,这时候就要用到转码器了

安装 iconv-go

go get github.com/djimenez/iconv-go

使用方法

func ExampleScrape() {
 res, err := http.Get(baseUrl)
 if err != nil {
 fmt.Println(err.Error())
 } else {
 defer res.Body.Close()
 utfBody, err := iconv.NewReader(res.Body, "gb2312", "utf-8")
 if err != nil {
  fmt.Println(err.Error())
 } else {
  doc, err := goquery.NewDocumentFromReader(utfBody)
  // 下面就可以用doc去获取网页里的结构数据了
  // 比如
  doc.Find("li").Each(func(i int, s *goquery.Selection) {
  fmt.Println(i, s.Text())
  })
 }
 }
}

进阶

有些网站会设置Cookie, Referer等验证,可以在http发请求之前设置上请求的头信息

这个不属于goquery里的东西了,想了解更多可以查看golang里的 net/http 包下的方法等信息

baseUrl:="http://baidu.com"
client:=&http.Client{}
req, err := http.NewRequest("GET", baseUrl, nil)
req.Header.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
req.Header.Add("Referer", baseUrl)
req.Header.Add("Cookie", "your cookie") // 也可以通过req.Cookie()的方式来设置cookie
res, err := client.Do(req)
defer res.Body.Close()
//最后直接把res传给goquery就可以来解析网页了
doc, err := goquery.NewDocumentFromResponse(res)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

参考

  • https://github.com/PuerkitoBio/goquery
  • https://github.com/PuerkitoBio/goquery/issues/185
  • https://github.com/PuerkitoBio/goquery/wiki/Tips-and-tricks#handle-non-utf8-html-pages
(0)

相关推荐

  • golang使用正则表达式解析网页

    废话少说,直接奉上代码: 复制代码 代码如下: package main import ( "fmt" "time" "io/ioutil" "net/http" "regexp" "strings" ) func main() {     ip_pool := []string{                 "172.16.1.128",            

  • golang解析网页利器goquery的使用方法

    前言 本文主要给大家介绍了关于golang解析网页利器goquery使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. java里用Jsoup,nodejs里用cheerio,都可以相当方便的解析网页,在golang语言里也找到了一个网页解析的利器,相当的好用,选择器跟jQuery一样 安装 go get github.com/PuerkitoBio/goquery 使用 其实就是项目的readme.md里的demo package main import ( "f

  • Python通过解析网页实现看报程序的方法

    本文所述实例可以实现基于Python的查看图片报纸<参考消息>并将当天的图片报纸自动下载到本地供查看的功能,具体实现代码如下: # coding=gbk import urllib2 import socket import re import time import os # timeout in seconds #timeout = 10 #socket.setdefaulttimeout(timeout) timeout = 10 urllib2.socket.setdefaulttim

  • golang解析html网页的方法

    1.先看一下整个结构: 主要是web和html目录,分别存放go代码和html相关的资源文件. 2.html代码比较简单,代码如下: <html> <head> <title>Go web</title> </head> <body> <img src="/html/pics/girl.jpg" width="500" height="500"> <form

  • php基于Snoopy解析网页html的方法

    本文实例讲述了php基于Snoopy解析网页html的方法.分享给大家供大家参考.具体实现方法如下: set_time_limit(0); $user = array('20517', '20518'); header("content-Type: text/html; charset=utf-8"); require_once './Snoopy.php'; $snoopy = new Snoopy(); //$uri = 'http://www.juzimi.com/meitume

  • golang解析xml的方法

    本文实例讲述了golang解析xml的方法.分享给大家供大家参考,具体如下: golang解析xml真是好用,特别是struct属性的tag让程序简单了许多,其他变成语言需要特殊类型的在golang里直接使用tag舒服 xml文件点击此处本站下载. 完整示例代码: 复制代码 代码如下: package main import (     "os"     "encoding/xml"     // "encoding/json"     &quo

  • Python读取本地文件并解析网页元素的方法

    如下所示: from bs4 import BeautifulSoup path = './web/new_index.html' with open(path, 'r') as f: Soup = BeautifulSoup(f.read(), 'lxml') titles = Soup.select('ul > li > div.article-info > h3 > a') for title in titles: print(title.text) 输出: Sardinia

  • Golang解析JSON遇到的坑及解决方法

    目录 写在前面 空指针会被解析成字符串"null" int类型会被解析成float64 写在前面 在写go的时候经常用到序列化.反序列化,记录一下遇到过的坑. 空指针会被解析成字符串"null" type Person struct { Name string Age int } func main() { var p *Person bytes, err := json.Marshal(p) checkError(err) fmt.Printf("len

  • 利用Golang解析json数据的方法示例

    本文主要给大家介绍的是关于Golang解析json数据的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 使用 Golang 解析 json 数据,这种 json 格式是对象的数组,官方文档有一个示例: var jsonBlob = []byte(`[ {"Name": "Platypus", "Order": "Monotremata"}, {"Name": "Quoll

  • Python解析网页源代码中的115网盘链接实例

    本文实例讲述了python解析网页源代码中的115网盘链接的方法.分享给大家供大家参考.具体方法分析如下: 其中的1.txt,是网页http://bbs.pediy.com/showthread.php?t=144788另存为1.txt 具体代码如下: import re if __name__ == "__main__": fp = open("c:\\1.txt") https = re.compile(r"(http://u.*)") fo

  • 在Java代码中解析html,获取其中的值方法

    有时我们获取到了页面需要在Java代码中进行解析,获取html中的数据,Jsoup是一个很方便的工具. 一.什么是Jsoup? 官网网站:http://jsoup.org/ 可在官网下载对应的jar 通俗的将Jsoup就是一个解析网页的东西 二.示例 1.页面,通过查询获取到了一些数据: 2.源码,这是一个table,class="list",通过这些来唯一标识它 3.代码,将html以String的形式传进来,使用Jsoup进行解析: import org.jsoup.Jsoup;

随机推荐