Scrapy

Web Scraping com Python Scrapy Module

Web Scraping com Python Scrapy Module
A habilidade de fazer scraping na web se tornou de ouro hoje, então vamos aprender como podemos obter os dados necessários de páginas da web. Neste artigo, estaríamos falando sobre a biblioteca Scrapy Python, o que ela pode fazer e como usá-la. Vamos começar.

Por que Scrapy?

Scrapy é uma biblioteca robusta de scraping da web, que oferece a capacidade de baixar páginas da web, imagens e quaisquer dados que você possa imaginar na velocidade da luz. A velocidade é de grande importância na computação, e o Scrapy trabalha nisso visitando sites de forma assíncrona e fazendo muito trabalho em segundo plano, fazendo com que toda a tarefa pareça fácil.

Deve ser dito que Python tem outras bibliotecas que podem ser usadas para extrair dados de sites, mas nenhuma é comparável ao Scrapy quando se trata de eficiência.

Instalação

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

Como acontece com a 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 importando 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.

>>> import scrapy

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

Criando um Projeto de Web Scraping

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

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

scrapy startproject webscraper

Isso criaria um diretório chamado arranha-céu no diretório atual e scrapy.arquivo cfg. No arranha-céu  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 o webcraping para nós seria armazenado no aranhas diretório.

Escrevendo nossa aranha

Antes de prosseguirmos para escrever nosso spider, espera-se que já saibamos qual site queremos raspar. Para o propósito deste artigo, estamos copiando um exemplo de site de webcraping: http: // exemplo.Raspagem da web.com.

Este site tem apenas nomes de países e suas bandeiras, com páginas diferentes e vamos desfazer-se de três das páginas. As três páginas nas quais trabalharíamos são:

http: // exemplo.Raspagem da web.com / locais / padrão / índice / 0
http: // exemplo.Raspagem da web.com / locais / padrão / índice / 1
http: // exemplo.Raspagem da web.com / locais / padrão / índice / 2

De volta ao nosso spider, vamos criar um sample_spider.py no diretório spiders. Do terminal, um simples toque em sample_spider.py comando ajudaria a criar um novo arquivo.

Depois de criar o arquivo, nós o preencheríamos com as seguintes linhas de código:

importar sucata
 
classe SampleSpider (scrapy.Aranha):
nome = "amostra"
start_urls = [
"http: // exemplo.Raspagem da web.com / locais / padrão / índice / 0 ",
"http: // exemplo.Raspagem da web.com / locais / padrão / índice / 1 ",
"http: // exemplo.Raspagem da web.com / locais / padrão / índice / 2 "
]
 
def parse (self, response):
page_number = resposta.url.dividir ('/') [- 1]
file_name = "página .html ".formato (número_página)
com open (file_name, 'wb') como arquivo:
Arquivo.escrever (resposta.corpo)

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

amostra scrapy crawl

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

Depois de executar esse comando, você notaria que três arquivos chamados page0.html, page1.html, page2.html são salvos no diretório.

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

importar sucata

Primeiro, importamos a biblioteca para o nosso namespace.

classe SampleSpider (scrapy.Aranha):
nome = "amostra"

Em seguida, criamos uma classe de aranha que chamamos SampleSpider. Nossa aranha herda de scrapy.Aranha. Todas as nossas aranhas têm que herdar de sucata.Aranha. Depois de criar a classe, damos à nossa aranha um nome atributo, este nome atributo é usado para invocar a aranha do terminal. Se você se lembra, nós executamos o amostra scrapy crawl comando para executar nosso código.

