首页 > 其他分享 >Go1.19革命:打造超效能站点模板爬虫

Go1.19革命:打造超效能站点模板爬虫

时间:2024-07-01 15:31:36浏览次数:19  
标签:return string err Go1.19 nil 爬虫 go 模板

目录

  1. 项目介绍
  2. 环境配置
  3. 核心依赖库
  4. 爬虫实现
  5. 运行与测试
  6. 代码详解
  7. 注意事项

项目介绍

本文将介绍如何使用Go1.19实现一个简单的站点模板爬虫。这个爬虫将访问指定的网站,获取页面内容并解析需要的数据,最终将数据存储在本地文件中。此教程适合具有基本Go编程经验的开发者。

环境配置

在开始编写爬虫代码之前,我们需要进行环境配置。

1. 安装Go1.19:

wget https://golang.org/dl/go1.19.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.19.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin

2. 初始化Go模块:

mkdir go-scraper
cd go-scraper
go mod init go-scraper

核心依赖库

我们将使用以下Go依赖库来构建爬虫:

  • net/http: 进行HTTP请求
  • golang.org/x/net/html: 解析HTML内容

go.mod文件中添加这些依赖:

module go-scraper

go 1.19

require (
    golang.org/x/net v0.0.0-20220726194316-cdc2c7f1e80a // indirect
)

爬虫实现

HTTP 请求

首先,我们编写一个函数来发送HTTP请求并获取网页内容:

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

func fetchURL(url string) (string, error) {
    resp, err := http.Get(url)
    if err != nil {
        return "", err
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return "", err
    }

    return string(body), nil
}

func main() {
    url := "https://example.com"
    content, err := fetchURL(url)
    if err != nil {
        fmt.Println("Error fetching URL:", err)
        return
    }
    fmt.Println(content)
}

数据解析

接下来,我们将使用golang.org/x/net/html库来解析HTML内容,并提取我们感兴趣的数据:

package main

import (
    "fmt"
    "golang.org/x/net/html"
    "strings"
)

func parseHTML(content string) []string {
    var data []string
    doc, err := html.Parse(strings.NewReader(content))
    if err != nil {
        fmt.Println("Error parsing HTML:", err)
        return data
    }
    var f func(*html.Node)
    f = func(n *html.Node) {
        if n.Type == html.ElementNode && n.Data == "a" {
            for _, a := range n.Attr {
                if a.Key == "href" {
                    data = append(data, a.Val)
                }
            }
        }
        for c := n.FirstChild; c != nil; c = c.NextSibling {
            f(c)
        }
    }
    f(doc)
    return data
}

数据存储

最后,我们将提取到的数据存储到本地文件中:

package main

import (
    "fmt"
    "os"
)

func saveToFile(filename string, data []string) error {
    file, err := os.Create(filename)
    if err != nil {
        return err
    }
    defer file.Close()

    for _, line := range data {
        _, err := file.WriteString(line + "\n")
        if err != nil {
            return err
        }
    }
    return nil
}

func main() {
    url := "https://example.com"
    content, err := fetchURL(url)
    if err != nil {
        fmt.Println("Error fetching URL:", err)
        return
    }

    data := parseHTML(content)
    err = saveToFile("output.txt", data)
    if err != nil {
        fmt.Println("Error saving to file:", err)
    }
}

运行与测试

确保所有代码在一个目录中,并且每个部分都包含在main.go文件中。运行以下命令来执行爬虫:

go run main.go

爬虫将访问指定的网站,解析链接并将其保存到output.txt文件中。

代码详解

  • fetchURL(url string): 发送HTTP GET请求并返回页面内容。
  • parseHTML(content string): 解析HTML内容,提取所有链接。
  • saveToFile(filename string, data []string): 将提取到的数据保存到本地文件。

注意事项

  • 遵守robots.txt: 在爬取网站之前,检查并遵守目标网站的robots.txt文件。
  • 频率限制: 设置适当的请求频率,避免对目标网站造成压力。
  • 错误处理: 添加更多的错误处理代码,以便更好地调试和维护。

