我们终于开始构建爬虫了!为此,你首先需要创建一个文件夹来存放所有代码。接下来,你需要打开终端窗口(无论是通过 IDE 还是操作系统),并进入该文件夹。
若要在该文件夹中打开终端,使用 Visual Studio Code 时,可点击顶部工具栏中的“终端”→“新建终端”。
现在终端已打开,是时候初始化项目了。你可以通过运行以下命令来完成:
go mod init webscrapingapi.com/my-go-scraper
这将在你的文件夹中生成一个名为 go.mod 的文件,内容如下:
module webscrapingapi.com/my-go-scraper
go 1.19
为了向页面发送请求并从 HTML 中提取选择器,我们将使用 Colly 这个 Go 语言包(更多信息请查阅 Colly 文档)。要安装此包,请运行:
go get github.com/gocolly/colly
现在一切准备就绪,我们只需创建 main.go 文件并编写一些代码即可。以下是从 npmjs 框架列表首页提取所有链接的代码:
package main
import (
"fmt"
"github.com/gocolly/colly"
)
func scrape() {
c := colly.NewCollector()
// Find and print all links
c.OnHTML("section > div:first-child > div:first-child a", func(e *colly.HTMLElement) {
fmt.Println(e.Attr("href"))
})
c.Visit("https://www.npmjs.com/search?q=keywords:framework&page=0&ranking=optimal")
}
func main() {
scrape()
}
如果初看觉得难以理解,别担心,我们将在接下来的段落中逐一分解并进行说明。
每个 Go 语言文件都应以包名和 Go 将使用的导入语句开头。在此示例中,我们使用的两个包是“fmt”(用于打印刮取到的链接)和“Colly”(用于实际的刮取操作)。
在接下来的部分,我们创建了 scrape() 函数,负责抓取所需的链接。该函数会访问首页,并等待找到我们预设的元素选择器。当符合该选择器的元素出现时,它会立即输出该元素的 href 属性。
最后一部分是 main 函数,这是每次运行 Go 脚本时都会被调用的函数。要执行上述代码,请在终端中运行 go run main.go,你应该会得到以下输出:
如您所见,href 属性中的链接路径是相对路径,因此我们需要在前面添加 npmjs 的 URL。