返回顶部
首页 > 资讯 > 后端开发 > GO >详解怎么使用Golang爬取必应壁纸
  • 367
分享到

详解怎么使用Golang爬取必应壁纸

Golang爬虫Go 2023-05-14 20:05:01 367人浏览 安东尼
摘要

做爬虫不用说,就是用python就好,一个requests包走天下。但是呢,听说golang中内置的Http包非常牛逼,咱就是说不得整点活,也刚好学习学习新东西,复习下http协议的请求和响应相关的知识点。话不多说,咱直接开整本文章爬下必应

详解怎么使用Golang爬取必应壁纸

爬虫不用说,就是用python就好,一个requests包走天下。但是呢,听说golang中内置的Http包非常牛逼,咱就是说不得整点活,也刚好学习学习新东西,复习下http协议的请求和响应相关的知识点。话不多说,咱直接开整

本文章爬下必应壁纸先小试牛刀。狗头保命 狗头保命 狗头保命

爬虫流程概述

graph TD
请求数据 --> 解析数据 --> 数据入库

上图的流程图大家可以看到,其实爬虫并不麻烦,整个流程就只有三步而已。接下来具体聊聊每一步需要做什么

  • 请求数据:在这里我们需要使用Golang中的内置包http包向目标地址发起请求,这一步就完成了

  • 解析数据:这里我们需要对请求到的数据进行解析,因为不是整个请求到的数据我们都需要,我们只需要某些具体的关键的数据而已。这一步也叫数据清洗

  • 数据入库:不难理解,这就是将解析好的数据进行入库操作

实战分析

先到必应壁纸官网上观察,做爬虫的话是需要对数据特别敏感的。这是首页信息,整个页面是非常简洁的image.png

接下来,需要调出浏览器的开发工具(这个大家应该都非常熟悉吧,不熟悉的话很难跟下去的喔)。直接按下F12或者右键点击检查image.pngimage.png但是呢?在必应壁纸上,右键不能调用控制台,只能手动调出了。大家不用担心,按照第一张图操作就好。如果有同学的chrome是中文的,也是一样的操作,选择更多工具,选择开发者工具即可

不出意外呢,大家肯定看到的是这样的页面

image.png这个没关系的,只是必应壁纸网站的一些反爬错误而已。(我很久之前爬的时候还没有这个反爬错误)这个是不影响我们操作的

接下来选择这个工具,帮助我们快速定位到我们想要的元素上image.png然后我们就能找到我们所需的图片信息

image.png

代码实战

下面是爬取一页的数据

package main

import (
    "fmt"
    "GitHub.com/PuerkitoBio/goquery"
    "io"
    "io/ioutil"
    "log"
    "net/http"
    "os"
    "time"
)

func Run(method, url string, body io.Reader, client *http.Client) {
    req, err := http.NewRequest(method, url, body)
    if err != nil {
        log.Println("获取请求对象失败")
        return
    }
    req.Header.Set("user-agent", "Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/110.0.0.0 Safari/537.36")
    resp, err := client.Do(req)
    if err != nil {
        log.Println("发起请求失败")
        return
    }
    if resp.StatusCode != http.StatusOK {
        log.Printf("请求失败,状态码:%d", resp.StatusCode)
        return
    }
    defer resp.Body.Close() // 关闭响应对象中的body
    query, err := goquery.NewDocumentFromReader(resp.Body)
    if err != nil {
        log.Println("生成goQuery对象失败")
        return
    }
    query.Find(".container .item").Each(func(i int, s *goquery.Selection) {
        imgUrl, _ := s.Find("a.ctrl.download").Attr("href")
        imgName := s.Find(".description>h3").Text()
        fmt.Println(imgUrl)
        fmt.Println(imgName)
        DownloadImage(imgUrl, i, client)
        time.Sleep(time.Second)
        fmt.Println("-------------------------")
    })
}

func DownloadImage(url string, index int, client *http.Client) {
    req, err := http.NewRequest("POST", url, nil)
    if err != nil {
        log.Println("获取请求对象失败")
        return
    }
    req.Header.Set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36")
    resp, err := client.Do(req)
    if err != nil {
        log.Println("发起请求失败")
        return
    }
    data, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Println("读取请求体失败")
        return
    }
    baseDir := "./image/image-%d.jpg"
    f, err := os.OpenFile(fmt.Sprintf(baseDir, index), os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
    if err != nil {
        log.Println("打开文件失败", err.Error())
        return
    }
    defer f.Close()
    _, err = f.Write(data)
    if err != nil {
        log.Println("写入数据失败")
        return
    }
    fmt.Println("下载图片成功")
}

func main() {
    client := &http.Client{}
    url := "https://bing.ioliu.cn/?p=%d"
    method := "GET"
    Run(method, url, nil, client)
}

下面是爬取多页数据爬取多页的代码没有多大的改动,我们还是需要先观察网站的特点

image.png发现什么了吗?第一页p=1,第二页p=2,第十页p=10

所以我们直接起一个for循环,然后复用之前爬取单页的代码就行

// 爬取多页的main函数如下
func main() {
    client := &http.Client{}
    url := "https://bing.ioliu.cn/?p=%d"
    method := "GET"
    for i := 1; i < 5; i++ { // 实现分页操作
        Run(method, fmt.Sprintf(url, i), nil, client)
    }
}

