爬虫实训-golang爬虫+项目实战

注:本文仅为兴趣爱好探究,请勿进行商业利用或非法研究,负责后果自负,与本文作者无关

一.简介

最近遇到了前端解密的一点困难,用python怎么逆向都无法解决,相反用go导包去进行解密反而得到了正确的结果。无奈,刚好本来就有想学go语言的想法,直接进军。

golang相比于python来说,有完整的并发机制,运行速度快,唯一麻烦的就是数据处理起来较为麻烦

废话不多说,开练

二.基本学习

1.简单请求

导包

import (
    "net/http"
    "net/url"
)

构造客户端

var client http.Client

get请求

req, err := http.NewRequest("GET",URL,nil)

存储cookie容器

jar err := cookiejar.New(nil)
    if err != nil {
        panic(err)
    }

构造post请求

完整请求如下

    var client http.Client
    jar err := cookiejar.New(nil)
    if err != nil {
        panic(err)
    }
    Info := "user="+username+"&"+"passwd="+password
    var data = strings.NewReader(Info)
    req, err := http.NewRequest("POST",URL,data)
    resp, _ := client.Do(req)
    bodyText, _ := ioutil.ReadAll(resp.Body)

请求头可以如此添加

    req.Header.Set("Connection", "keep-alive")
    req.Header.Set("Pragma", "no-cache")
    req.Header.Set("Cache-Control", "no-cache")
    req.Header.Set("Upgrade-Insecure-Requests", "1")
    req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
    req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36")
    req.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
    req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")
​

当发送请求结束之后,cookie会自动保存在client.jar这个容器内

    myStr := fmt.Sprintf("%s",client.Jar)
    req.Header.Set("Cookie",myStr)

强制转换进行添加

2.解析网页

python的时候习惯了xpath,这里我们依旧还是xpath,有很多种解析的,像什么正则这些,只需要把其中一个方向的精通即可,当然,正则还是可以练练的,毕竟以后可能会有很多的用武之地

https://github.com/antchfx/htmlquery

这里讲一下golang导包的技巧,一般来说直接go get即可

大多数时候你创建的项目根目录下需要

go mod init <模块名>
然后引入github对应模块地址
go mod tidy
go mod vendor

当然更大多数时候,目标网站都是被墙了的

windows的话建议可以直接在安装到环境变量gopath src目录下

image-20240307163345707

image-20240307163353542

external library可以直接看到

解析方法

root, _ := htmlquery.Parse(resp.Body)

3.获取节点信息

    tr := htmlquery.Find(root, "//*[@id='LB_kb']/table/tbody/tr/td")   //使用Xpath进行结点信息的获取
    for _, row := range tr { //len(tr)=13
        classNames := htmlquery.Find(row, "./font")
        classPosistions := htmlquery.Find(row,"./text()[4]")
        classTeachers := htmlquery.Find(row,"./text()[5]")
        if len(classNames)!=0 {
            className = htmlquery.InnerText(classNames[0])
            classPosistion = htmlquery.InnerText(classPosistions[0])
            classTeacher = htmlquery.InnerText(classTeachers[0])
          fmt.Println(className)
          fmt.Println(classPosistion)
          fmt.Println(classTeacher)
        }
    }
​

接下来还有存取数据库的一些操作,这里不进行讲解,毕竟我们只是单纯爬成文档即可

三.实战演练

这里我们爬取的目标是豆瓣top250的电影

1.效果展示

image-20240318163319592

还是分成了四块,电影title,描述,评分以及评论

大致思路就是用容器保存数据最后交给csvwriter进行写入

不足的地方就是->无多线程,没有陷入数据库

需要用到的库

github.com/antchfx/htmlquery

2.粗略讲解

image-20240318163606238

保存函数

xpath语法

image-20240318163636816

翻页逻辑

image-20240318163649923

存储逻辑

接下来将会给大家带来更多的go实战项目

源码请关注公众号 剑客古月的安全屋

原文链接 爬虫实训-golang爬虫+项目实战

回复 豆瓣spider

  • 39
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值