Web crawlers com Pyquery

Roselma Mendes
2 min readSep 29, 2016

--

Web Crawlers

Também conhecidos como web spiders, são robôs (agentes) que navegam pela internet lendo, copiando conteúdo das páginas para indexação do dado coletado.

Tão comuns no nosso dia-a-dia, as ferramentas de busca (Google, Yahoo, Bing, etc) usam os web crawlers para geração dos resultados de pesquisas.

Na indexação entra em cena o web scraping, muitas vezes confundido com o web crawler, mas que na realidade são complementares entre si.

Um web crawler em python

As atividades de um web crawler são:

  1. Crie uma lista de URLs (seeds) que deseja visitar.
  2. Pegue os links da página, chamados de crawl frontier.
  3. Sobre o crawl frontier, aplique o passo 1 e 2 para cada link encontrado.

Dos sites visitados são extraídas as informações pertinentes ao domínio do problema em questão. Por exemplo, no caso do Googlebot, o crawler do Google, o conteúdo de cada site é baixado para a indexação com o Google Index otimizando o tempo de resposta das buscas.

Para Python existem algumas bibliotecas que servem para crawling e uma delas é a Pyquery.

Pyquery vem com uma proposta de proporcionar na linguagem Python a mesma usabilidade do JQuery em Javascript.

Python 3.5

O método read_links (linha 24) recebe uma url (seed) passada para uma instancia de Pyquery (linha 25). Com esta instancia temos acesso a toda árvore de elementos da página no formato de um documento xml.

Na linha 30 percorro todas as tags <a> usando o método filter para verificar se a url atende uma certa regra, se não, o elemento é ignorado da lista. Depois para cada elemento eleito obtenho o link do atributo href (linha 31) através do método attr.

Pyquery permite o acesso às tags de uma página HTML usando a notação de CSS. Se quisesse ter todos os componentes da classe articles, simplesmente poderia usar:

crawler('.articles')

O objetivo do meu código é visitar três sites (seeds, linha 3) e pegar somente os links dos artigos técnicos de cada um (linha 18 a 20).

O restante do código cobre a lógica para filtrar somente os links relacionados a artigos.

Uma coisa que poderia fazer com esse código, para ficar mais próximo de um crawler real, é visitar os links de cada site e copiar o seu conteúdo e repetir o processo: listar, visitar, copiar recursivamente com todo novo link encontrado.

Explore outros métodos do Pyquery para enriquecer sua solução. Alguns métodos interessantes:

  • text
  • each
  • find
  • filter
  • eq
  • map

Aqui você encontra mais informações da API.

Links

Web Crawler — Wikipedia

Scrap the web with Pyquery

A Googlebot guide

--

--