总结

在我们这个例子中,我们解析网页数据使用的工具的一个第三方包,因为用正则真的太麻烦了

  • CSS选择器:goQuery
  • 用xpath选择器:htmlquery
  • 正则:内置包,不推荐,正则规则不好写

以上就是详解怎么使用Golang爬取必应壁纸的详细内容,更多请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: 详解怎么使用Golang爬取必应壁纸

本文链接: https://lsjlt.com/news/203646.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 详解怎么使用Golang爬取必应壁纸
    做爬虫不用说,就是用python就好,一个requests包走天下。但是呢,听说golang中内置的http包非常牛逼,咱就是说不得整点活,也刚好学习学习新东西,复习下http协议的请求和响应相关的知识点。话不多说,咱直接开整本文章爬下必应...
    99+
    2023-05-14
    Golang 爬虫 Go
  • 如何使用Golang爬取必应壁纸
    这篇文章主要讲解了“如何使用Golang爬取必应壁纸”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Golang爬取必应壁纸”吧!爬虫流程概述graph TD请求数据&nbs...
    99+
    2023-07-05
  • Python怎么利用多线程爬取LOL高清壁纸
    这篇“Python怎么利用多线程爬取LOL高清壁纸”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么利用多线程爬...
    99+
    2023-07-02
  • 怎么用Python代码爬取王者全套皮肤壁纸
    本篇文章给大家分享的是有关怎么用Python代码爬取王者全套皮肤壁纸,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。相信大家都玩过王者荣耀吧,资深玩家绝对买过皮肤,不得不夸王者荣...
    99+
    2023-06-02
  • 怎么在python中利用多线程爬取网站壁纸
    本篇文章给大家分享的是有关怎么在python中利用多线程爬取网站壁纸,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Python主要用来做什么Python主要应用于:1、Web开...
    99+
    2023-06-06
  • Python怎么爬取图虫创意优质高清壁纸图
    本篇文章给大家分享的是有关Python怎么爬取图虫创意优质高清壁纸图,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。图片素材一直各类设计必不可少的元素,一图胜千言,一张好的图片贯...
    99+
    2023-06-02
  • Android中怎么使用WallPaper设置壁纸
    今天就跟大家聊聊有关Android中怎么使用WallPaper设置壁纸,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。具体如下:public class SetWa...
    99+
    2023-05-30
    android wallpaper
  • Golang在爬虫开发中的应用案例详解
    go 语言以并发性和高性能著称,使其成为网络爬虫开发的理想选择。创建网站爬虫: go 语言提供简洁易学的语法,适用于快速编写爬虫。分布式爬虫: go 语言的 goroutine 和消息队...
    99+
    2024-05-12
    go 爬虫 golang 高可扩展性
  • 怎么使用python爬虫爬取数据
    本篇内容介绍了“怎么使用python爬虫爬取数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!python爬出六部曲第一步:安装reques...
    99+
    2023-06-29
  • Python使用爬虫爬取贵阳房价的方法详解
    目录1序言1.1生存压力带来的哲思1.2 买房&房奴2爬虫 2.1基本概念2.2 爬虫的基本流程 3爬取贵阳房价并写入表格3.1结果展...
    99+
    2024-04-02
  • 使用PyCharm怎么爬取小说
    使用PyCharm怎么爬取小说?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。爬取小说的思路: 1.获取小说地址本文以搜书网一小说为例《嘘,梁上有王妃!》目录网址:...
    99+
    2023-06-14
  • 使用python怎么爬取数据
    使用python怎么爬取数据?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,P...
    99+
    2023-06-14
  • 怎么使用pycharm爬取数据
    要使用PyCharm爬取数据,可以按照以下步骤进行操作:1. 创建一个新的PyCharm项目:打开PyCharm,点击“Create...
    99+
    2023-08-17
    pycharm
  • 怎么使用Java爬虫批量爬取图片
    本篇内容主要讲解“怎么使用Java爬虫批量爬取图片”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Java爬虫批量爬取图片”吧!爬取思路对于这种图片的获取,其实本质上就是就是文件的下载(H...
    99+
    2023-07-06
  • 使用Python怎么爬取MP3音频
    使用Python怎么爬取MP3音频?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。r: play/getdatacallback: jQuery19108...
    99+
    2023-06-06
  • 怎么使用Python爬取QQ密码
    非法获取他人的账号密码是违法行为,并且严重侵犯了他人的隐私权。强烈不建议或支持这样的行为。爬取QQ密码是非法的,且侵犯了个人隐私。违...
    99+
    2023-08-31
    Python
  • 怎么使用python爬虫爬取二手房数据
    这篇文章主要介绍怎么使用python爬虫爬取二手房数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和floa...
    99+
    2023-06-14
  • Python爬取求职网requests库和BeautifulSoup库使用详解
    目录一、requests库1、requests简介2、安装requests库3、使用requests获取网页数据 我们先导入模块4、总结requests的一些方法二、Beautifu...
    99+
    2024-04-02
  • 使用Python爬虫怎么避免频繁爬取网站
    这期内容当中小编将会给大家带来有关使用Python爬虫怎么避免频繁爬取网站,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型...
    99+
    2023-06-15
  • 使用python怎么爬取微博评论
    今天就跟大家聊聊有关使用python怎么爬取微博评论,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作