Tutorial passo a passo: Como Scrape imagens usando Python

Guias, Como fazer, Scraping, Set-05-20245 minutos de leitura

Nesta postagem do blog, vamos orientá-lo no processo de scraping imagens de sites usando Python. Você aprenderá como começar a usar bibliotecas populares, lidar com possíveis armadilhas e até mesmo explorar técnicas avançadas para levar suas habilidades na Web scraping para o próximo nível.

Noções básicas de Scraping Imagens com Python

Para começar a usar scraping imagens com Python, você precisará se familiarizar com algumas bibliotecas importantes que facilitam essa tarefa. As opções mais populares são BeautifulSoup, Scrapy e Requests.

BeautifulSoup para extrair URLs de imagens

BeautifulSoup é uma biblioteca Python usada para analisar documentos HTML e XML. Ela cria uma árvore de análise a partir de códigos-fonte de páginas que podem ser usados para extrair dados facilmente.

Aqui está um exemplo simples de como extrair URLs de imagens usando o BeautifulSoup:

Etapa 1: Instale o BeautifulSoup e o Requests:

 pip install bs4 requests

Etapa 2: Extrair URLs de imagens:

 importar solicitações
 from bs4 import BeautifulSoup

 url = 'https://books.toscrape.com/'

 response = requests.get(url)

 soup = BeautifulSoup(response.text, 'html.parser')
 images = soup.find_all('img')

This code fetches the HTML content of the specified URL, parses it with BeautifulSoup, and then finds all the `<img>` tags, printing out their `src` attributes.

Download de imagens com Python

Depois de extrair os URLs das imagens, a próxima etapa é fazer o download delas. A biblioteca Requests é perfeita para essa tarefa devido à sua simplicidade e facilidade de uso.

Uso de solicitações para fazer download de imagens

Veja como você pode fazer download de imagens usando o Requests:

Baixar imagem do URL:

for ind, img in enumerate(images):
   img_data = requests.get(url+img['src']).content
   with open(f'image_{ind+1}.jpg', 'wb') as handler:
       handler.write(img_data)

Esse script envia uma solicitação GET para o URL da imagem e grava o conteúdo binário da imagem em um arquivo.

Tratamento de erros e exceções

É importante lidar com erros e exceções para garantir que seu script seja executado sem problemas, mesmo quando surgirem problemas. Aqui está uma versão aprimorada do script anterior:

Tratamento de erros:

for ind, img in enumerate(images):
   try:
       img_data = requests.get(url+img['src']).content
       with open(f'image_{ind+1}.jpg', 'wb') as handler:
           handler.write(img_data)
   except Exception as e:
       print(f"An error occurred during the extraction of image \n Image Url: {img['src']} \n Error: {e}")

Esse trecho de código inclui um bloco try-except para capturar quaisquer erros que possam ocorrer durante o processo de download.

Técnicas avançadas para imagens Scraping

Para tarefas mais complexas do scraping , como scraping várias páginas ou sites inteiros, o Scrapy é uma biblioteca avançada que pode lidar com esses cenários de forma eficiente.

Uso do Scrapy para tarefas complexas

O Scrapy é uma estrutura de rastreamento da Web colaborativa e de código aberto para Python. Ele foi projetado para ser rápido e eficiente, o que o torna ideal para projetos de grande escala no site scraping .

Etapa 1: Instale o Scrapy:

 pip install scrapy

Etapa 2: Crie um projeto Scrapy:

 scrapy startproject image_scraper
 cd image_scraper

Etapa 3: Definir uma aranha:

Crie um arquivo spider (`spiders/image_spider.py`) com o seguinte conteúdo:

import scrapy
class ImageSpider(scrapy.Spider):
   name = 'imagespider'
   start_urls = ['https://books.toscrape.com/']
   def parse(self, response):
       # Extract image URLs and convert them to absolute if necessary
       for img in response.css('img::attr(src)').getall():
           abs_img_url = response.urljoin(img)
           yield {'image_url': abs_img_url}
      
       # Find the link to the next page and create a request for it
       next_page = response.css('a.next::attr(href)').get()
       if next_page is not None:
           next_page_url = response.urljoin(next_page)
           yield response.follow(next_page_url, self.parse)

