用于网络抓取的 GoSpider

如何使用 GoSpider 进行网络抓取

在本指南中,我将指导您设置 GoSpider、如何开始抓取网站以及如何抓取您需要的有价值信息。到最后,你将掌握开始网络抓取所需的一切。让我们开始吧

什么是 GoSpider?

GoSpider 是一款使用 Go(Golang)构建的命令行网络抓取工具。它的设计轻便快捷,非常适合执行简单的网络抓取任务。GoSpider 可让您快速收集网站链接,并跟踪链接以抓取相关数据。它适用于需要抓取多个页面(如电子商务网站或博客)并收集产品详情、价格或其他相关信息等数据的项目。

另请阅读如何 使用 Geziyor 和 Go 抓取网站.

使用 GoSpider 的好处

在进入教程之前,让我们先来了解一下使用 GoSpider 进行网络爬行的主要好处:

  1. 快速高效:GoSpider 采用 Go 语言构建,Go 语言以性能著称。这使得 GoSpider 成为目前速度最快的抓取工具之一。
  2. 易于使用:通过简单的命令,GoSpider 可让您以最少的设置抓取网站和刮擦数据。
  3. 可定制:您可以轻松自定义抓取深度、跟踪特定链接、调整标题和用户代理,以模拟真实的浏览器流量。
  4. 可在多个平台上使用GoSpider 是跨平台的,这意味着它可在 Windows、macOS 和 Linux 上运行。
  5. 开放源代码:GoSpider 是免费开源的,您可以根据需要贡献或修改代码。

开始使用 GoSpider

在开始爬行之前,您需要设置环境并安装 GoSpider。以下步骤将指导您完成安装过程。

步骤 1:安装围棋

首先要确保计算机上安装了 Go。如果没有 Go,可以从 Go 官方网站下载: https://golang.org/dl/.

安装 Go 后,可通过打开终端(Windows 的命令提示符或 macOS/Linux 的终端)并键入以下命令来验证安装:

转到版本

如果 Go 安装正确,该命令将输出 Go 的安装版本,例如

go version go1.23.4 windows/amd64

第 2 步:安装 GoSpider

确保 Go 已安装后,可以使用以下命令安装 GoSpider:

GO111MODULE=on go install github.com/jaeles-project/gospider@latest

该命令会从 GitHub 安装最新版本的 GoSpider。在 Windows 上,它会将 GoSpider 可执行文件放到 $GOPATH/bin 目录中,使你可以在终端中直接访问它。

安装完成后,您可以输入以下命令检查 GoSpider 是否正确安装:

gospider -h

这将显示帮助菜单,概述 GoSpider 中可用的命令和选项。

使用 GoSpider 进行基本爬行

现在您已经安装了 GoSpider,让我们通过一个简单的示例来了解如何使用它抓取网站并收集链接。

步骤 3:开始爬行

比方说,您想抓取一个特定的网站,如电子商务商店的主页。您可以使用以下 GoSpider 命令来实现这一目的:

gospider -q -s "https://www.example.com" -输出

下面是命令的详细说明:

  • -q:该标记会抑制冗长输出,即只显示抓取过程中发现的 URL。
  • -s:该标记指定要抓取的网站 URL。
  • -o:该标记指定 GoSpider 保存抓取数据的输出文件夹。在这种情况下,它会将结果保存在 "输出文件夹 "中。

运行此命令后,GoSpider 将开始抓取网站,并将找到的链接保存到 "output "文件夹内的文本文件中。您应该会看到类似下面的输出:

https://www.example.com

https://www.example.com/about

https://www.example.com/products

https://www.example.com/contact

步骤 4:使用 GoSpider 跟踪链接

默认情况下,GoSpider 只抓取您指定的页面并查找该页面上的链接。但是,您可能希望跟踪网站上其他页面的链接。例如,您可能想抓取电子商务商店中的所有产品页面。

要跟踪链接,可以使用 -d 标志,它可以设置跟踪链接的递归深度。默认深度为 1,这意味着 GoSpider 只抓取起始页面上的链接。如果想跟踪更深层次的链接,可以增加深度值。

例如,要抓取多达三级的页面,请使用此命令:

gospider -q -s "https://www.example.com/products" -d 3 -o 输出

这将使 GoSpider 抓取 "产品 "页面,并跟踪多达三个附加层级(如产品详细页面、评论等)的链接。

步骤 5:使用正则表达式过滤结果

