Web scraping, também conhecido como extração de dados da web, é um método automatizado de extração de dados ou conteúdo de páginas da web.

Web scrapers automatizam a extração de dados sem interferência humana. Um raspador acessa uma página da Web enviando solicitações HTTP, assim como um navegador da Web faz. No entanto, em vez de exibir o HTML que ele busca, ele o processa de acordo com suas instruções e armazena o resultado.

Os raspadores da Web são úteis para buscar dados de sites que não fornecem APIs. Eles são populares em campos como ciência de dados, segurança cibernética, front-end e desenvolvimento de back-end.

Raspagem da Web em Go

Em Go, existem vários pacotes de web scraping. Os mais populares incluem goquery, Colly e ChromeDP.

O ChromeDP é um pacote de driver da Web semelhante ao selênio. Ele suporta o protocolo de ferramentas de desenvolvedor do Chrome em Go sem dependências.

Colly é uma biblioteca específica de web scraping construída usando goquery. Mas goquery é a opção mais rápida para raspar sites em Go.

instagram viewer

O que é goquery?

A biblioteca CSS, jQuery, ajudou a inspirar goquery. É uma biblioteca Go baseada no net/html pacote, que implementa um tokenizador e analisador compatível com HTML5. Ele também usa o pacote Cascadia, que implementa seletores CSS para uso com o analisador fornecido por net/html.

Instalando o goquery

Execute o comando abaixo em seu terminal para instalar o goquery. Se você encontrar algum erro, tente atualizar sua versão do Go.

vai obtenha github.com/PuerkitoBio/goquery

O processo de raspagem da Web

Você pode dividir o processo geral de raspagem em três tarefas menores:

  1. Fazendo solicitações HTTP.
  2. Usando seletores e localizadores para obter os dados necessários.
  3. Salvar dados em um banco de dados ou estruturas de dados para processamento posterior.

Fazendo solicitações HTTP em Go

Você pode enviar solicitações HTTP usando o net/http pacote, que a biblioteca padrão Go inclui.

pacote a Principal

importar "rede/http"
importar "registro"
importar "fm"

funçãoa Principal() {
webUrl := "https://news.ycombinator.com/"
resposta, err:= http. Obter (webUrl)

E se err!= nada {
registro. Fataln (err)
} senãoE se resposta. Código de Status == 200 {
fmt. Println("Podemos raspar isso")
} senão {
registro. Fataln("Não raspe isso")
}
}

http. Obter retorna um corpo de resposta e um erro. resposta. Código de Status é o código de status de solicitação-resposta.

Ao fazer solicitações HTTP, se o código de status de resposta é 200 você pode continuar a raspar o site.

Obtendo os dados necessários usando goquery

Obtendo o HTML do site

Primeiro, você precisa analisar o HTML simples da resposta (resposta.corpo) para obter um objeto de documento completo que representa a página da Web:

documento, err := goquery. NewDocumentFromReader (resposta. Corpo)

E se err!= nada {
registro. Fataln (err)
}

Agora você pode usar o objeto de documento para acessar a estrutura e o conteúdo da página da Web.

Selecionando elementos obrigatórios do HTML

Você precisará inspecionar a página da Web para verificar a estrutura dos dados que precisa extrair. Isso o ajudará a construir um seletor para acessá-lo.

Usando seletores e localizadores, você pode extrair o HTML que você precisa usando o Encontrar método do objeto de documento.

o Encontrar O método usa um seletor CSS para localizar o elemento que contém os dados que você precisa:

documento. Find("tr.coisa")

O código acima retorna apenas o primeiro elemento HTML correspondente ao seletor ou uma lista vazia se não houver correspondência.

Selecionando vários elementos do HTML

Na maioria das vezes, você desejará buscar todos os elementos HTML que correspondam ao seu seletor.

