熟悉了《Golang 网络爬虫框架gocolly/colly 一》和《Golang 网络爬虫框架gocolly/colly 二》之后就可以在网络上爬取大部分数据了。本文接下来将爬取中证指数有限公司提供的行业市盈率。(http://www.csindex.com.cn/zh-CN/downloads/industry-price-earnings-ratio)

定义数据结构体:

type ZhjhHyShyl struct {Hydm string        `json:"行业代码"`Hymc string        `json:"行业名称"`Zxsj *float64      `json:"最新数据"`Gpjs int           `json:"股票家数"`Ksjs int           `json:"亏损家数"`Jygy *float64      `json:"近一个月"`Jsgy *float64      `json:"近三个月"`Jlgy *float64      `json:"近六个月"`Jyn  *float64      `json:"近一年"`Zhy  []*ZhjhHyShyl `json:"细分行业"`
}

接下来为gocolly调用准备,将用户代理设置为Chrome浏览器,该值可以通过Fiddler工具查看:

c.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299"


还可以利用Fiddler设置更多的Request Header,将爬虫工具伪装成浏览器。

接下来F12调用浏览器调试器查看目标数据的元素,拷贝jQuery选择器,然后改成相对路径。

完成所有的数据抓取代码:

package mainimport ("encoding/json""fmt""log""strconv""strings""github.com/PuerkitoBio/goquery""github.com/gocolly/colly"
)//证监会行业市盈率
type ZhjhHyShyl struct {Hydm string        `json:"行业代码"`Hymc string        `json:"行业名称"`Zxsj *float64      `json:"最新数据"`Gpjs int           `json:"股票家数"`Ksjs int           `json:"亏损家数"`Jygy *float64      `json:"近一个月"`Jsgy *float64      `json:"近三个月"`Jlgy *float64      `json:"近六个月"`Jyn  *float64      `json:"近一年"`Zhy  []*ZhjhHyShyl `json:"细分行业"`
}func main() {var err errorc := colly.NewCollector()c.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299"zjhHyShyl := make([]*ZhjhHyShyl, 0)c.OnRequest(func(r *colly.Request) {fmt.Printf("%+v\r\n%+v\r\n", *r, *(r.Headers))})c.OnHTML("td>table.list-div-table>tbody>tr", func(e *colly.HTMLElement) {hyShy := ZhjhHyShyl{Hydm: e.ChildText("td:first-child"),Hymc: e.ChildText("td:nth-child(2)"),}zxsj, err := strconv.ParseFloat(e.ChildText("td:nth-child(3)"), 64)if err == nil {hyShy.Zxsj = &zxsj}gpjs, err := strconv.ParseInt(e.ChildText("td:nth-child(4)"), 10, 32)if err == nil {hyShy.Gpjs = int(gpjs)}ksjs, err := strconv.ParseInt(e.ChildText("td:nth-child(5)"), 10, 32)if err == nil {hyShy.Ksjs = int(ksjs)}jygy, err := strconv.ParseFloat(e.ChildText("td:nth-child(6)"), 64)if err == nil {hyShy.Jygy = &jygy}jsgy, err := strconv.ParseFloat(e.ChildText("td:nth-child(7)"), 64)if err == nil {hyShy.Jsgy = &jsgy}jlgy, err := strconv.ParseFloat(e.ChildText("td:nth-child(8)"), 64)if err == nil {hyShy.Jlgy = &jlgy}jyn, err := strconv.ParseFloat(e.ChildText("td:nth-child(9)"), 64)if err == nil {hyShy.Jyn = &jyn}zjhHyShyl = append(zjhHyShyl, &hyShy)hyShy.Zhy = make([]*ZhjhHyShyl, 0)e.DOM.Parent().Parent().Next().Find("table.list-div-table>tbody>tr").Each(func(_ int, s *goquery.Selection) {zhy := ZhjhHyShyl{Hydm: strings.Trim(s.Find("td:nth-child(1)").Text(), "\r\n\t "),Hymc: strings.Trim(s.Find("td:nth-child(2)").Text(), "\r\n\t "),}zxsj, err := strconv.ParseFloat(strings.Trim(s.Find("td:nth-child(3)").Text(), "\r\n\t "), 64)if err == nil {zhy.Zxsj = &zxsj}gpjs, err := strconv.ParseInt(strings.Trim(s.Find("td:nth-child(4)").Text(), "\r\n\t "), 10, 32)if err == nil {zhy.Gpjs = int(gpjs)}ksjs, err := strconv.ParseInt(strings.Trim(s.Find("td:nth-child(5)").Text(), "\r\n\t "), 10, 32)if err == nil {zhy.Ksjs = int(ksjs)}jygy, err := strconv.ParseFloat(strings.Trim(s.Find("td:nth-child(6)").Text(), "\r\n\t "), 64)if err == nil {zhy.Jygy = &jygy}jsgy, err := strconv.ParseFloat(strings.Trim(s.Find("td:nth-child(7)").Text(), "\r\n\t "), 64)if err == nil {zhy.Jsgy = &jsgy}jlgy, err := strconv.ParseFloat(strings.Trim(s.Find("td:nth-child(8)").Text(), "\r\n\t "), 64)if err == nil {zhy.Jlgy = &jlgy}jyn, err := strconv.ParseFloat(strings.Trim(s.Find("td:nth-child(9)").Text(), "\r\n\t "), 64)if err == nil {zhy.Jyn = &jyn}hyShy.Zhy = append(hyShy.Zhy, &zhy)})})c.OnScraped(func(_ *colly.Response) {bData, _ := json.MarshalIndent(zjhHyShyl, "", "\t")fmt.Println(string(bData))})err = c.Visit("http://www.csindex.com.cn/zh-CN/downloads/industry-price-earnings-ratio?date=2017-12-27&type=zjh1")if err != nil {log.Fatal(err)}
}

运行后的部分结果:

{"行业代码": "D","行业名称": "电力、热力、燃气及水的生产和供应业","最新数据": 20.12,"股票家数": 107,"亏损家数": 5,"近一个月": 19.51,"近三个月": 19.7,"近六个月": 19.87,"近一年": 18.9,"细分行业": [{"行业代码": "44","行业名称": "电力、热力生产和供应业","最新数据": 18.75,"股票家数": 70,"亏损家数": 3,"近一个月": 18.28,"近三个月": 18.43,"近六个月": 18.55,"近一年": 17.44,"细分行业": null}, {"行业代码": "45","行业名称": "燃气生产和供应业","最新数据": 28.4,"股票家数": 22,"亏损家数": 2,"近一个月": 25.71,"近三个月": 25.33,"近六个月": 25.38,"近一年": 27.24,"细分行业": null}, {"行业代码": "46","行业名称": "水的生产和供应业","最新数据": 27.78,"股票家数": 15,"亏损家数": 0,"近一个月": 27.88,"近三个月": 29.33,"近六个月": 30.56,"近一年": 29.64,"细分行业": null}]
}

原文链接:Golang 网络爬虫框架gocolly/colly 三

Golang网络爬虫框架gocolly/colly(三)相关推荐

  1. Golang 网络爬虫框架gocolly/colly

    gocolly是Golang实现的网络爬虫框架,名列go版爬虫程序榜首. 安装 go get -u github.com/gocolly/colly/... 例子 import ( "fmt ...

  2. Golang 网络爬虫框架gocolly/colly 四

    爬虫靠演技,表演得越像浏览器,抓取数据越容易,这是我多年爬虫经验的感悟.回顾下个人的爬虫经历,共分三个阶段:第一阶段,09年左右开始接触爬虫,那时由于项目需要,要访问各大国际社交网站,Facebook ...

  3. 非零基础自学Golang 第17章 HTTP编程(上) 17.3 爬虫框架gocolly 17.3.1 gocolly简介

    非零基础自学Golang 文章目录 非零基础自学Golang 第17章 HTTP编程(上) 17.3 爬虫框架gocolly 17.3.1 gocolly简介 第17章 HTTP编程(上) 17.3 ...

  4. Go语言爬虫框架之Colly和Goquery

    文章目录 写在前面 Go语言爬虫框架之Colly和Goquery 网络爬虫 爬虫的简单算法 Colly 开始 OnHTML OnRequest / OnResponse HTMLElement Bri ...

  5. 开源 Python网络爬虫框架 Scrapy

    开源 Python 网络爬虫框架 Scrapy:http://blog.csdn.net/zbyufei/article/details/7554322 介绍 所谓网络爬虫,就是一个在网上到处或定向抓 ...

  6. 网络爬虫框架Scrapy简介

    作者: 黄进(QQ:7149101) 一. 网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本:它是一个自动提取网页的程序,它为搜索引擎从万维 ...

  7. 快速认识网络爬虫与Scrapy网络爬虫框架

    本课程为之后Scrapy课程的预先课程,非常简单,主要是为了完全没有基础的小白准备的,如果你已经有了一定的了解那么请跳过该部分 问:什么是网络爬虫 答:就是从网上下载数据的一个程序,只不过这个程序下载 ...

  8. 网络爬虫框架cetty的实现

    网络爬虫框架cetty的实现 功能介绍 maven配置 简单demo的实现 提供能力 关于demo的github地址如下 功能介绍 基于完全自定义事件处理机制的爬虫框架 模块化的设计,提供强大的可扩展 ...

  9. 基于java的网络爬虫框架(实现京东数据的爬取,并将插入数据库)

    本文为原创博客,仅供技术学习使用.未经允许,禁止将其复制下来上传到百度文库等平台. 目录 网络爬虫框架 网络爬虫的逻辑顺序 网络爬虫实例教学 model main util parse db 再看ma ...

最新文章

  1. 正则表达式贪婪模式及最短匹配
  2. php根据IP获取所有地,腾讯IP API
  3. h264 I帧的判断
  4. UVAL - 6755 - Swyper Keyboard
  5. 理解卷积神经网络的利器:9篇重要的深度学习论文(下)
  6. 语言孪生素数问题_刘建亚教授讲述“素数的故事”
  7. 温故知新,HTTP/2
  8. 想当好员工,想加薪,想提高的最起码应该注意的几项工作习惯
  9. ruby入门tips
  10. java 类修饰符 作用域_java的4种内部类,你真的了解了吗?
  11. 网吧无盘最新服务器配置,80-100台网吧无盘服务器配置方案建议
  12. 如何购买阿里云域名教程(域名购买+配置)~
  13. GAPS-银行综合前置系统
  14. 企业级用户画像: 价格敏感度模型-PSM
  15. 读书随笔(6)密码恢复
  16. 洋流[Theocean flow]介绍----科普知识
  17. Spring Cloud Alibaba x AppActive 带来的全新异地活动解决方案
  18. 软件测试基础知识汇总(问答篇)
  19. 纽约州立大学水牛城分校计算机科学专业,美国布法罗大学(纽约州立大学水牛城分校)介绍/专业/申请条件/奖学金 | Hotcourses中国...
  20. 位置式Pid和增量式Pid的定义及应用

热门文章

  1. uniapp集成极光推送证书与描述文件申请
  2. 红黑树的性质以及时间复杂度证明
  3. 我走过山的时候山不说话
  4. 【人工智能】基于百度AI+Python编程的简单应用:关于人像照片动漫化的分析实现(可进行批量化处理)——教你看到二次元中的自己
  5. ThinkPHP3.2 框架sql注入漏洞分析(2018-08-23)
  6. (剖面图全网唯一教程)如何利用EDEM制作剖面图 (自己琢磨出)
  7. Qt 使用摄像头通过openCV进行人脸识别
  8. figma中文显示不出_我的figma愿望列出了2020年要构建的10个功能
  9. 第三次寻人启事,寻找在日本的朋友王君
  10. Java容器之HashMap源码解析(视频讲解)