【GO语言】爬虫练习

项目总览:

1.开发语言:GO语言
2.IDE:Goland
3.开发用时:一个小时
4.源码已上传到我的GitHub,链接:https://github.com/2394799692/Crawler-Baidu 或点此跳转


以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj。QQ:2394799692

一、项目开发日志

1.提示用户指定起始,终止页。创建working函数
2.使用start,end循环 爬取每一页数据
3.获取每一页的URL——下一页=前一页+50
4.封装,实现HttpGet()函数,爬取一个网页的数据内容,通过result返回。
(http.get/resp.body.close/buf:=make(4096)/for[resp.body.read(buf)/result+=string(buf[:n])return5.创建.html文件。使用循环因子i命名。
6.将result写入文件:writestring(result)。使用f.close()关闭

二、爬虫简介

1.概念:

访问web服务器,获取指定数据信息的一段程序

2.横向爬取:

在爬取的网站页面中,以“页”为单位,找寻该网站分页器规律。一页一页的爬取网站数据信息。

3.工作流程:

1.明确URL(请求的地址,明确爬什么)
2.发送请求,获取响应数据
3.保存响应数据,提取有用信息
4.处理数据(存储,使用)

三、代码展示

package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"strconv"
)

func HttpGet(url string) (result string, err error) {
	resp, err1 := http.Get(url)
	if err1 != nil {
		err = err1 //将封装函数内部的错误,传出给调用者
		return
	}
	defer resp.Body.Close()
	//循环读取网页数据,传出给调用者
	buf := make([]byte, 4096)
	for {
		n, err2 := resp.Body.Read(buf)
		if n == 0 {
			fmt.Println("读取网页完成")
			break
		}
		if err2 != nil && err2 != io.EOF {
			err = err2
			return
		}
		//累加每一次循环读到的buf数据,存入result;一次性返回。
		result += string(buf[:n])
	}
	return
}

//爬取页面操作
func working(start, end int) {
	fmt.Printf("正在爬取第%d页到%d页...\n", start, end)
	//循环一次爬取一页
	for i := start; i <= end; i++ {
		url := "这个地方是你要爬取网页的url" + strconv.Itoa(i)
		result, err := HttpGet(url)
		if err != nil {
			fmt.Println("httpget err:", err)
			continue //需要读取多个页,一个页面出错不用return,再读下一页就行了
		}
		//fmt.Println("result=", result)
		//将读到的整网页数据,保存成一个文件
		f, err := os.Create("第" + strconv.Itoa(i) + "页" + ".html")
		if err != nil {
			fmt.Println("os.Create err:", err)
			continue //需要读取多个页,一个页面出错不用return,再读下一页就行了
		}
		f.WriteString(result)
		f.Close() //保存好一个文件,关闭一个文件
	}
}
func main() {
	//指定爬取起始,终止页
	var start, end int
	fmt.Println("请输入爬取的起始页(>=1):")
	fmt.Scan(&start)
	fmt.Println("请输入爬取的终止页(>=strart):")
	fmt.Scan(&end)
	working(start, end)
}


四、效果展示:

1)启动爬虫程序,输入要爬取的页数:
在这里插入图片描述

2)点击确认后,等待网络爬取完成:
在这里插入图片描述

3)爬取成功后,其对应页面就存储在我们的文件中了:

在这里插入图片描述

4)打开本地存储的爬取后的网页与原网页进行对比

请添加图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 好的,下面是一个简单的 Go 语言爬虫程序示例: ``` package main import ( "fmt" "io/ioutil" "net/http" ) func main() { resp, err := http.Get("https://www.example.com") if err != nil { fmt.Println("Error:", err) return } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println("Error:", err) return } fmt.Println(string(body)) } ``` 这段代码使用 `net/http` 包发送了一个 HTTP GET 请求到 `https://www.example.com`,并将响应的内容打印到了控制台。 如果你需要更复杂的爬虫程序,可以使用第三方包,例如 `colly` 和 `goquery`,它们提供了更多的功能和方便。 ### 回答2: 使用Go语言编写一个爬虫程序可以分为以下步骤: 1. 导入所需的Go库,例如"net/http"用于发送HTTP请求,"strings"用于处理字符串,"io/ioutil"用于读取HTTP响应的主体内容等。 2. 创建一个函数来发送HTTP请求并返回响应。在函数中,可以使用`http.Get()`方法来发送GET请求,并处理可能的错误。然后使用`ioutil.ReadAll()`方法将HTTP响应的主体内容读入一个变量中,并返回该变量。 3. 创建一个函数来解析HTTP响应中的HTML内容。使用第三方的HTML解析库(例如"germ.io/x/net/html")来解析HTML内容。可以使用该库的`NewTokenizer()`方法来创建一个HTML解析器,然后使用循环来依次解析HTML标签,并提取所需的信息。 4. 创建一个主函数,其中包括爬虫的主要逻辑。在主函数中,可以使用发送HTTP请求和解析HTML的函数来发起请求并提取信息。可以使用循环来处理多个页面,例如遍历整个网站的页面。 5. 最后,可以将提取的信息保存在文件中或进行进一步处理。 需要注意的是,在编写爬虫程序时,应遵守网站的服务条款和使用权限,并尊重网站的隐私政策。另外,为了避免对目标网站造成过大的负载,应添加适当的延时和限制请求的频率。 ### 回答3: 使用Go语言编写爬虫程序可以通过以下步骤实现: 1. 导入所需的包: 首先,在Go语言中,我们需要使用`net/http`包来发送HTTP请求,`io/ioutil`包来读取网页内容,`regexp`包来匹配网页中的数据。因此,我们需要导入这些包。 2. 发送HTTP请求: 通过`http.Get`函数发送HTTP GET请求获取网页内容,将其保存到一个响应(`http.Response`)对象中。 3. 读取网页内容: 使用`ioutil.ReadAll`函数从响应对象中读取整个网页的内容,并将其保存到一个字节切片(`[]byte`)中。 4. 解析网页内容: 使用正则表达式(`regexp`包)或者解析HTML(`goquery`包)等方法来获取我们需要的数据。通过在网页内容中匹配指定的模式或者使用CSS选择器来选择指定的HTML元素。 5. 处理获取的数据: 根据我们的需求,对获取的数据进行进一步的处理、过滤和存储。可能需要将数据保存到文件、数据库或者其他存储介质中。 例如,我们可以使用Go语言来编写一个简单的爬取网页标题的程序: ```go package main import ( "fmt" "io/ioutil" "net/http" "regexp" ) func main() { // 发送HTTP GET请求 response, err := http.Get("http://example.com") if err != nil { fmt.Println("Error: ", err) return } defer response.Body.Close() // 读取网页内容 body, err := ioutil.ReadAll(response.Body) if err != nil { fmt.Println("Error: ", err) return } // 解析网页内容,获取标题 titleRe := regexp.MustCompile(`<title>(.*?)</title>`) title := titleRe.FindStringSubmatch(string(body)) if len(title) > 1 { fmt.Println("Title: ", title[1]) } else { fmt.Println("Title not found") } } ``` 通过上述步骤,我们可以成功使用Go语言编写一个简单的爬虫程序,用于获取网页的标题。当然,实际的爬虫程序可能需要更加复杂的处理和更多的功能,这只是一个示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立志冲海大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值