>백엔드 개발 >Golang >Golang을 크롤링하는 방법

Golang을 크롤링하는 방법

王林
王林원래의
2023-05-21 19:05:05809검색

Golang은 많은 작업을 완료하는 데 사용할 수 있는 매우 인기 있는 백엔드 프로그래밍 언어이며 그 중 하나는 크롤링입니다. 이 기사에서는 Golang을 사용하여 간단한 크롤러 프로그램을 작성하는 방법을 소개합니다.

  1. 준비

크롤러 작성을 시작하기 전에 GoScrape라는 Golang 웹 크롤러 프레임워크를 설치해야 합니다. 사용하기 전에 먼저 GoScrape를 설치해야 합니다.

go get github.com/yhat/scrape
  1. 크롤러 구현

크롤러를 구현하기 전에 먼저 크롤러의 목표를 결정해야 합니다. 이 예에서는 Golang을 사용하여 Zhihu의 "Golang"과 관련된 질문을 크롤링합니다.

먼저 Zhihu 서버에 요청을 보내고 페이지 콘텐츠를 가져오는 함수를 정의해야 합니다. 다음 코드는 페이지 콘텐츠를 가져오는 간단한 함수를 구현합니다.

func getPageContent(url string) ([]byte, error) {
    res, err := http.Get(url)
    if err != nil {
        return nil, err
    }
    defer res.Body.Close()

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

    return body, nil
}

이 함수는 Go의 표준 라이브러리 "net/http" 및 "io/ioutil"을 사용하여 요청을 수행하고 응답을 읽습니다. 처리가 완료된 후에는 오류 처리 시 도움을 받을 수 있도록 응답 내용과 오류 개체를 반환합니다.

다음으로 크롤링된 페이지 콘텐츠를 처리해야 합니다. 이 예에서는 GoScrape를 사용하여 HTML을 구문 분석하고 필요한 정보를 추출합니다. 다음은 페이지 콘텐츠를 구문 분석하는 함수입니다.

func extractData(content []byte) {
    root, err := html.Parse(bytes.NewReader(content))
    if err != nil {
        panic(err)
    }

    matcher := func(n *html.Node) bool {
        if n.Type == html.ElementNode && n.Data == "a" {
            for _, attr := range n.Attr {
                if attr.Key == "class" && attr.Val == "question_link" {
                    return true
                }
            }
        }
        return false
    }

    questions := scrape.FindAll(root, matcher)

    for _, q := range questions {
        fmt.Println(scrape.Text(q))
    }
}

이 함수는 "golang.org/x/net/html"을 사용하여 HTML을 구문 분석하고 GoScrape를 사용하여 페이지에서 필요한 질문과 관련된 HTML 요소를 찾습니다. . 이 예에서는 "a" 태그와 클래스 이름 "question_link"를 일치자로 사용합니다. 올바르게 사용하면 이 매처는 문제가 있는 모든 연결을 포함하는 HTML 요소를 반환합니다. 마지막으로 GoScrape의 텍스트 추출 기능을 사용하여 추출하겠습니다. 마지막으로 문제 제목을 콘솔에 출력합니다.

마지막으로 이 두 기능을 연속적으로 실행할 수 있도록 결합합니다. 다음 코드는 이러한 기능을 사용하여 Zhihu를 크롤링하는 방법을 보여줍니다.

func main() {
    url := "https://www.zhihu.com/search?type=content&q=golang"

    content, err := getPageContent(url)
    if err != nil {
        panic(err)
    }

    extractData(content)
}

여기에서는 앞서 언급한 두 기능을 통합하는 "main" 기능을 정의합니다. 먼저 Zhihu의 검색 결과 페이지를 얻기 위해 “getPageContent” 함수를 호출합니다. 오류가 발생하면 프로그램을 종료하고, 그렇지 않으면 반환 결과를 "extractData" 함수에 전달합니다. 이 함수는 페이지 내용을 구문 분석하고 질문 제목을 추출한 후 최종적으로 콘솔에 출력합니다.

  1. Summary

이 글에서는 Golang을 사용하여 간단한 크롤러 프로그램을 작성하는 방법을 소개합니다. 우리는 단계별 설명과 함께 GoScrape와 표준 라이브러리를 사용하여 HTML 콘텐츠를 가져오고 처리하는 방법을 배웠습니다. 실제로 이러한 개념은 더 복잡한 크롤러 동작을 달성하기 위해 확장되고 최적화될 수 있습니다.

위 내용은 Golang을 크롤링하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.