Esse spider simples do Scrapy inicia no URL fornecido, extrai todos os URLs de imagens e segue os links da próxima página para continuar scraping.

Aprimorando sua imagem Scraping Projetos

Para aprimorar ainda mais seus projetos scraping , considere o uso de APIs para acessar imagens de alta qualidade e automatizar suas tarefas para aumentar a eficiência.

Uso de APIs para imagens Scraping

As APIs fornecem uma maneira confiável e legal de acessar imagens. Muitos sites oferecem APIs que permitem que você pesquise e faça download de imagens de forma programática. Um desses sites é a API do Unsplash.

Exemplo com a API do Unsplash:

import requests
# Replace 'YOUR_ACCESS_KEY' with your actual Unsplash Access Key
api_url = "https://api.unsplash.com/photos/random"
headers = {"Authorization": "Client-ID YOUR_ACCESS_KEY"}
params = {"query": "nature"}
try:
   response = requests.get(api_url, headers=headers, params=params)
   response.raise_for_status()  # This will raise an exception for HTTP errors
   data = response.json()
   image_url = data['urls']['full']
   print(image_url)
except requests.exceptions.HTTPError as err:
   print(f"HTTP error occurred: {err}")
except Exception as err:
   print(f"An error occurred: {err}")

Esse script usa a API do Unsplash para buscar uma imagem aleatória da natureza.

Automatização de tarefas de imagem Scraping

A automação economiza tempo e garante que suas tarefas do scraping sejam executadas sem problemas, sem intervenção manual. Ferramentas como cron jobs em sistemas Unix ou Task Scheduler no Windows podem programar seus scripts para serem executados em intervalos regulares.

Trabalhos Cron em sistemas Unix - Crontab:

O Crontab é um utilitário poderoso em sistemas operacionais do tipo Unix para agendar tarefas, conhecidas como"cron jobs", para serem executadas automaticamente em horários específicos. Vamos ver como podemos agendar uma tarefa usando o Crontab.

Entendendo a sintaxe do Crontab:

Um arquivo crontab consiste em linhas de comando, em que cada linha representa um trabalho separado. A sintaxe é a seguinte:

MIN HOUR DOM MON DOW CMD
  • MIN: Campo de minutos (0 a 59)
  • HOUR: Campo de hora (0 a 23)
  • DOM: Dia do mês (1 a 31)
  • MON: Campo de mês (1 a 12)
  • DOW: Dia da semana (0 a 7, sendo que 0 e 7 representam domingo)
  • CMD: O comando a ser executado (nesse caso, será o executável de seu script python)

Aqui está um exemplo de execução de um script python diariamente às 8:00PM

0 20 * * * * /usr/bin/python3/path/to/Image_Scraper.py

Usando o Agendador de Tarefas (Windows):

  • Abra o Agendador de Tarefas (use a barra de pesquisa no Windows e procure por "Agendador de Tarefas")
  • Clique em"Create Basic Task" (Criar tarefa básica)
  • Forneça um nome e uma descrição e clique em"Next"(Avançar)
  • Selecione a granularidade ou o intervalo necessário para executar essa tarefa e clique em"Next" (Avançar)
  • Agora, verifique sea opção "Start a program" (Iniciar um programa) está marcada e clique em"Next" (Avançar)
  • Forneça o caminho para seu script python clicando em"Browse"(Procurar). Opcionalmente, se precisar fornecer algum argumento para o script python, adicione-o nos campos"Add arguments" (Adicionar argumentos) e clique em"Next" (Avançar)
  • Como última etapa, basta clicar em"Finish" (Concluir) e, assim, essa tarefa estará pronta para ser executada no intervalo especificado.

Conclusão

Nesta postagem do blog, exploramos como scrape imagens de sites usando Python. Cobrimos os conceitos básicos com BeautifulSoup e Requests, técnicas avançadas com Scrapy e práticas éticas de scraping . Além disso, discutimos como aprimorar seus projetos scraping usando APIs e ferramentas de automação como o Windows Task Scheduler.

A imagem scraping é uma habilidade poderosa que pode aprimorar seus recursos de aquisição de dados e abrir novas possibilidades para seus projetos.

Feliz scraping!