有时,您可能想过滤掉特定类型的链接。例如,您可能只想抓取 URL 中包含特定模式的页面,如 URL 中以 /product/ 结尾的产品页面。

GoSpider 允许您使用正则表达式过滤链接。您可以使用 - 白名单和 - 黑名单选项来指定包含或排除的模式。

例如,要只抓取包含 /product/ 的 URL,请使用以下命令:

gospider -q -s "https://www.example.com" - 白名单 "/product/" -输出

这将使 GoSpider 只抓取符合 /product/ 模式的链接,而忽略其他页面。

从收集的链接中获取数据

抓取网站并收集链接后,下一步就是从这些页面中抓取有价值的数据。您可能经常需要提取特定信息,如产品名称、价格或图片 URL。

GoSpider 不提供从 HTML 内容中抓取数据的内置支持,但你可以使用其他 Go 库,例如 Colly,来处理你收集到的数据。

第 6 步:安装 Colly 用于网络抓取

Colly 是一个功能强大、运行速度极快的 Go 网络抓取库,可以从网站中提取结构化数据。要安装 Colly,请运行以下命令:

去获取 github.com/gocolly/colly/v2

安装 Colly 后,就可以从 GoSpider 收集的链接中抓取数据。

第 7 步:使用 Colly 抓取产品数据

假设您想从产品页面列表中提取产品名称、价格和图片 URL。您可以这样做。

首先,创建一个名为 crawler.go 的 Go 文件,并导入必要的库:

package main
import (
"fmt"
"日志"
"操作系统"
"github.com/gocolly/colly/v2"
)
然后,定义一个产品 结构 来存储搜索到的数据:
type Product 结构 {
名称 string
价格 string
图像URL string
}
var 产品 []Product
现在,设置 Colly 访问 URL 并提取产品详细信息:
func main() {
c := colly.NewCollector()
c.OnHTML("li.product", func(e *colly.HTMLElement) {
productName := e.ChildText(".产品名称")
productPrice := e.ChildText(".产品价格")
imageURL := e.ChildAttr(".产品图像", "src")
产品 := 产品{
名称:产品名称
价格:productPrice、
ImageURL: 图像URL、
}
产品 = 追加(产品,产品)
fmt.Printf("商品名称: %s\n商品价格: %s\n图片 URL: %s\n",产品名称,产品价格,图像 URL)
})
file, err := os.Open("分页链接")
if err != nil {
log.Fatalf("打开文件出错:%v", err)
}
defer file.Close()
var urls []string
// 从文件中读取链接
// ...
for _, url := range urls {
err := c.Visit(url)
if err != nil {
log.Printf("访问 %s 时出错:%v", url, err)
}
}
}

这段代码将访问每个链接并提取产品名称、价格和图片 URL。然后,您可以根据需要使用这些数据,例如将其保存到 CSV 文件中。

将数据导出为 CSV

收集数据后,您可能想将其保存为 CSV 文件,以便日后分析。Go 提供了一个内置的编码/CSV 软件包,可以轻松实现这一点。

下面是将抓取到的商品数据写入 CSV 文件的方法:

import (
"编码/csv"
"操作系统"
)
func exportToCSV(文件名 string) {
file, err := os.Create(filename)
if err != nil {
fmt.Println("创建 CSV 文件出错:", err)
return
}
defer file.Close()
writer := csv.NewWriter(file)
defer writer.Flush()
writer.Write([]string{"姓名", "Price", "图像 URL"})
for _, 产品 := range 产品 {
writer.Write([]string{product.Name, product.Price, product.ImageURL})
}
fmt.Println("导出到......的产品详细信息", filename)
}

抓取完成后调用 exportToCSV() 函数:

c.OnScraped(func(r *colly.Response) {
exportToCSV("product_data.csv")
})

这将为每个产品创建一个包含产品名称、价格和图片 URL 的 CSV 文件。

结论

GoSpider 简单快捷,是网络抓取和搜索的绝佳工具。它非常适合快速抓取网站和收集链接。如果将 GoSpider 与 Colly 等库搭配使用,就能通过提取有价值的数据轻松将爬虫提升到新的水平。

在本指南中,我们介绍了如何设置 GoSpider、抓取网站、抓取有价值的数据,然后将数据导出为 CSV。无论您是在处理小型网站还是大型项目,GoSpider 都能让您轻松收集所需的信息。只需稍加练习,您就能创建功能强大的爬虫,为您节省时间,帮助您轻松地从网上收集数据。

类似文章