Raspagem na web com módulo de scrapy python

Raspagem na web com módulo de scrapy python
A habilidade de raspar a web tornou -se dourada hoje, então vamos aprender como podemos obter os dados necessários das páginas da web. Neste artigo, estaríamos falando sobre a biblioteca Python de Scrapy, o que ela pode fazer e como usá -lo. Vamos começar.

Por que a navegação?

O SCRAPY é uma biblioteca robusta de raspagem na web, que oferece a capacidade de baixar páginas da web, imagens e quaisquer dados que você possa imaginar na velocidade do raio. A velocidade é de grande importância na computação, e o scrapy funciona nisso visitando sites de forma assíncrona e fazendo muito trabalho de fundo, fazendo com que toda a tarefa pareça fácil.

Deve -se dizer que o Python possui outras bibliotecas que podem ser usadas para raspar dados de sites, mas nenhum é comparável ao SCRAPY quando se trata de eficiência.

Instalação

Vamos dar uma rápida olhada em como essa poderosa biblioteca pode ser instalada em sua máquina.

Como na maioria das bibliotecas Python, você pode instalar o SCRAPY usando o módulo PIP:

pip install scrapy

Você pode verificar se a instalação foi bem -sucedida ao importar a scrapy no shell interativo do Python.

$ python
Python 3.5.2 (padrão, 14 de setembro de 2017, 22:51:06)
[GCC 5.4.0 20160609] no Linux

Digite “ajuda”, “direitos autorais”, “créditos” ou “licença” para obter mais informações.

>>> Scrapy de importação

Agora que terminamos a instalação, vamos entrar no meio das coisas.

Criando um projeto de raspagem na web

Durante a instalação, a palavra -chave de scrapy foi adicionada ao caminho para que possamos usar a palavra -chave diretamente da linha de comando. Estaríamos aproveitando isso, durante todo o uso da biblioteca.

Do diretório de sua escolha, execute o seguinte comando:

Scrapy StartProject WebScraper

Isso criaria um diretório chamado WebScraper no diretório atual e na navegação.Arquivo CFG. No WebScraper diretório teria __iniciar__.Py, itens.Py, Middlewares.py, pipelines.py, configurações.py arquivos e um diretório chamado aranhas.

Nossos arquivos de aranha eu.e. O script que faz a lista de web para nós seria armazenado no aranhas diretório.

Escrevendo nossa aranha

Antes de prosseguirmos para escrever nossa aranha, espera -se que já saibamos qual site queremos raspar. Para os fins deste artigo, estamos raspando um amostra do site da WebScraping: http: // exemplo.Raspagem da web.com.

Este site apenas tem nomes de países e suas bandeiras, com páginas diferentes e vamos descartar três das páginas. As três páginas em que estaríamos trabalhando são:

http: // Exemplo.Raspagem da web.com/lugares/default/index/0
http: // Exemplo.Raspagem da web.com/lugares/default/index/1
http: // Exemplo.Raspagem da web.com/lugares/default/index/2

De volta à nossa aranha, vamos criar um sample_spider.py no diretório Spiders. Do terminal, um simples toque sample_spider.py O comando ajudaria a criar um novo arquivo.

Depois de criar o arquivo, preenchemos -o com as seguintes linhas de código:

importação de importação
Amosppers de classe (Scrapy.Aranha):
nome = "amostra"
start_urls = [
"Http: // Exemplo.Raspagem da web.com/lugares/default/index/0 ",
"Http: // Exemplo.Raspagem da web.com/lugares/default/index/1 ",
"Http: // Exemplo.Raspagem da web.com/lugares/default/index/2 "
]
def parse (self, resposta):
página_number = resposta.url.Split ('/') [-1]
file_name = "página .html ".formato (Page_Number)
com open (file_name, 'wb') como arquivo:
arquivo.Escreva (resposta.corpo)

A partir do nível superior do diretório do projeto, execute o seguinte comando:

amostra de rastreamento de scrapy

Lembre -se de que demos nosso Amostragem classe A nome atributo amostra.

Depois de executar esse comando, você notaria que três arquivos nomeados Page0.html, página1.html, página2.html são salvos no diretório.

Vamos dar uma olhada no que acontece com o código:

importação de importação

Primeiro, importamos a biblioteca para o nosso espaço de nome.

Amosppers de classe (Scrapy.Aranha):
nome = "amostra"

Então criamos uma classe de aranha que chamamos Amostragem. Nossa aranha herda de Scrapy.Aranha. Todas as nossas aranhas precisam herdar da navegação.Aranha. Depois de criar a aula, damos à nossa aranha um nome atributo, isso nome atributo é usado para convocar a aranha do terminal. Se você se lembra, nós executamos o amostra de rastreamento de scrapy comando para executar nosso código.

start_urls = [
"Http: // Exemplo.Raspagem da web.com/lugares/default/index/0 ",
"Http: // Exemplo.Raspagem da web.com/lugares/default/index/1 ",
"Http: // Exemplo.Raspagem da web.com/lugares/default/index/2 "
]

