Golang(8)

编程入门 行业动态 更新时间:2024-10-08 10:59:55

<a href=https://www.elefans.com/category/jswz/34/1769831.html style=Golang(8)"/>

Golang(8)

文章目录

      • 一、goquery库的安装
      • 二、goquery的使用
      • 三、爬取CSDN首页文章
        • 3.1、需求分析
        • 3.2、分析当前页面的html文档
      • 四、爬虫完整程序


更多关于Golang核心编程知识的文章请看:Golang核心编程(0)-目录页


goquery是golang的一个爬虫常用第三方库,它主要的作用是处理html文档,将其我们需要的内容进行筛选处理。goquery是golang领域的jquery,它的使用和jquery的选择器有十分相似,如果你学过jquery,那么将十分容易上手。

一、goquery库的安装

具体的安装方式网上讲得很清楚,但是你可能会遇到以下问题:
报错package golang/x/net/websocket: unrecognized import path
原因在于本地缺少一个golang/x/net的包,用以下方法可以解决:

二、goquery的使用

网上有两篇文章讲得很清楚,这里就不再讲了,大家可以查阅:

  • golang goquery selector(选择器) 示例大全
  • goquery文档

三、爬取CSDN首页文章

3.1、需求分析

显示,打开CSDN的首页,我们先确定我们需要爬的数据是什么

这次我打算爬的是首页文章中的文章名文章地址文章作者以及阅读数

3.2、分析当前页面的html文档

右键,查看页面的源代码,并将源代码拷贝到阅读工具中方便阅读,这里我用的是notepad++去分析html文档

  • 1、首先锁定文章名所在的位置

很快可以发现,文章名的外层是一个a标签,而所有的文章数据都以 list_con这个class的方式循环而得,所以,获取文章名的goquery选择器可以这么写:

document.Find("#feedlist_id").Find("div.list_con").Each(func(i int, selection *goquery.Selection) {name1 := selection.Find("div.title h2 a")fmt.Printf("name is :%v\n",name1.Text())})

得出以下结果,成功地获取了所有文章的名字,第一步完成

  • 2、锁定文章地址位置
document.Find("#feedlist_id").Find("div.list_con").Each(func(i int, selection *goquery.Selection) {url,_:= selection.Find(".read_num").Find("a").Attr("href")fmt.Printf("url is :%v\n",url)})

这里锁定了a标签之后,用了Attr方法去获得href属性中的地址值:

  • 3、锁定文章作者
document.Find("#feedlist_id").Find("div.list_con").Each(func(i int, selection *goquery.Selection) {author := selection.Find(".name").Find("a")fmt.Printf("author is :%v\n",author.Text())})

  • 4、锁定文章阅读数
document.Find("#feedlist_id").Find("div.list_con").Each(func(i int, selection *goquery.Selection) {numbers := selection.Find(".read_num").Find("a span.num")fmt.Printf("numbers is :%v\n",numbers.Text())})

四、爬虫完整程序

