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.
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 é 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:
pip install bs4 requests
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.
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.
Veja como você pode fazer download de imagens usando o Requests:
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.
É 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:
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.
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.
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 .
pip install scrapy
scrapy startproject image_scraper
cd image_scraper
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.
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.
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.
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.
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.
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.
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
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
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!