Nesta publicação do blogue, vamos guiá-lo através do processo de recolha de imagens de Web sites utilizando Python. Aprenderá a começar a utilizar bibliotecas populares, a lidar com potenciais armadilhas e até a explorar técnicas avançadas para levar as suas capacidades de recolha de imagens da Web para o próximo nível.
Para começar a fazer scraping de imagens com Python, vai precisar de se familiarizar com algumas bibliotecas chave que facilitam esta tarefa. As escolhas mais populares são BeautifulSoup, Scrapy e Requests.
BeautifulSoup é uma biblioteca Python utilizada para analisar documentos HTML e XML. Cria uma árvore de análise a partir dos códigos-fonte da página que pode ser utilizada para extrair dados facilmente.
Eis um exemplo simples de como extrair URLs de imagens utilizando a BeautifulSoup:
pip install bs4 requests
importar pedidos
from bs4 import BeautifulSoup
url = 'https://books.toscrape.com/'
resposta = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
imagens = 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, o próximo passo é fazer o download delas. A biblioteca Requests é perfeita para esta tarefa devido à sua simplicidade e facilidade de utilização.
Eis como pode descarregar imagens utilizando os Pedidos:
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)
Este script envia um pedido GET para o URL da imagem e escreve o conteúdo binário da imagem num ficheiro.
É importante tratar os erros e as excepções para garantir que o seu script funciona sem problemas, mesmo quando surgem problemas. Aqui está uma versão melhorada 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}")
Este trecho de código inclui um bloco try-except para capturar quaisquer erros que possam ocorrer durante o processo de download.
Para tarefas de raspagem mais complexas, como raspar várias páginas ou sites inteiros, o Scrapy é uma biblioteca poderosa que pode lidar com esses cenários de forma eficiente.
Scrapy é uma estrutura de código aberto e colaborativa de rastreamento da Web para Python. Foi concebido para ser rápido e eficiente, tornando-o ideal para projectos de raspagem em grande escala.
pip install scrapy
scrapy startproject image_scraper
cd image_scraper
Criar um ficheiro 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)
Esta simples aranha Scrapy começa no URL fornecido, extrai todos os URLs de imagens e segue as hiperligações da página seguinte para continuar a recolha.
Para melhorar ainda mais os seus projectos de raspagem, considere a utilização de APIs para aceder a imagens de alta qualidade e automatizar as suas tarefas para maior eficiência.
As APIs proporcionam uma forma fiável e legal de aceder a imagens. Muitos sítios Web oferecem APIs que permitem pesquisar e descarregar imagens de forma programática. Um desses sítios é a API 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}")
Este script utiliza a API Unsplash para ir buscar uma imagem aleatória da natureza.
A automatização poupa tempo e assegura que as suas tarefas de recolha de dados são executadas sem problemas e sem intervenção manual. Ferramentas como cron jobs em sistemas Unix ou Task Scheduler no Windows podem programar os seus scripts para serem executados em intervalos regulares.
O Crontab é um utilitário poderoso nos sistemas operativos do tipo Unix para agendar tarefas, conhecidas como"cron jobs", para serem executadas automaticamente a horas específicas. Vamos ver como podemos agendar uma tarefa usando o Crontab.
Um ficheiro crontab consiste em linhas de comando, em que cada linha representa um trabalho separado. A sintaxe é a seguinte:
MIN HORA DOM SEG 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 extrair imagens de sites usando Python. Cobrimos o básico com BeautifulSoup e Requests, técnicas avançadas com Scrapy e práticas éticas de raspagem. Além disso, discutimos como aprimorar seus projetos de raspagem usando APIs e ferramentas de automação como o Agendador de tarefas do Windows.
A recolha de imagens é uma competência poderosa que pode melhorar as suas capacidades de aquisição de dados e abrir novas possibilidades para os seus projectos.
Boa raspagem!