You-Get: um downloader simples para raspar a web
(github.com/soimort)- You-Get é um pequeno utilitário de linha de comando para baixar da web conteúdos de mídia como vídeo, áudio e imagens, usado quando não há outra forma simples de fazer o download
- Permite baixar vídeos, imagens e áudio de vários sites como YouTube, Youku, niconico, Tumblr, SoundCloud, Instagram, bilibili e TikTok, ou fazer streaming de vídeos online em um media player
- Com
--info, é possível verificar as qualidades e formatos disponíveis e selecionar com--itag, mas a seleção de formato em geral não está implementada na maioria dos sites suportados; o padrão é a melhor qualidade - A instalação pode ser feita via
pip, download ou clone do GitHub, Homebrew,pkgdo FreeBSD, Flox etc.; as dependências recomendadas são Python 3.7.4 ou superior, FFmpeg 1.0 ou superior e, opcionalmente, RTMPDump - Oferece download direto por URL, scraping de páginas web, download baseado em busca no Google Videos, pausa e retomada, proxy, carregamento de cookies e saída de URLs extraídas ou JSON, mas alguns recursos são experimentais ou ainda não estão estabilizados
O que o You-Get faz
- You-Get é um pequeno utilitário de linha de comando para baixar conteúdo de mídia da web
- O conteúdo-alvo inclui vídeos, áudio e imagens
- É voltado para situações em que não há outro método simples de download na web
- Entre os motivos de uso citados estão baixar para aproveitar pessoalmente, ter controle sobre vídeos online cujo salvamento é bloqueado, contornar tecnologias fechadas ou JavaScript/Flash proprietários, e uma orientação à cultura hacker e ao software livre
- Os principais recursos são os seguintes
- Download de vídeo e áudio de sites populares como YouTube, Youku e Niconico
- Streaming de vídeos online em um media player sem usar navegador web
- Raspar páginas web para baixar imagens de interesse
- Baixar conteúdo arbitrário não HTML, como arquivos binários
Instalação e ambiente de execução
- As dependências recomendadas são Python 3.7.4 ou superior, FFmpeg 1.0 ou superior e, opcionalmente, RTMPDump
- Segundo um aviso de 30 de maio de 2022, o suporte a Python 3.5, 3.6 e 3.7 será eventualmente encerrado
- Há várias formas de instalação
- Pelo PyPI com
pip install you-get - Usuários de Zsh podem usar Antigen com
antigen bundle soimort/you-get - Download do branch estável
masterou do branchdevelopno GitHub git clone git://github.com/soimort/you-get.git, recomendado para desenvolvedores- No macOS,
brew install you-get - No FreeBSD,
pkg install you-get - No Mac, Linux e Windows WSL,
flox install you-get
- Pelo PyPI com
- As definições de autocompletar do shell para Bash, Fish e Zsh estão em
contrib/completion - A atualização pode ser feita, conforme o método de instalação, com
pip install --upgrade you-get, baixando a versão mais recente, ou forçando a reinstalação do branchdevelop
Fluxo básico de download
- Ao baixar um vídeo, é possível primeiro verificar as qualidades e formatos disponíveis com
you-get -i URLou--info- A saída inclui site, título, stream, contêiner, qualidade, tamanho e um exemplo de
--itagpara usar no download - O download padrão usa o item no topo da lista
- A saída inclui site, título, stream, contêiner, qualidade, tamanho e um exemplo de
- Para outro formato, use o valor de
--itagexibido na saída- Como exemplo, no vídeo
Me at the zoodo YouTube, é possível selecionar mp4 com--itag=18
- Como exemplo, no vídeo
- Se um vídeo do YouTube tiver legendas, elas são baixadas junto com o arquivo de vídeo no formato de legenda SubRip
- A seleção de formato ainda não foi implementada como recurso geral na maioria dos sites suportados
- Nesse caso, o formato padrão de download é o de maior qualidade
- O FFmpeg é necessário para baixar e unir vídeos transmitidos em várias partes e para vídeos do YouTube em alta resolução, como 1080p ou superior
- Se não quiser unir as partes após o download, use
--no-mergeou-n
- Se não quiser unir as partes após o download, use
Downloads por URL, página web e busca
- Se você tiver a URL exata do recurso, pode baixá-lo diretamente com
you-get URL- Por exemplo, ao informar a URL de uma imagem JPEG, ele exibe site, título, tipo e tamanho, e salva o arquivo
- Se, em vez da URL exata do recurso, você fornecer a URL de uma página web, ele tentará raspar a página para encontrar itens de interesse
- Esse recurso é experimental e não é perfeito
- Funciona melhor para scraping de imagens grandes em sites populares como Tumblr e Blogger
- Não há um padrão universal aplicável a todos os sites da internet
- Se você passar uma string que não seja uma URL, ele pesquisa no Google Videos e baixa o vídeo mais relevante
- Pode não ser exatamente o que você queria, mas é descrito como tendo boa chance de ser um resultado bastante plausível
Controle de download e opções de execução
- Durante o download, é possível interromper com
Ctrl+C, e um arquivo temporário.downloadfica no diretório de saída- Ao executar novamente com os mesmos argumentos, ele retoma a partir da última sessão
- Se houver um arquivo completo sem a extensão temporária, o download é ignorado
--forceou-fforça um novo download e sobrescreve arquivos existentes ou temporários com o mesmo nome
- Com
--output-dirou-o, é possível especificar o caminho de salvamento; com--output-filenameou-O, é possível especificar o nome do arquivo- É útil quando o título padrão do vídeo contém caracteres especiais incompatíveis com o shell, o sistema operacional ou o sistema de arquivos atuais
- Também é útil para salvar em uma pasta e com um nome definidos em scripts de download em lote
- Com
--http-proxyou-x, é possível especificar um proxy HTTP- Por padrão, é aplicada a configuração de proxy do sistema, a variável de ambiente
http_proxy - Para desativar o proxy, use
--no-proxy - Em alguns sites como Youku, para extrair informações de vídeos acessíveis apenas a partir da China continental, é possível usar
--extractor-proxyou-y
- Por padrão, é aplicada a configuração de proxy do sistema, a variável de ambiente
--playerou-penvia o vídeo para um media player comompvouvlcem vez de baixá-lo- Se você definir o navegador como player, pode assistir no navegador sem anúncios ou seção de comentários
- Também pode ser usado para iniciar outro gerenciador de downloads, mas pode não funcionar muito bem
Autenticação, dados extraídos e sites suportados
- Para conteúdos que exigem login em uma conta, como vídeos não públicos, é preciso passar os cookies do navegador com
--cookiesou-c- Os formatos de cookies suportados atualmente são Mozilla
cookies.sqlitee Netscapecookies.txt
- Os formatos de cookies suportados atualmente são Mozilla
--urlou-uimprime a lista de URLs de recursos baixáveis extraídos da página--jsonimprime um resumo dos dados extraídos em formato JSON- Esse recurso ainda não está estabilizado, e o schema JSON pode sofrer alterações incompatíveis no futuro
- A lista de sites suportados inclui YouTube, X(Twitter), VK, Vimeo, Tumblr, SoundCloud, Pinterest, Internet Archive, Instagram, Facebook, Dailymotion, Bandcamp, niconico, bilibili, Youku, Naver, TikTok, Zhihu etc.
- O suporte a vídeo, imagem e áudio varia conforme o site
- Para sites que não estão na lista, o extrator genérico encontra e baixa recursos de interesse na página
Relato de problemas e licença
- Quando não for possível baixar o conteúdo desejado, verifique primeiro Known Bugs
- Antes de relatar um novo problema ou contribuir, é preciso ler as diretrizes de contribuição
- Perguntas rápidas podem ser feitas no canal do Gitter #soimort/you-get
- O software é distribuído sob a MIT license
- O software é fornecido “no estado em que se encontra”, sem garantias
- Os autores não se responsabilizam por violação de direitos autorais nem por outros usos ilegais
- O repositório fornece apenas o código, e a forma de uso fica a critério do usuário
1 comentários
Opiniões no Hacker News
Durante um tempo, a internet era cara e a largura de banda era baixa, mas eu gostava de ouvir músicas e aulas no YouTube. Em algum momento, percebi que poderia reduzir o custo de largura de banda em 90% se baixasse apenas o stream de áudio
youtube-dleyt-dlptinham a flag-G, que imprimia a URL do formato/qualidade solicitado; no computador, eu pegava a URL pela linha de comando e colocava no VLCNo celular, no começo usei um contorno complicado: primeiro baixava o arquivo para um VPS via SSH e depois baixava de novo para o telefone. Mais tarde, descobri que o navegador do celular conseguia reproduzir a URL diretamente, então fiz um frontend em PHP para
youtube-dl -G -f bestaudio {url}Hoje ele não está mais online e perdi o código, mas era basicamente uma linha só. Parece que
you-gettambém dá suporte ao mesmo uso com--url/-u, então eu queria destacar o quanto esse recurso é útilSe você reproduz com a tela desligada, também economiza 80% de bateria. O YouTube sabe disso, e parece que por isso transformou a reprodução em segundo plano pegando apenas o stream de áudio em um recurso pago
youtube-dlparece não funcionar mais tão bem, e eu precisei usar o fork yt-dlp. Migrar de projeto assim sempre dá um certo receio, mas pelo menos ele parece ser amplamente usadonode-redque processa links do YouTube quando eles são compartilhadosOs links vão para uma FIFO, e um pequeno daemon baixa tudo em sequência e salva em uma pasta incoming dedicada. O bot pode baixar só o áudio ou o vídeo inteiro, mas para o ID do Telegram da minha mãe deixei configurado para baixar apenas áudio
Essa pasta é monitorada pelo Jellyfin, então ela pode baixar ou ouvir na hora. Em 2 anos, ela já baixou mais de 1 TB de audiobooks e está muito satisfeita
Código do daemon: https://gist.github.com/entropie/d265e94136b9777cc6b3190189b...
Vídeos em 144p são curiosamente tranquilos e confortáveis. Você não se distrai com cores chamativas ou detalhes complexos; dá para simplesmente se concentrar em ouvir
Uso principalmente para reproduzir vídeos exclusivos para membros que não tocam em segundo plano mesmo tendo YouTube Premium. A cada atualização do iOS, fico torcendo para que não bloqueiem esse “glitch”
Este projeto parece não querer que as pessoas apenas reportem issues sem PRs de correção
A formulação é algo como “para relatar um problema encontrado ao usar o you-get, você deve abrir um Pull Request...”, e eu nunca tinha visto esse método antes
O requisito é uma descrição detalhada do problema e pelo menos um commit que cubra esse problema em um teste unitário. A palavra “addressing” ali não é muito boa; “demonstrating” teria sido melhor
you-getestá atualmente experimentando uma abordagem agressiva para lidar com issues, e os relatórios de bugs devem ser tratados em código por meio de pull requestshttps://github.com/soimort/you-get/commit/75b44b83826b3c2d9a...
Provavelmente havia spam demais. A propósito,
tests/test.pyparece executar diretamente os extratores para vários sites, e não consegui encontrar onde fazem mock das requisições e respostas de rede. Talvez a intenção seja simplificar o processo para quem abre o PRyou-get, então não sei pelo que eles passamTalvez seja uma forma eficaz de filtrar a enxurrada de issues repetitivas abertas por pessoas que não sabem executar corretamente um programa de linha de comando
Se isso facilita a manutenção do projeto e faz com que ele dure mais, acho aceitável
Só pelo título e pelo começo da descrição, eu pensei que fosse uma ferramenta baseada em heurísticas para capturar qualquer coisa de uma página. Algo útil quando não há uma ferramenta com suporte específico para determinado site, ou seja, na maioria das vezes, “quando o yt-dlp não dá suporte”
Mas, na prática, ela tem uma arquitetura baseada em extratores, com um extrator separado para cada fonte minimamente popular. No fim, fico pensando se não é mais próximo de um clone mais simples do yt-dlp
Fico curioso se mais alguém continua recebendo este erro
Começa com
you-get: [error] oops, something went wrong.e orienta a verificar problemas de rede, confirmar a versão mais recente, checar bugs conhecidos e executar com a opção--debugUsar a flag de debug também não ajudou muito, e em
pattern = str(pattern, 'latin1')ocorreuTypeError: decoding to str: need a bytes-like object, NoneType foundEu estava tentando ver se dava para contornar a restrição de idade, mas o mesmo erro ocorreu até em vídeos sem restrição de idade
Dá para trocar para um Python mais recente com uma ferramenta como Pyenv, ou subir uma imagem Docker com algo como
docker run -it -v $(pwd):/mnt python:3.13 bashe testar o utilitário lá dentroAlguém consegue explicar por que isto é melhor que o yt-dlp?
Por exemplo, achei curioso haver um juntador de mp4 próprio. Se você já tem ffmpeg, quase não há como fazer melhor por conta própria
https://github.com/soimort/you-get/blob/develop/src/you_get/...
É difícil chamar exatamente de ferramenta “burra” um downloader de mídia no estilo ytdl com extratores e conversores específicos por site, mas ainda assim é bom ver mais projetos como o ytdl surgindo
Não entendo muito bem por que Bandcamp está na lista de sites compatíveis. O Bandcamp simplesmente permite baixar os arquivos se você pagar primeiro ao artista
O que dá para baixar com esta ferramenta só está disponível porque o artista permitiu ouvir de graça antes da compra. Baixar com esta ferramenta parece completamente desnecessário e meio desrespeitoso. O Bandcamp é composto principalmente por pequenos artistas e selos independentes
Pessoalmente, às vezes quero, ou preciso, consumir mídia offline por causa de rede instável ou lenta e operadoras caras. Isso não significa que eu não vá pagar depois se gostar
Parece bem feito. Mas, como consumidor, fico curioso para saber por que eu deveria usar
you-getem vez de yt-dlpQue vantagem ele tem sobre o yt-dlp, que funciona razoavelmente bem em uma quantidade enorme de sites?
[1] https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites....
A documentação diz “Pesquisar e baixar do Google Videos:
$ you-get "Richard Stallman eats"”Não leio a documentação com frequência, mas desta vez li e encontrei um easter egg meio nojento
Gostei. Imagino que seria bom ter uma extensão complementar para Chrome/Firefox que usasse
you-getcomo backend e fosse implementada de forma fluidaIndo mais além, dá para imaginar uma extensão
you-getque, ao entrar no YouTube, contorne o player do YouTube e reproduza o conteúdo diretamente, sem anúncios. Isso poderia se aplicar não só ao YouTube, mas também a outras plataformashttps://addons.mozilla.org/en-US/firefox/addon/faststream/?u...