Você pode selecionar todos os elementos correspondentes no HTML usando o Cada método do valor que Encontrar() retorna. o Cada O método recebe uma função com dois parâmetros: um índice e um seletor do tipo *consulta. Seleção.

documento. Find("tr.thing").Each(função(índice int, seletor *goquery. Seleção) {
/* Seletor de processo aqui */
})

No corpo da função, você pode selecionar os dados específicos que deseja do HTML. Nesse caso, você precisa dos links e títulos de cada postagem que a página lista. Use o Encontrar do parâmetro seletor para restringir o conjunto de elementos e extrair texto ou valores de atributo.

documento. Find("tr.thing").Each(função(índice int, seletor *goquery. Seleção) {
título := seletor. Find("td.título").Text()
link, encontrado := seletor. Find("a.titlelink").Attr("href")
})

O código acima chama o Texto método do resultado de seletor. Encontrar para extrair o conteúdo de uma célula da tabela. A seleção de atributos, como URLs de link e imagem, exige que você use o Atr método. Esse método também retorna um valor que indica se o atributo existe.

O processo é o mesmo para selecionar quaisquer elementos e atributos de uma página da web.

o Encontrar é muito poderoso, permitindo uma ampla gama de operações para selecionar e localizar elementos HTML. Você pode explorá-los na documentação do goquery.

Salvando os dados raspados

O atributo link e o título são strings que você pode atribuir a variáveis. Em cenários reais, você estará salvando em um banco de dados ou estrutura de dados para manipulação. Muitas vezes, uma estrutura personalizada simples será suficiente.

Criar uma estrutura com campos title e link e uma fatia de structs para conter o tipo de struct.

tipo Em formação estrutura {
link fragmento
título fragmento
}
informações := fazer([]Em formação, 0)

Depois de criar a estrutura e a fatia, no corpo da função do método de documento, preencha a fatia na função que você passa para o método Find. Use o tipo struct para instanciar novas estruturas de dados, cada uma contendo um resultado.

informação = acrescentar(informações, informações{
título: título,
ligação: ligação,
})

Isso acrescenta tipos de Em formação(a estrutura) para o informação(a fatia) a partir da qual você pode manipular os dados como quiser.

A impressão da fatia mostra que você raspou com sucesso o site e preencheu a fatia.

fmt. Imprimir (informações)

É razoável salvar os dados raspados em um cache local para que você não acesse o servidor da página da Web mais do que o necessário. Isso não apenas reduzirá o tráfego, mas também acelerará seu aplicativo, pois é mais rápido recuperar dados locais do que fazer solicitações e raspar sites.

Existem muitos pacotes de banco de dados em Go que você pode usar para salvar os dados. o banco de dados/sql pacote suporta bancos de dados SQL. Existem também clientes de banco de dados NoSQL como o Driver do MongoDB Go, e bancos de dados sem servidor como FaunaDB usando o Driver FaunaDB.

A essência do Web Scraping em Go

Se você está tentando extrair dados de um site, goquery é um excelente lugar para começar. Mas é um pacote poderoso que pode fazer mais do que apenas raspar na web. Você pode descobrir mais sobre suas funcionalidades na documentação oficial do projeto.

A raspagem da Web é uma habilidade importante em vários campos de tecnologia e será útil durante muitos de seus projetos.

Como implementar conceitos de programação orientada a objetos em Go

Leia a seguir

CompartilharTweetCompartilharE-mail

Tópicos relacionados

  • Programação
  • Desenvolvimento web
  • Programação

Sobre o autor

Bondade de Ukeje Chukwuemeriwo (3 Artigos Publicados)

Goodness é redator técnico, desenvolvedor de back-end e analista de dados, simplificando vários tópicos de tecnologia à medida que explora esse campo fascinante.

Mais de Ukeje Chukwuemeriwo Bondade

Assine a nossa newsletter

Junte-se à nossa newsletter para dicas de tecnologia, análises, e-books gratuitos e ofertas exclusivas!

Clique aqui para assinar