start_urls = [
 
"http: // exemplo.Raspagem da web.com / locais / padrão / índice / 0 ",
"http: // exemplo.Raspagem da web.com / locais / padrão / índice / 1 ",
"http: // exemplo.Raspagem da web.com / locais / padrão / índice / 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 alguns recursos. Para saber mais, você pode verificar a documentação scrapy.

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

def parse (self, response):

Em seguida, declaramos uma função de análise e fornecemos a ela um parâmetro de resposta. Quando o código é executado, a função de análise é evocada e o objeto de resposta é enviado, o qual contém todas as informações da página da web visitada.

page_number = resposta.url.dividir ('/') [- 1]
file_name = "página .html ".formato (número_página)

O que fizemos com este código é dividir a string contendo o endereço e salvar 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 string que seria o nome dos arquivos que estaríamos criando.

com open (file_name, 'wb') como arquivo:
Arquivo.escrever (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 BeautifulSoup pode ser usada para analisar o corpo.resposta. Você pode verificar este tutorial do BeautiulSoup se não estiver familiarizado com a biblioteca.

Da página a ser descartada, aqui está um trecho do html contendo os dados de que precisamos:

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

importar sucata
de bs4 import BeautifulSoup
 
classe SampleSpider (scrapy.Aranha):
nome = "amostra"
 
start_urls = [
"http: // exemplo.Raspagem da web.com / locais / padrão / índice / 0 ",
"http: // exemplo.Raspagem da web.com / locais / padrão / índice / 1 ",
"http: // exemplo.Raspagem da web.com / locais / padrão / índice / 2 "
]
 
def parse (self, response):
page_number = resposta.url.dividir ('/') [- 1]
file_name = "página .TXT".formato (número_página)
com open (file_name, 'w') como arquivo:
html_content = BeautifulSoup (resposta.corpo, "lxml")
div_tags = html_content.find ("div", "id": "resultados")
country_tags = div_tags.find_all ("div")
country_name_position = zip (intervalo (len (country_tags)), country_tags)
para a posição, country_name em country_name_position:
Arquivo.escrever ("número do país : \ n".formato (posição + 1, country_name.texto))

O código é praticamente igual ao inicial, no entanto, adicionei BeautifulSoup ao nosso namespace e alterei a lógica na função de análise.

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

def parse (self, response):

Aqui, definimos a função de análise e atribuímos a ela um parâmetro de resposta.

page_number = resposta.url.dividir ('/') [- 1]
file_name = "página .TXT".formato (número_página)
com open (file_name, 'w') como arquivo:

Isso faz a mesma coisa que discutida no código inicial, a única diferença é que estamos trabalhando com um arquivo de texto em vez de um arquivo html. Estaríamos salvando os dados copiados 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 o resposta.corpo como um argumento para a biblioteca BeautifulSoup e atribuiu os resultados ao html_content variável.

div_tags = html_content.find ("div", "id": "resultados")

Pegando 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 podemos 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 também, agora estamos simplesmente obtendo todas as div tags e salvá-los como uma lista no country_tags variável.

country_name_position = zip (intervalo (len (country_tags)), country_tags)
 
para a posição, country_name em country_name_position:
Arquivo.escrever ("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 de país e, em seguida, salvamos o conteúdo em um arquivo de texto.

Portanto, em seu arquivo de texto, você teria algo como:

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

Conclusão

O Scrapy é sem dúvida uma das bibliotecas mais poderosas que existe, é muito rápido e basicamente baixa a página da web. Em seguida, dá a você a liberdade de fazer o que quiser com o conteúdo da web.

Devemos observar que Scrapy pode fazer muito mais do que verificamos aqui. Você pode analisar dados com seletores Scrapy CSS ou Xpath se desejar. Você pode ler a documentação se precisar fazer algo mais complexo.

Jogos HD Remasterizados para Linux que nunca tiveram uma versão Linux anterior
Muitos desenvolvedores e editores de jogos estão apresentando remasterização em HD de jogos antigos para estender a vida da franquia, por favor, os fã...
Como usar o AutoKey para automatizar jogos Linux
AutoKey é um utilitário de automação de desktop para Linux e X11, programado em Python 3, GTK e Qt. Usando sua funcionalidade de script e MACRO, você ...
Como mostrar o contador de FPS em jogos Linux
Os jogos Linux tiveram um grande impulso quando a Valve anunciou o suporte Linux para o cliente Steam e seus jogos em 2012. Desde então, muitos jogos ...