Um raspador de imagem Python não é apenas uma ferramenta para aprimorar suas habilidades de programação. Você também pode usá-lo para obter imagens para um projeto de aprendizado de máquina ou gerar miniaturas de sites. Embora possa haver outras maneiras de fazer coisas semelhantes, nada pode superar o controle que você tem usando ferramentas que você mesmo constrói.

Aprenda a extrair imagens de qualquer site usando Python e a biblioteca BeautifulSoup.

A raspagem de imagem é legal?

Curti raspagem da web mais generalizada, a raspagem de imagem é um método para baixar o conteúdo do site. Não é ilegal, mas existem algumas regras e práticas recomendadas que você deve seguir. Primeiro, você deve evitar raspar um site se ele declarar explicitamente que não quer que você faça isso. Você pode descobrir isso procurando um /robots.txt arquivo no site de destino.

A maioria dos sites permite o rastreamento da Web porque eles desejam que os mecanismos de pesquisa indexem seu conteúdo. Você pode raspar esses sites, pois suas imagens estão disponíveis publicamente.

instagram viewer

No entanto, só porque você pode baixar uma imagem, isso não significa que você pode usá-la como se fosse sua. A maioria dos sites licencia suas imagens para impedir que você as republique ou reutilize de outras maneiras. Sempre assuma que você não pode reutilizar imagens a menos que haja uma isenção específica.

Configuração do pacote Python

Você precisará instalar alguns pacotes antes de começar. Se você não tiver o Python instalado em seu computador, visite o site oficial python.org site para baixar e instalar a versão mais recente.

Em seguida, abra seu terminal na pasta do projeto e ativar um ambiente virtual Python para isolar suas dependências.

Por fim, instale o solicitações de e Linda Sopa pacotes usando pip:

solicitações de instalação do pip bs4

Raspagem de imagem com Python

Para este tutorial de raspagem de imagem, você usará o solicitações de library para buscar uma página da web contendo as imagens de destino. Em seguida, você passará a resposta desse site para Linda Sopa para pegar todos os endereços de link de imagem de imagem Tag. Em seguida, você gravará cada arquivo de imagem em uma pasta para fazer o download das imagens.

Como buscar URLs de imagem com o BeautifulSoup do Python

Agora vá em frente e crie um arquivo Python na pasta raiz do seu projeto. Certifique-se de anexar o .py extensão para o nome do arquivo.

Cada trecho de código neste tutorial continua do anterior.

Abra o arquivo Python com qualquer bom editor de código e use o seguinte código para solicitar uma página da web:

importar solicitações de
URL = "imagessiteURL" # Substitua isso pelo URL do site
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
print (getURL.status_code)

Se o programa acima gerar um código de resposta 200, a solicitação foi bem-sucedida. Caso contrário, você pode querer garantir que sua conexão de rede esteja estável. Além disso, verifique se você forneceu um URL válido.

Agora usa Linda Sopa ler o conteúdo da página web com a ajuda do html_parser:

a partir de bs4 importar Linda Sopa

sopa = BeautifulSoup (getURL.text, 'html.parser')

imagens = sopa.find_all('img')
imprimir (imagens)

Esse código cria uma lista de objetos, cada um representando uma imagem da página da web. No entanto, o que você precisa desses dados é o texto de cada imagem src atributo.

Para extrair a fonte de cada imagem marcação:

Fontes da imagem = []

por imagem dentro imagens:
imageSources.append (image.get('src'))

imprimir (fontes da imagem)

Execute novamente seu código e os endereços de imagem agora devem aparecer em uma nova lista (Fontes de imagem). Você extraiu com sucesso cada fonte de imagem da página da Web de destino.

Como salvar as imagens com Python

Primeiro, crie uma pasta de destino de download no diretório raiz do projeto e nomeie-a imagens.

Para que o Python baixe as imagens com sucesso, seus caminhos precisam ser URLs absolutos completos. Em outras palavras, eles precisam incluir o " http://" ou " https://" prefixo, mais o domínio completo do site. Se a página da Web referenciar suas imagens usando URLs relativos, você precisará convertê-los em URLs absolutos.

No caso fácil, quando a URL é absoluta, iniciar o download é apenas o caso de solicitar cada imagem das fontes extraídas anteriormente:

por imagem dentro Fontes de imagem:
webs = request.get (imagem)
open('imagens/' + imagem.split('/')[-1], 'wb').write (webs.content)

o image.split('/')[-1] palavra-chave divide o link da imagem a cada barra (/). Em seguida, ele recupera o nome do arquivo de imagem (incluindo qualquer extensão) do último elemento.

Lembre-se de que, em casos raros, os nomes dos arquivos de imagem podem entrar em conflito, resultando em substituições de download. Sinta-se à vontade para explorar soluções para esse problema como uma extensão deste exemplo.

URLs absolutos podem ser bastante complicados, com muitos casos extremos para cobrir. Felizmente, existe um método útil no pedidos.compat pacote chamado urljoin. Este método retorna um URL completo, dado um URL base e um URL que pode ser relativo. Ele permite que você resolva valores que você encontrará em href e src atributos.

O código final fica assim:

a partir de bs4 importar Linda Sopa
URL = "imagessiteURL" # Substitua isso pelo URL do site
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
sopa = BeautifulSoup (getURL.text, 'html.parser')

imagens = sopa.find_all('img')
URLs resolvidos = []

por imagem dentro imagens:
src = imagem.get('src')
resolvidoURLs.append (requests.compat.urljoin (URL, src))

por imagem dentro URLs resolvidos:
webs = request.get (imagem)
open('imagens/' + imagem.split('/')[-1], 'wb').write (webs.content)

Nunca fique sem dados de imagem

Muitos projetos de reconhecimento de imagem atingem uma parede de tijolos devido a uma quantidade inadequada de imagens para treinar um modelo. Mas você sempre pode extrair imagens de sites para aumentar seu repositório de dados. E, felizmente, o Python é um poderoso raspador de imagens que você pode usar continuamente sem o medo de ficar caro.

Se você estiver interessado em buscar outros tipos de dados da web, talvez queira descobrir como usar o Python para raspagem geral da web.