Como construir um rastreador da web básico para obter informações de um site

Como construir um rastreador da web básico para obter informações de um site

Os programas que leem informações de sites ou rastreadores da web têm todos os tipos de aplicativos úteis. Você pode procurar informações sobre ações, resultados esportivos, texto de uma conta do Twitter ou obter preços de sites de compras.





Escrever esses programas de rastreamento da web é mais fácil do que você imagina. Python tem uma ótima biblioteca para escrever scripts que extraem informações de sites. Vejamos como criar um rastreador da web usando Scrapy.





Instalando o Scrapy

Scrapy é uma biblioteca Python que foi criada para explorar a web e construir rastreadores da web. É rápido, simples e pode navegar por várias páginas da web sem muito esforço.





Scrapy está disponível por meio da biblioteca Pip Instala Python (PIP), aqui está uma atualização sobre como instalar o PIP no Windows, Mac e Linux .

O uso de um ambiente virtual Python é preferível porque permitirá que você instale o Scrapy em um diretório virtual que deixa seus arquivos de sistema sozinhos. A documentação do Scrapy recomenda fazer isso para obter os melhores resultados.



Crie um diretório e inicialize um ambiente virtual.

melhor lugar para comprar macbook recondicionado
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

Agora você pode instalar o Scrapy nesse diretório usando um comando PIP.





pip install scrapy

Uma verificação rápida para ter certeza de que o Scrapy está instalado corretamente

scrapy
# prints
Scrapy 1.4.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
...

Como construir um rastreador da web

Agora que o ambiente está pronto, você pode começar a construir o rastreador da web. Vamos extrair algumas informações de uma página da Wikipedia sobre baterias: https://en.wikipedia.org/wiki/Battery_(electricity) .





A primeira etapa para escrever um rastreador é definir uma classe Python que se estende de Scrapy.Spider . Isso dá a você acesso a todas as funções e recursos do Scrapy. Vamos chamar essa aula spider1 .

Uma classe de aranha precisa de algumas informações:

  • para nome para identificar a aranha
  • para start_urls variável contendo uma lista de URLs a partir dos quais rastrear (o URL da Wikipedia será o exemplo neste tutorial)
  • para parse () método que é usado para processar a página da web para extrair informações
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

Um teste rápido para verificar se tudo está funcionando corretamente.

scrapy runspider spider1.py
# prints
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}
2017-11-23 09:09:21 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.logstats.LogStats',
...

Desligando o registro

Executar o Scrapy com esta classe imprime informações de log que não irão ajudá-lo agora. Vamos simplificar removendo esse excesso de informações de log. Use um aviso declaração adicionando código ao início do arquivo.

import logging
logging.getLogger('scrapy').setLevel(logging.WARNING)

Agora, quando você executar o script novamente, as informações de log não serão impressas.

Usando o Chrome Inspector

Tudo em uma página da web é armazenado em elementos HTML. Os elementos são organizados no Document Object Model (DOM). Compreender o DOM é fundamental para obter o máximo do seu rastreador da web. Um rastreador da web pesquisa todos os elementos HTML em uma página para encontrar informações, portanto, saber como eles estão organizados é importante.

O Google Chrome tem ferramentas que ajudam você a encontrar elementos HTML com mais rapidez. Você pode localizar o HTML para qualquer elemento que você vê na página da web usando o inspetor.

  • Navegue para uma página no Chrome
  • Coloque o mouse sobre o elemento que você gostaria de ver
  • Clique com o botão direito e selecione Inspecionar do menu

Estas etapas abrirão o console do desenvolvedor com o Elementos guia selecionada. Na parte inferior do console, você verá uma árvore de elementos. Esta árvore é como você obterá informações para o seu script.

Extraindo o Título

Vamos pegar o script para fazer algum trabalho para nós; Um rastreamento simples para obter o texto do título da página da web.

Inicie o script adicionando algum código ao parse () método que extrai o título.

...
def parse(self, response):
print response.css('h1#firstHeading::text').extract()
...

o resposta argumento suporta um método chamado CSS () que seleciona elementos da página usando o local que você fornece.

Neste exemplo, o elemento é h1.firstHeading . Adicionando

::text

ao script é o que fornece o conteúdo de texto do elemento. finalmente, o extrair() método retorna o elemento selecionado.

Executar este script em Scrapy imprime o título em formato de texto.

[u'Battery (electricity)']

Encontrando a Descrição

Agora que raspamos o texto do título, vamos fazer mais com o script. O rastreador encontrará o primeiro parágrafo após o título e extrairá essa informação.

Esta é a árvore de elementos no Chrome Developer Console:

como aumentar o nitro de um servidor
div#mw-content-text>div>p

A seta para a direita (>) indica um relacionamento pai-filho entre os elementos.

Este local retornará todos os p elementos correspondidos, o que inclui a descrição completa. Para obter o primeiro p elemento, você pode escrever este código:

