用golang写一个发现新网站的爬虫

2023-11-01 22:14:22
269

以下是示例代码,可以参考思路。

package main

import (
    "fmt"
    "net/http"
    "strings"
)

func main() {
    // 定义起始页面startURL := "https://www.google.com"

    // 初始化一个队列来存储待爬取的网址queue := []string{startURL}

    // 循环爬取网页for len(queue) > 0 {
        // 从队列中取出一个网址url := queue[0]
        queue = queue[1:]

        // 发送HTTP请求,获取网页内容response, err := http.Get(url)
        if err != nil {
            fmt.Println(err)
            continue
        }

        // 解析网页内容,获取所有链接links := getLinks(response.Body)

        // 将新发现的链接加入队列for _, link := range links {
            if !strings.Contains(link, startURL) {
                queue = append(queue, link)
            }
        }
    }
}

// 获取网页中所有链接func getLinks(body io.ReadCloser) []string {
    links := []string{}

    // 使用正则表达式匹配所有链接re := regexp.MustCompile(`<a href="(.*?)">`)

    // 遍历网页内容scanner := bufio.NewScanner(body)
    for scanner.Scan() {
        // 匹配链接match := re.FindStringSubmatch(scanner.Text())
        if match != nil {
            links = append(links, match[1])
        }
    }

    return links
}