|
View:
New views
16 Messages
—
Rating Filter:
Alert me
|
|
|
Python como wgetOlá pessoal,
Hoje me deparei com um problema de ter que baixar todos os arquivos de um diretório localizado num servidor (no caso eram rpms de uma distro linux). Queria poder baixar os arquivos usando algo semelhante ao comando wget do linux, com a opção recursiva [1], de forma que o script varresse o diretório e fizesse o download de cada arquivo encontrado. Bem, mas o motivo pra eu usar python é porque eu queria fazer isso de uma máquina rodando Windows, e logicamente, sem wget. =/ Procurei um pouco na net sobre alternativas de fazer esse download em python, mas não consegui encontrar muita coisa útil. Tentei usar o módulo urllib, mas não consegui fazê-lo entender a url como um diretório, de forma a listar os arquivos dentro dele. Apenas consegui baixar o conteúdo da página html usada pelo servidor para me mostrar a lista de arquivos. Claro que eu poderia fazer uma gambiarra e procurar os links dos arquivos pelo conteúdo do html, mas gostaria de saber se existe alguma outra alternativa, se a linguagem me permite algo mais alto nível. =] Alguma idéia? [1] http://linux.die.net/man/1/wget Abraços! -- Henrique Baggio Computer Engineering - Unicamp Microsoft Innovation Center - Unicamp Software Engineer http://www.lms.ic.unicamp.br http://www.codeplex.com/lmsu [As partes desta mensagem que não continham texto foram removidas] |
|
|
Re: Python como wgetBem, esqueci um dos lugares mais básicos pra procurar: a própria lista! =P
To dando uma olhada no histórico. Se achar algo eu aviso. =] [As partes desta mensagem que não continham texto foram removidas] |
|
|
Re: Re: Python como wgetSe preferir não implementar na mão, existe port do wget para windows:
http://users.ugent.be/~bpuype/wget/ (desculpa estragar o incentivo :P) -- Paul Eipper |
|
|
Re: Re: Python como wget2009/2/2 Paul Eipper <lkraider@...>
> > Se preferir não implementar na mão, existe port do wget para windows: > > http://users.ugent.be/~bpuype/wget/ Bem, isso resolve o meu problema, heheh. Valeu, Paul! > > (desculpa estragar o incentivo :P) Relaxe, ainda pretendo fazer isso em Python, pq não gostei das soluções que vi pela net, e acho que seria um bom exercício, =] |
|
|
Re: Python como wget2009/2/2 Henrique Baggio <hnrqbaggio@...>:
> Procurei um pouco na net sobre alternativas de fazer esse download em > python, mas não consegui encontrar muita coisa útil. Tentei usar o módulo > urllib, mas não consegui fazê-lo entender a url como um diretório, de forma > a listar os arquivos dentro dele. Oi, Henrique, não existe como "entender a url como um diretório" no protocolo HTTP. Existe no FTP, mas no HTTP não existe um comando que você possa enviar para o servidor dizer tudo o que tem num diretório. > Apenas consegui baixar o conteúdo da > página html usada pelo servidor para me mostrar a lista de arquivos. Sim, se você enviar um GET para uma determinada URL, o servidor pode te devolver uma listagem de arquivos. Mas isso depende de como o servidor foi configurado. Não existe nenhuma obrigação, segundo o protocolo HTTP, de que isso seja desta maneira. > Claro que eu poderia fazer uma gambiarra e procurar os links dos arquivos > pelo conteúdo do html É assim exatamente que funciona o Wget recursivo. > , mas gostaria de saber se existe alguma outra > alternativa, se a linguagem me permite algo mais alto nível. =] > Alguma idéia? > > [1] http://linux.die.net/man/1/wget Procure o wget para Windows (já te deram o link), ou faça um script combinando urllib com alguma biblioteca mencionada neste excelente post do über-guru Ian Bicking: http://blog.ianbicking.org/2008/03/30/python-html-parser-performance/ Se for criar sua própria solução, talvez seja legal dar uma lida na especificação do HTTP, para sacar o que é possível esperar do protocolo. A parte que fala dos métodos (comandos) fica aqui: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html Boa sorte! [ ]s Luciano |
|
|
Re: Python como wgetOn Feb 2, 2009, at 8:36 AM, Luciano Ramalho wrote: > 2009/2/2 Henrique Baggio <hnrqbaggio@...>: >> Procurei um pouco na net sobre alternativas de fazer esse download em >> python, mas não consegui encontrar muita coisa útil. Tentei usar o >> módulo >> urllib, mas não consegui fazê-lo entender a url como um diretório, >> de forma >> a listar os arquivos dentro dele. > > Oi, Henrique, não existe como "entender a url como um diretório" no > protocolo HTTP. Existe no FTP, mas no HTTP não existe um comando que > você possa enviar para o servidor dizer tudo o que tem num diretório. > >> Apenas consegui baixar o conteúdo da >> página html usada pelo servidor para me mostrar a lista de arquivos. > > Sim, se você enviar um GET para uma determinada URL, o servidor pode > te devolver uma listagem de arquivos. Mas isso depende de como o > servidor foi configurado. Não existe nenhuma obrigação, segundo o > protocolo HTTP, de que isso seja desta maneira. > >> Claro que eu poderia fazer uma gambiarra e procurar os links dos >> arquivos >> pelo conteúdo do html > > É assim exatamente que funciona o Wget recursivo. > >> , mas gostaria de saber se existe alguma outra >> alternativa, se a linguagem me permite algo mais alto nível. =] > >> Alguma idéia? >> >> [1] http://linux.die.net/man/1/wget > > Procure o wget para Windows (já te deram o link), ou faça um script > combinando urllib com alguma biblioteca mencionada neste excelente > post do über-guru Ian Bicking: > > http://blog.ianbicking.org/2008/03/30/python-html-parser-performance/ > > Se for criar sua própria solução, talvez seja legal dar uma lida na > especificação do HTTP, para sacar o que é possível esperar do > protocolo. A parte que fala dos métodos (comandos) fica aqui: > > http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html E dar uma olhada no harvest man, pra não reinventar a roda: http://www.harvestmanontheweb.com/ se bem que hoje devem existir uns 10 web crawler/spider em python. -- Leonardo Santagada santagada at gmail.com |
|
|
Re: Python como wget2009/2/2 Leonardo Santagada <santagada@...>:
> E dar uma olhada no harvest man, pra não reinventar a roda: > > http://www.harvestmanontheweb.com/ Boa dica. > se bem que hoje devem existir uns 10 web crawler/spider em python. Com certeza. Um deles é um tal de Google, mas não é open source ;-). [ ]s Luciano |
|
|
Re: Python como wget2009/2/2 Leonardo Santagada <santagada@...>:
> E dar uma olhada no harvest man, pra não reinventar a roda: > > http://www.harvestmanontheweb.com/ Dei uma olhada superficial no HarvestMan e achei que ele tem um forte cheiro de Java, embora seja feito em Python. Primeiro porque usa um arquivo XML para configurar. Eu acho Python uma ótima linguagem de configuração. Segundo porque usa threads em vez de select para lidar com requisições assíncronas. Isso não quer dizer que não seja excelente (não experimentei) apenas não é como eu faria ;-). [ ]s Luciano |
|
|
Re: Python como wgetUma vez fiz um programinha para baixar todas as imagens de um site. Ele não
faz exatamente o que vc quer mas dá uma olhada nele que pode te dar algumas idéias: http://github.com/guilhermechapiewski/sandbox/blob/60e040bf7bb345fadaa5649f7cf8301f418a882e/download_all_site_images.py [ ]s, gc -- Guilherme Chapiewski http://gc.blog.br 2009/2/2 Henrique Baggio <hnrqbaggio@...> > Olá pessoal, > Hoje me deparei com um problema de ter que baixar todos os arquivos de um > diretório localizado num servidor (no caso eram rpms de uma distro linux). > Queria poder baixar os arquivos usando algo semelhante ao comando wget do > linux, com a opção recursiva [1], de forma que o script varresse o > diretório > e fizesse o download de cada arquivo encontrado. > > Bem, mas o motivo pra eu usar python é porque eu queria fazer isso de uma > máquina rodando Windows, e logicamente, sem wget. =/ > > Procurei um pouco na net sobre alternativas de fazer esse download em > python, mas não consegui encontrar muita coisa útil. Tentei usar o módulo > urllib, mas não consegui fazê-lo entender a url como um diretório, de forma > a listar os arquivos dentro dele. Apenas consegui baixar o conteúdo da > página html usada pelo servidor para me mostrar a lista de arquivos. > > Claro que eu poderia fazer uma gambiarra e procurar os links dos arquivos > pelo conteúdo do html, mas gostaria de saber se existe alguma outra > alternativa, se a linguagem me permite algo mais alto nível. =] > > Alguma idéia? > > [1] http://linux.die.net/man/1/wget > > Abraços! > -- > Henrique Baggio > Computer Engineering - Unicamp > > Microsoft Innovation Center - Unicamp > Software Engineer > http://www.lms.ic.unicamp.br > http://www.codeplex.com/lmsu > > [As partes desta mensagem que não continham texto foram removidas] > > > [As partes desta mensagem que não continham texto foram removidas] |
|
|
Re: Python como wgetAcabei de ver que ele não funciona direito porque espera que todas as urls
das imagens sejam absolutas :) Bom, mesmo assim espero que possa te dar alguma idéia. [ ]s, gc -- Guilherme Chapiewski http://gc.blog.br 2009/2/2 Guilherme Chapiewski <guilherme.chapiewski@...> > Uma vez fiz um programinha para baixar todas as imagens de um site. Ele não > faz exatamente o que vc quer mas dá uma olhada nele que pode te dar algumas > idéias: > > > http://github.com/guilhermechapiewski/sandbox/blob/60e040bf7bb345fadaa5649f7cf8301f418a882e/download_all_site_images.py > > [ ]s, gc > -- > Guilherme Chapiewski > http://gc.blog.br > > > 2009/2/2 Henrique Baggio <hnrqbaggio@...> > >> Olá pessoal, >> >> Hoje me deparei com um problema de ter que baixar todos os arquivos de um >> diretório localizado num servidor (no caso eram rpms de uma distro linux). >> Queria poder baixar os arquivos usando algo semelhante ao comando wget do >> linux, com a opção recursiva [1], de forma que o script varresse o >> diretório >> e fizesse o download de cada arquivo encontrado. >> >> Bem, mas o motivo pra eu usar python é porque eu queria fazer isso de uma >> máquina rodando Windows, e logicamente, sem wget. =/ >> >> Procurei um pouco na net sobre alternativas de fazer esse download em >> python, mas não consegui encontrar muita coisa útil. Tentei usar o módulo >> urllib, mas não consegui fazê-lo entender a url como um diretório, de >> forma >> a listar os arquivos dentro dele. Apenas consegui baixar o conteúdo da >> página html usada pelo servidor para me mostrar a lista de arquivos. >> >> Claro que eu poderia fazer uma gambiarra e procurar os links dos arquivos >> pelo conteúdo do html, mas gostaria de saber se existe alguma outra >> alternativa, se a linguagem me permite algo mais alto nível. =] >> >> Alguma idéia? >> >> [1] http://linux.die.net/man/1/wget >> >> Abraços! >> -- >> Henrique Baggio >> Computer Engineering - Unicamp >> >> Microsoft Innovation Center - Unicamp >> Software Engineer >> http://www.lms.ic.unicamp.br >> http://www.codeplex.com/lmsu >> >> [As partes desta mensagem que não continham texto foram removidas] >> >> >> > > > > [As partes desta mensagem que não continham texto foram removidas] |
|
|
Re: Python como wget2009/2/2 Luciano Ramalho <ramalho@...>
> > 2009/2/2 Henrique Baggio <hnrqbaggio@...>: > > > Procurei um pouco na net sobre alternativas de fazer esse download em > > python, mas não consegui encontrar muita coisa útil. Tentei usar o módulo > > urllib, mas não consegui fazê-lo entender a url como um diretório, de forma > > a listar os arquivos dentro dele. > > Oi, Henrique, não existe como "entender a url como um diretório" no > protocolo HTTP. Existe no FTP, mas no HTTP não existe um comando que > você possa enviar para o servidor dizer tudo o que tem num diretório. Não sabia disso Luciano. Realmente, ainda sou novato e nunca tive a chance de estudar esses protocolos. Achava que o fato de a URL ser um diretório no servidor bastaria pra eu poder listar os arquivo nele remotamente. Inocência minha =P > > > Apenas consegui baixar o conteúdo da > > página html usada pelo servidor para me mostrar a lista de arquivos. > > Sim, se você enviar um GET para uma determinada URL, o servidor pode > te devolver uma listagem de arquivos. Mas isso depende de como o > servidor foi configurado. Não existe nenhuma obrigação, segundo o > protocolo HTTP, de que isso seja desta maneira. > > > Claro que eu poderia fazer uma gambiarra e procurar os links dos arquivos > > pelo conteúdo do html > > É assim exatamente que funciona o Wget recursivo. Também não sabia disso, heheh. Pra mim ele se comunicava de outra maneira. > > , mas gostaria de saber se existe alguma outra > > alternativa, se a linguagem me permite algo mais alto nível. =] > > > Alguma idéia? > > > > [1] http://linux.die.net/man/1/wget > > Procure o wget para Windows (já te deram o link), ou faça um script > combinando urllib com alguma biblioteca mencionada neste excelente > post do über-guru Ian Bicking: > > http://blog.ianbicking.org/2008/03/30/python-html-parser-performance/ Dessa vez eu usei o wget for winodows mesmo, pq tinha um pouco de pressa. Mas como disse, vou dar uma estudada mais a fundo no assunto. > > Se for criar sua própria solução, talvez seja legal dar uma lida na > especificação do HTTP, para sacar o que é possível esperar do > protocolo. A parte que fala dos métodos (comandos) fica aqui: > > http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html > > Boa sorte! Obrigado pelos links, vou dar uma lida neles. =] -- Henrique Baggio |
|
|
Re: Python como wget2009/2/2 Leonardo Santagada <santagada@...>
[cut] > E dar uma olhada no harvest man, pra não reinventar a roda: > > http://www.harvestmanontheweb.com/ > > se bem que hoje devem existir uns 10 web crawler/spider em python. Eu tentei procurar por esse ai depois de ver um comentário sobre ele no histórico da lista, mas não tinha conseguido achar. Obrigado, Sangataga! |
|
|
Re: Python como wget> Não sabia disso Luciano. Realmente, ainda sou novato e nunca tive a
> chance de estudar esses protocolos. Achava que o fato de a URL ser um > diretório no servidor bastaria pra eu poder listar os arquivo nele > remotamente. Inocência minha =P A URL nem sempre é um diretório no servidor, veja o caso do ZODB (Zope). Imagine a url: http://meusite.dominio/portal/foo `portal` é um diretório? No caso do Zope, `foo` poderia ser uma propriedade do objeto `portal`, que pode não ser um diretório. |
|
|
Threads para baixar arquivos era: Re: Python como wgetOn Feb 2, 2009, at 2:07 PM, Luciano Ramalho wrote: > 2009/2/2 Leonardo Santagada <santagada@...>: >> E dar uma olhada no harvest man, pra não reinventar a roda: >> >> http://www.harvestmanontheweb.com/ > > Dei uma olhada superficial no HarvestMan e achei que ele tem um forte > cheiro de Java, embora seja feito em Python. > Segundo porque usa threads em vez de > select para lidar com requisições assíncronas. Eu acho isso legal na verdade. Embora select seja interessante para programação assyncrona de grande demanda, baixar muitas imagens e dados de um site é algo que facilmente pode ser delegado a um thread (e em python realmente roda em outra thread pq é código c). O jeito facil de fazer um spider em python é pensar num modelo de comunicação através de filas de mensagens onde uma consumer thread lê o html e faz processamentos enquanto monta uma Queue (do módulo Queue) para uma quantidade de worker threads bem simples que só abrem um socket e baixam um arquivo (usando urllib2 ou algo assim). Eu tinha um desses para baixar a escala de horarios da minha universidade e acho que com toda a logica maluca para fazer o parser e entender um html muito mal feito deles ainda assim era umas 100 linhas. Eu usaria o twisted ou algo assim só se quisesse muita absurda performance, algo tipo mais de 10mb(yte) por segundo... o q na verdade parece ser o alvo do harvest man.... é na verdade o Luciano esta certo (como de costume). Ainda acho essa forma tosca de fazer spiders em python mais simples e bem educativa e ela sempre usou toda a minha banda de rede sem problema nenhum. -- Leonardo Santagada santagada at gmail.com |
|
|
Re: Re: Python como wgetOn 02/02/2009, at 04:19, Henrique Baggio wrote: > 2009/2/2 Paul Eipper <lkraider@...> >> >> Se preferir não implementar na mão, existe port do wget para windows: >> >> http://users.ugent.be/~bpuype/wget/ > > Bem, isso resolve o meu problema, heheh. Valeu, Paul! > >> (desculpa estragar o incentivo :P) > > Relaxe, ainda pretendo fazer isso em Python, pq não gostei das > soluções que vi pela net, e acho que seria um bom exercício, =] Henrique, Como eu sempre gostei do wget, resolvi tentar fazer minha própria versão também: http://humberto.digi.com.br/blog/2009/02/12/python-como-wget/ O que eu fiz se parece mais com o recurso de "baixar todos os links" do Opera do que com o wget -r, mas pode ser facilmente melhorado. ;) -- Humberto Diógenes http://humberto.digi.com.br |
|
|
Re: Re: Python como wgetHumberto,
É bem parecido com a idéia inicial que eu tive pra resolver o problema - procurar links no html e usá-los - mas eu iria ter mais trabalho pra capturar os links, pois não conhecia o BeautifulSoup. Vou fazer uns teste usando como base o seu código e quem sabe não chegamos a uma solução mais completa. =D -- Henrique Baggio |
| Free embeddable forum powered by Nabble | Forum Help |