response.css('div#mw-content-text>div>p')[0]

Assim como o título, você adiciona extrator CSS

::text

para obter o conteúdo de texto do elemento.

response.css('div#mw-content-text>div>p')[0].css('::text')

A expressão final usa extrair() para retornar a lista. Você pode usar o Python Junte() função para entrar na lista quando todo o rastreamento estiver concluído.

def parse(self, response):
print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract())

O resultado é o primeiro parágrafo do texto!

An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is
...

Coletando dados JSON

O Scrapy pode extrair informações na forma de texto, o que é útil. O Scrapy também permite que você visualize os dados JavaScript Object Notation (JSON). JSON é uma maneira elegante de organizar informações e é amplamente utilizado no desenvolvimento web. JSON funciona muito bem com Python também.

Quando você precisa coletar dados como JSON, você pode usar o produção declaração embutida no Scrapy.

Aqui está uma nova versão do script usando uma declaração de rendimento. Em vez de obter o primeiro elemento p no formato de texto, isso pegará todos os elementos p e os organizará no formato JSON.

como fazer usb iso bootável
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Agora você pode executar o spider especificando um arquivo JSON de saída:

scrapy runspider spider3.py -o joe.json

O script agora imprimirá todos os elementos p.

[
{'para': 'An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term 'battery' specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]'},
{'para': 'Primary (single-use or 'disposable') batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple
...

Raspagem de vários elementos

Até agora, o rastreador da web retirou o título e um tipo de elemento da página. O Scrapy também pode extrair informações de diferentes tipos de elementos em um script.

Vamos extrair os maiores sucessos de bilheteria da IMDb para um fim de semana. Esta informação é extraída de http://www.imdb.com/chart/boxoffice , em uma tabela com linhas para cada métrica.

o parse () método pode extrair mais de um campo da linha. Usando as Ferramentas do desenvolvedor do Chrome, você pode encontrar os elementos aninhados dentro da tabela.

...
def parse(self, response):
for e in response.css('div#boxoffice>table>tbody>tr'):
yield {
'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(),
'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(),
'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(),
'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(),
'image': e.css('td.posterColumn img::attr(src)').extract_first(),
}
...

o imagem seletor especifica que img é um descendente de td.posterColumn . Para extrair o atributo correto, use a expressão ::attr(src).

Executar o spider retorna JSON:

[
{'gross': '.8M', 'weeks': '1', 'weekend': '.8M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BYWVhZjZkYTItOGIwYS00NmRkLWJlYjctMWM0ZjFmMDU4ZjEzXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg', 'title': 'Justice League'},
{'gross': '.5M', 'weeks': '1', 'weekend': '.5M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BYjFhOWY0OTgtNDkzMC00YWJkLTk1NGEtYWUxNjhmMmQ5ZjYyXkEyXkFqcGdeQXVyMjMxOTE0ODA@._V1_UX45_CR0,0,45,67_AL_.jpg', 'title': 'Wonder'},
{'gross': '7.3M', 'weeks': '3', 'weekend': '.7M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BMjMyNDkzMzI1OF5BMl5BanBnXkFtZTgwODcxODg5MjI@._V1_UY67_CR0,0,45,67_AL_.jpg', 'title': 'Thor: Ragnarok'},
...
]

Mais Web Scrapers e Bots

Scrapy é uma biblioteca detalhada que pode fazer praticamente qualquer tipo de rastreamento da web que você solicitar. Quando se trata de encontrar informações em elementos HTML, combinado com o suporte do Python, é difícil de bater. Esteja você construindo um rastreador da web ou aprendendo sobre os fundamentos da web scraping, o único limite é o quanto você está disposto a aprender.

Se você está procurando mais maneiras de criar rastreadores ou bots, pode tentar construir bots do Twitter e Instagram usando Python . Python pode construir algumas coisas incríveis no desenvolvimento da web, então vale a pena ir além dos rastreadores da web ao explorar essa linguagem.

Compartilhado Compartilhado Tweet O email 15 Comandos do Prompt de Comando do Windows (CMD) que você deve conhecer

O prompt de comando ainda é uma ferramenta poderosa do Windows. Aqui estão os comandos CMD mais úteis que todo usuário do Windows precisa saber.

Leia a seguir
Tópicos relacionados
  • Programação
  • Ferramentas para webmasters
  • Programação
  • Pitão
  • Tutoriais de codificação
  • Web Crawlers
Sobre o autor Anthony Grant(40 artigos publicados)

Anthony Grant é um escritor freelance cobrindo Programação e Software. Ele é formado em Ciência da Computação e se interessa por programação, Excel, software e tecnologia.

Mais de Anthony Grant

Assine a nossa newsletter

Junte-se ao nosso boletim informativo para dicas de tecnologia, análises, e-books grátis e ofertas exclusivas!

Clique aqui para se inscrever