通过上述步骤,我们成功实现了一个基于Go1.19的简单站点模板爬虫。这个爬虫可以根据需要进行扩展,以处理更多复杂的需求。

标签:return,string,err,Go1.19,nil,爬虫,go,模板
From: https://blog.csdn.net/weixin_41859354/article/details/140102177

相关文章

  • html+css+js文章模板
    图片  源代码在图片后面,点赞加关注,谢谢......
  • 如何策划一场成功的品牌推广?案例+模板,一网打尽!
    在当下的商业竞争环境中,品牌推广已成为企业成功的关键。然而要策划一场成功的品牌推广活动,不仅需要创新的思维,还需要对品牌IP打造和搜索流量有深入的了解。作为一名手工酸奶品牌创始人,目前全国也复制了100多家门店。本文将通过一个实际案例和一套策划模板,为你揭示如何策划一场......
  • VS导出项目模板
    当我们想要在两个项目或者两台电脑上使用同一套代码,又不想重新调VS项目属性的时候,这时候就可以选择将项目导出为模板的功能,导出模板之后,就可以很方便的换个地方再用了。 一直点击下一步即可,然后你会发现,你的源代码和配好的环境都添加到这个模板中了。如果想在不同的电脑上使用......
  • C++Primer Plus 第十四章代码重用:模板类和友元14.4.9 ----002
    C++PrimerPlus第十四章代码重用:模板类和友元14.4.9提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:模板类和友元14.4.9提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录C++PrimerPlus第十四章代码重用:模板类和友元14.4......
  • JAVA高级进阶14设计模板
    第十四天、设计模板什么是设计模板(Designpattern)?一个问题通常有n种解法,其中肯定有一种解法是最优的,这个最优的解法被人总结出来了,称之为设计模式设计模式有20多种,对应20多种软件开发中会遇到的问题单例设计模式单例设计模式作用:确保一个类只有一个对象场景:计算......
  • 英文sci投稿后返修意见模板分享-涵盖回复审稿人的要点
    如果你收到了审稿人意见的返修,无论是大修还是小修,这都是一件值得高兴的事情。在目前这个学术投稿量巨大的时代,能进入underreview,这本身不仅仅需要论文实力,还需要很大的好运一.前言本次给大家分享的是关于返修内容的书写要点,我以我自身不久前写的返修意见为例,仅供参考如果......
  • 解决springer期刊提供的LaTex模板参考文献格式为作者+年份时的顺序问题以及如何在正文
    这两天准备投稿springer下的一个期刊,拿到模板后人很麻,期刊给的latex和已出版的论文格式非常不符合,怎么办呐?不要急!下面开始改进!首先非常感谢大佬写的一篇解决方案,链接springer期刊提供的LaTex模板参考文献格式为作者+年份时的顺序问题_sn-article-CSDN博客该大佬提出的解决方......
  • 【C++】 ——【模板初阶】——基础详解
    目录1.泛型编程1.1泛型编程的概念1.2泛型编程的历史与发展1.3泛型编程的优势1.4泛型编程的挑战2.函数模板2.1函数模板概念2.2函数模板格式2.3函数模板的原理2.4函数模板的实例化2.5模板参数的匹配原则2.6函数模板的特化2.7函数模板的使用注意事项2.......
  • 【Python爬虫实战项目】Python爬取Top100电影榜单数据并保存csv文件(附源码)
    前言今天给大家介绍的是Python爬取Top100电影榜单数据保存csv文件,在这里给需要的小伙伴们帮助,并且给出一点小心得。开发工具Python版本:3.6相关模块:requests模块time模块parsel模块csv模块环境搭建安装Python并添加到环境变量,pip安装需要的相关模块即可。文中......
  • SSM-学情分析系统-56772(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP、爬虫、APP
    学情分析系统摘 要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于学情分析系统当然也不能排除在外,随着网络技术的不断成熟,带动了学情分析系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这......