Também temos uma lista de URLs para a aranha visitar. A lista deve ser chamada start_urls. Se você quiser dar à lista um nome diferente, teríamos que definir um start_requests função que nos dá mais recursos. Para saber mais, você pode conferir a documentação de scrapy.

Independentemente disso, não se esqueça de incluir o http: // ou https: // para seus links, caso contrário, você teria que lidar com um erro de esquema ausente.

def parse (self, resposta):

Em seguida, seguimos em frente para declarar uma função de análise e dar um parâmetro de resposta. Quando o código é executado, a função Parse é evocada e o objeto de resposta é enviado no qual contém todas as informações da página da web visitada.

página_number = resposta.url.Split ('/') [-1]
file_name = "página .html ".formato (Page_Number)

O que fizemos com este código é dividir a string que contém o endereço e salvou o número da página sozinho em um número de página variável. Então criamos um nome do arquivo variável inserindo o número de página na sequência que seria o nome do arquivo dos arquivos que estaríamos criando.

com open (file_name, 'wb') como arquivo:
arquivo.Escreva (resposta.corpo)

Agora criamos o arquivo e estamos escrevendo o conteúdo da página da web no arquivo usando o corpo atributo do resposta objeto.

Podemos fazer mais do que apenas salvar a página da web. A biblioteca de belo grupo pode ser usada para analisar o corpo.resposta. Você pode conferir este tutorial Beautiulsoup se não estiver familiarizado com a biblioteca.

Na página a ser descartada, aqui está um trecho do HTML que contém os dados de que precisamos:






..
..

Afeganistão

Ilhas Aland

Você notaria que todos os dados necessários estão entre as tags div, então vamos reescrever o código para analisar o html.
Aqui está o nosso novo script:

importação de importação
De BS4 Import BeautifulSoup
Amosppers de classe (Scrapy.Aranha):
nome = "amostra"
start_urls = [
"Http: // Exemplo.Raspagem da web.com/lugares/default/index/0 ",
"Http: // Exemplo.Raspagem da web.com/lugares/default/index/1 ",
"Http: // Exemplo.Raspagem da web.com/lugares/default/index/2 "
]
def parse (self, resposta):
página_number = resposta.url.Split ('/') [-1]
file_name = "página .TXT".formato (Page_Number)
com open (file_name, 'w') como arquivo:
html_content = beautifulSoup (resposta.corpo, "lxml")
div_tags = html_content.encontre ("div", "id": "Results")
country_tags = div_tags.Find_all ("div")
country_name_position = zip (range (len (country_tags)), country_tags)
Para posição, country_name em country_name_position:
arquivo.Write ("Número do país : \ n".formato (posição + 1, country_name.texto))

O código é praticamente o mesmo que o inicial, no entanto, adicionei o belogus do nosso espaço para nome e mudei a lógica na função Parse.

Vamos dar uma rápida olhada na lógica.

def parse (self, resposta):

Aqui, definimos a função Parse e damos um parâmetro de resposta.

página_number = resposta.url.Split ('/') [-1]
file_name = "página .TXT".formato (Page_Number)
com open (file_name, 'w') como arquivo:

Isso faz a mesma coisa discutida no código íntimo, a única diferença é que estamos trabalhando com um arquivo de texto em vez de um arquivo html. Estaríamos salvando os dados raspados no arquivo de texto, e não todo o conteúdo da Web em HTML como feito anteriormente.

html_content = beautifulSoup (resposta.corpo, "lxml")

O que fizemos nesta linha de código é enviar no resposta.corpo como um argumento para a biblioteca de belo grupo e atribuiu os resultados ao html_content variável.

div_tags = html_content.encontre ("div", "id": "Results")

Tomando o conteúdo HTML, estamos analisando aqui, procurando por um div tag que também tem e eu ia atributo com resultados Como é o valor, então conseguimos salvá -lo em um div_tags variável.

country_tags = div_tags.Find_all ("div")

Lembre -se de que os países existiam em div Tags também, agora estamos simplesmente recebendo todos os div tags e salvando -os como uma lista no country_tags variável.

country_name_position = zip (range (len (country_tags)), country_tags)
Para posição, country_name em country_name_position:
arquivo.Write ("Número do país : \ n".formato (posição + 1, country_name.texto))

Aqui, estamos iterando a posição dos países entre todas as tags do país, então estamos salvando o conteúdo em um arquivo de texto.

Então, em seu arquivo de texto, você teria algo como:

país número 1: Afeganistão
Número 2 do país: Ilhas Aland
Número 3 do país: Albânia
..

Conclusão

O SCRAPY é sem dúvida uma das bibliotecas mais poderosas do mercado, é muito rápido e basicamente baixa a página da web. Então lhe dá liberdade para o que você deseja com o conteúdo da web.

Devemos observar que o SCRAPY pode fazer muito mais do que checamos aqui. Você pode analisar dados com CSS ou seletores de scrapy ou XPath, se desejar. Você pode ler a documentação se precisar fazer algo mais complexo.