package mainimport ("net/http""github/PuerkitoBio/goquery""fmt""strings"
)func main() {//获得responseresponse, err := http.Get("/")if err != nil{return}//使用goquery解析response响应体获得html文档document, err := goquery.NewDocumentFromReader(response.Body)if err != nil{return}defer response.Body.Close()//开始解析document.Find("#feedlist_id").Find("div.list_con").Each(func(i int, selection *goquery.Selection) {name1 := selection.Find("div.title h2 a")url,_:= selection.Find(".read_num").Find("a").Attr("href")author := selection.Find(".name").Find("a")numbers := selection.Find(".read_num").Find("a span.num")fmt.Printf("index is :%d|name is :%v|author is :%v|numbers is :%v|url is :%v \n",i,strings.TrimSpace(name1.Text()),strings.TrimSpace(author.Text()),numbers.Text(),strings.TrimSpace(url))})}

成功地爬取了CSDN首页的文章数据,之后可以将其写入文件中或者数据库中,如需改进性能的话可以改用多协程,有兴趣的朋友可以深入研究!

index is :0|name is :Python爬取抖音APP,竟然只需要十行代码|author is :娇兮心有之|numbers is :2262|url is : 
index is :1|name is :千万别做老板最不能容忍的三种人 z|author is :这个也很漂亮|numbers is :1712|url is : 
index is :2|name is :程序员晒出小学儿子满分作文《我的爸爸》,真实的让人心疼|author is :taya_a|numbers is :1642|url is : 
index is :3|name is :腾讯 阿里 华为的岗位薪资情况概述|author is :小风花|numbers is :2114|url is : 
index is :4|name is :震惊,20年开发经验的技术总监不会搭建Java开发环境|author is :Java填坑之路|numbers is :3733|url is : 
index is :5|name is :在操作系统、芯片领域跌倒的中国程序员,如何崛起?|author is :残留的淡影|numbers is :835|url is : 
index is :6|name is :刚写完排序算法,就被开除了…|author is :Java技术栈|numbers is :605|url is : 
index is :7|name is :有个程序员男友是什么感觉?女网友:连约个会都要处理BUG!|author is :不玩代码的一鸣|numbers is :2051|url is : 
index is :8|name is :程序员吐槽阿里加班文化上班太累,网友:做程序员这也算高强度?|author is :不玩代码的一鸣|numbers is :1502|url is : 
index is :9|name is :sql 存储过程|author is :树叶子hza|numbers is :1712|url is : 
index is :10|name is :【软件设计师】——总结|author is :邢美玲|numbers is :233|url is : 
index is :11|name is :虚拟机和Docker的最大区别|author is :JerryWangSAP|numbers is :467|url is : 
index is :12|name is :快进来看程序员风格的修真小说!|author is :Java填坑之路|numbers is :485|url is : 
index is :13|name is :ORACLE/MYSQL数据库的常用SQL命令|author is :SunJW_2017|numbers is :399|url is : 
index is :14|name is :ERP工程师的职责是什么|author is :这个也很漂亮|numbers is :432|url is : 
index is :15|name is :springMVC学习心得及手写springMVC简单实现|author is :棒叔叔|numbers is :245|url is : 
index is :16|name is :自动化运维一体化|author is :Stestack|numbers is :585|url is : 
index is :17|name is :#程序员式幽默趣图!从高的职业,现实的残酷!|author is :javam16|numbers is :240|url is : 
index is :18|name is :Springboot实现用户登录|author is :HOWSUNSHINE|numbers is :421|url is : 
index is :19|name is :多台SQLServer数据实时同步|author is :weixin_37691493|numbers is :296|url is : 
index is :20|name is :一名年薪百万阿里P8架构师写给Java程序员一些建议(架构师必备)|author is :M阿|numbers is :420|url is : 
index is :21|name is :在 Java 中初始化 List 的五种方法|author is :Java填坑之路|numbers is :310|url is : 
index is :22|name is :徐小平 不做人生规划,你离挨饿只有三天|author is :这个也很漂亮|numbers is :274|url is : 
index is :23|name is :Spring 的体系结构|author is :mukes|numbers is :180|url is : 
index is :24|name is :浅淡XSS跨站脚本攻击的防御方法|author is :白帽梦想家|numbers is :176|url is : 
index is :25|name is :是否在公司里 老板叫你做什么 就做什么的总结|author is :牛仔裤新的|numbers is :204|url is : 
index is :26|name is :长相一般的普通程序员怎么找到喜欢程序员的妹子做女友?|author is :北辰丶|numbers is :175|url is : 
index is :27|name is :栈的基本函数C++实现|author is :liaolian1|numbers is :154|url is : 
index is :28|name is :Java并发——阻塞队列|author is :Crazy_CMT|numbers is :168|url is : 

更多推荐

Golang(8)

本文发布于:2024-02-19 19:00:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1765496.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Golang

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!