Você está na página 1de 17

Criar um Web Spider no Linux

Um spider e scraper simples coletam o contedo da Internet M. Tim Jones, Consultant Engineer, Emulex Corp. Resumo: Web spiders so agentes de software que passam pela coleta, filtragem e, potencialmente, agregao de informaes da Internet para um usurio. Utilizando linguagens de script comuns e suas coletas de mdulos da Web, possvel desenvolver facilmente Web spiders. Este artigo mostra como criar spiders e scrapers para Linux para efetuar crawl de um Web site e coletar informaes e, neste caso, estocar dados.

ndice

Motivao Biolgica Aplicativos de Spiders e Scrapers Exemplo 1: Scraper Simples Exemplo 2: Scraper com Cotaes de Aes Exemplo 3: Comunicao do Scraper com Cota de Estoque Exemplo 4: Crawler de Web Site Ferramentas de Gerao de Spider do Linux Questes Legais Indo Alm Recursos Sobre o autor

Um spider um programa que efetua crawl da Internet de um modo especfico, com um objetivo especfico. O objetivo pode ser coletar informaes ou entender a estrutura e validade de um Web site. Spiders so a base para os mecanismos de procura modernos, como Google e AltaVista. Esses spiders recuperam automaticamente os dados da Web e os transmitem para outros aplicativos que indexe os contedos do Web site para um melhor conjunto de termos de procura.

Web Spiders como Agentes


Web spiders e scrapers so simplesmente outra forma de software rob ou agente (como foi indicado por Alan Kay no incio dos anos 1980). A ideia de Alan sobre um agente era como a de um proxy para o usurio no mundo da computao. O agente teria uma meta e trabalharia nela at chegar ao seu domnio. Caso ele parasse, pediria conselhos para o usurio e continuaria a buscar sua meta. Hoje, os agentes so classificados com atributos como autonomia, adaptabilidade, comunicao e colaborao com outros agentes. Outros atributos, como mobilidade do agente e at mesmo personalidade, so metas da pesquisa do agente atual. Os Web spiders so classificados neste artigo como Agentes Especficos de Tarefas na taxonomia de agente. Semelhante a um spider, mas com questes legais mais interessantes, temos o Web scraper. Um scraper um tipo de spider que destina contedo especfico da Web, como o custo de produtos ou servios. Um uso do scraper para preos concorrentes, para identificar o preo de um determinado produto para adequar seu preo ou anncio corretamente. Um scraper tambm pode agregar dados de diversas origens da Web e fornecer essas informaes a um usurio. Motivao Biolgica Quando se pensa em uma aranha na natureza, pensa-se em sua interao com um ambiente, no em seu isolamento. A aranha v e sente o ambiente que a cerca, movendose de um lugar para outra de forma significativa. Web spiders operam de forma semelhante. Um Web spider um programa escrito em uma linguagem de alto nvel. Ele interage com seu ambiente atravs do uso de protocolos de rede, como Protocolo de Transporte de Hipertexto (HTTP) para a Web. Se o spider deseja se comunicar com voc, ele pode usar o Protocolo Simples de Transporte de Correio (SMTP) para enviar uma mensagem de e-mail. Spiders so se limitam a HTTP ou SMTP. Alguns spiders usam servios da Web, como SOAP ou o Protocolo de Chamada de Procedimento Remoto para Linguagem de Marcao Extensvel (XML-RPC). Outros spiders procuram grupos de notcias com o Network News Transfer Protocol (NNTP) ou buscam itens de notcias nas alimentaes Really Simple Syndication (RSS). Enquanto a maioria das aranhas na natureza enxergam apenas a intensidade da escurido e as mudanas de movimentos, os Web spiders podem ver e sentir o uso de muitos tipos de protocolos. Voltar para parte superior

Aplicativos de Spiders e Scrapers

Olhos e Pernas do Spider


O Web spider usa principalmente o HTTP para olhar e mover-se pela Internet. HTTP um protocolo orientado mensagem no qual um cliente se conecta a um servidor e emite pedidos. O servidor fornece uma resposta. Cada pedido e resposta composto de cabealho e corpo, com o cabealho fornecendo informaes de status e uma descrio do contedo do corpo. O HTTP fornece trs tipos bsicos de pedidos. O primeiro HEAD, que solicita informaes sobre um recurso no servidor. O segundo GET, que solicita um recurso, como um arquivo ou uma imagem. Finalmente, POST permite que o cliente interaja com o servidor atravs de uma pgina da Web (geralmente atravs de um formulrio da Web). Web spiders e scrapers so aplicativos teis e, portanto, possvel encontrar uma variedade de tipos diferentes de uso, tanto para o bem quanto para o mal. Vamos observar alguns dos aplicativos que utilizam essas tecnologias. Web Crawlers de Mecanismos de Procura Web spiders tornam a pesquisa na Internet fcil e eficiente. Um mecanismo de procura utiliza muitos Web spiders para efetuar crawl de pginas da Web na Internet, retornar seu contedo e o indexar. Depois que isso feito, o mecanismo de procura pode pesquisar rapidamente o ndice local para identificar a maioria dos resultados aplicveis sua pesquisa. O Google tambm utiliza o algoritmo PageRank, no qual uma classificao de pginas da Web nos resultados da procura tem como base a quantidade de pginas que esto vinculadas a ele. Ele serve como um voto, no qual pginas com votos mais altos obtm o maior rank nos resultados. Esse tipo de procura na Internet pode ser dispendiosa, em termos de largura de banda necessria para comunicar o contedo da Web para o indexador e tambm de custos computacionais de indexao dos resultados. necessrio muito armazenamento, mas, aparentemente, isso no um problema quando considera-se que o Google oferece 1.000 megabytes de armazenamento para usurios do Gmail. Os web spiders minimizam a exausto da Internet utilizando um conjunto de polticas. Para darmos uma idia do escopo do desafio, o Google indexa mais de oito bilhes de pginas da Web. As polticas de comportamento definem quais pginas o crawler levar ao indexador, com qual frequncia ele retornar a um Web site para verific-lo novamente e algo denominado poltica de cortesia. Os servidores da Web podem excluir crawlers utilizando um arquivo chamado robot.txt que informa ao crawler o que pode ou no ter crawl efetuado. Web Crawlers Corporativos Como o spider do mecanismo de procura padro, o Web spider corporativo indexa contedo que no est disponvel ao pblico geral. Por exemplo, as empresas geralmente possuem sites da Web internos que so utilizados pelos funcionrios. Esse tipo de spider restrito ao ambiente local. Como sua procura restrita, geralmente h mais computao

disponvel e especializada, e ndices mais completos so possveis. O Google se antecipou a isso fornecendo um mecanismo de procura de desktop para indexar o contedo de seu computador pessoal. Crawlers Especializados Tambm h diversos usos no tradicionais para os crawlers, como o arquivamento de contedo ou gerao de estatsticas. Um crawler de arquivamento simplesmente efetua crawl de um Web site extraindo o contedo localmente para armazen-lo em um meio de armazenamento de longo. Isso pode ser utilizado para backup ou, em casos maiores, para uma captura instantnea do contedo da Internet. As estatsticas podem ser teis na compreenso do contedo da Internet ou perda dele. Os crawlers podem ser usados para identificar quantos servidores da Web esto em execuo, quantos servidores da Web de um determinado tipo esto executando, o nmero de pginas da Web disponveis e at mesmo o nmero de links quebrados (so eles que retornam o erro HTTP 404, pgina no encontrada). Outros crawlers teis especializados incluem os verificadores de Web site. Esses crawlers procuram o contedo ausente, validam todos os links e garantem que sua Linguagem de Marcao de Hipertexto (HTML) seja vlida. Crawlers de Coleta de e-mail Agora o lado ruim dos crawlers. Infelizmente, pessoas malintencionadas podem efetuar estragos na Internet por todos ns. Os crawlers de coleta de e-mail procuram por endereos de e-mail em Web sites que so ento utilizados para gerar o spam em massa que vemos diariamente. A Postini relata que, em agosto de 2005, 70% de todas as mensagens de e-mail processadas para os usurios dela eram spans indesejados. A coleta de e-mail pode ser uma das atividades de crawl mais fceis, como ser visto no exemplo final de crawler neste artigo. Agora que vimos alguns dos fundamentos dos Web spiders e scrapers, os prximos quatro exemplos mostram como fcil criar spiders e scrapers para Linux com linguagens de script modernas, como Ruby e Python. Voltar para parte superior Exemplo 1: Scraper Simples Este exemplo mostra como descobrir qual tipo de servidor da Web est sendo executado para um determinado Web site. Isso pode ser interessante e, se feito em uma amostra grande suficiente, pode fornecer algumas estatsticas intrigantes sobre a infiltrao de servidores da Web no governo, em academias e na indstria. A Lista 1 mostra um script Ruby que efetua scrap de um Web site para identificar o servidor HTTP. A classe Net::HTTP implementa um cliente HTTP e os mtodos GET, HEAD e POST HTTP. Sempre que se faz um pedido para um servidor HTTP, parte da resposta da mensagem HTTP indica o servidor do qual o contedo servidor. Em vez de fazer download de uma pgina do site, eu simplesmente uso o mtodo HEAD para obter

informaes sobre a pgina raiz ('/'). medida que o servidor HTTP responde com xito (indicado por um cdigo de resposta "200"), eu fao a iterao de cada linha de resposta procurando pela chave server e, se encontrada, imprimo o valor. O valor dessa chave uma cadeia que representa o servidor HTTP. Lista 1. Script Ruby para Scrap de Metadados Simples (srvinfo.rb)
#!/usr/local/bin/ruby requer 'net/http' # Obter o primeiro argumento da linha de comandos (a URL) url = ARGV[0] begin # Criar uma nova conexo HTTP httpCon = Net::HTTP.new( url, 80 ) # Executar um pedido HEAD resp, data = httpCon.head( "/", nil ) # Se bem-sucedido (200 bem-sucedido) if resp.code == "200" then # Iteragir atravs do hash de resposta resp.each {|key,val| # Se a chave for o servidor, imprimir o valor if key == "server" then The server at "+url+" is

print " "+val+"\n" end } end end

Alm de mostrar como utilizar o script srvinfo, a Lista 2 mostra alguns resultados de vrios Web sites do governo, de academias e de empresas. H uma pequena variao da Apache (68% infiltrao) para a Sun e a Microsoft Internet Information Services (IIS). Tambm possvel ver um caso no qual o servidor no informado. engraado notar que os Estados Federados da Micronsia esto executando uma verso antiga da Apache (hora de atualizar) e a Apache.org utiliza tecnologia de ponta. Lista 2. Exemplo do Uso de Scraper de Servidor
[mtj@camus]$ ./srvrinfo.rb www.whitehouse.gov The server at www.whitehouse.gov is Apache

[mtj@camus]$ ./srvrinfo.rb www.cisco.com The server at www.cisco.com is Apache/2.0 (Unix) [mtj@camus]$ ./srvrinfo.rb www.gov.ru The server at www.gov.ru is Apache/1.3.29 (Unix) [mtj@camus]$ ./srvrinfo.rb www.gov.cn [mtj@camus]$ ./srvrinfo.rb www.kantei.go.jp The server at www.kantei.go.jp is Apache [mtj@camus]$ ./srvrinfo.rb www.pmo.gov.to The server at www.pmo.gov.to is Apache/2.0.46 (Red Hat Linux) [mtj@camus]$ ./srvrinfo.rb www.mozambique.mz The server at www.mozambique.mz is Apache/1.3.27 (Unix) PHP/3.0.18 PHP/4.2.3 [mtj@camus]$ ./srvrinfo.rb www.cisco.com The server at www.cisco.com is Apache/1.0 (Unix) [mtj@camus]$ ./srvrinfo.rb www.mit.edu The server at www.mit.edu is MIT Web Server Apache/1.3.26 Mark/1.5 (Unix) mod_ssl/2.8.9 OpenSSL/0.9.7c [mtj@camus]$ ./srvrinfo.rb www.stanford.edu The server at www.stanford.edu is Apache/2.0.54 (Debian GNU/Linux) mod_fastcgi/2.4.2 mod_ssl/2.0.54 OpenSSL/0.9.7e WebAuth/3.2.8 [mtj@camus]$ ./srvrinfo.rb www.fsmgov.org The server at www.fsmgov.org is Apache/1.3.27 (Unix) PHP/4.3.1 [mtj@camus]$ ./srvrinfo.rb www.csuchico.edu The server at www.csuchico.edu is Sun-ONEWeb-Server/6.1 [mtj@camus]$ ./srvrinfo.rb www.sun.com The server at www.sun.com is Sun Java System Web Server 6.1 [mtj@camus]$ ./srvrinfo.rb www.microsoft.com The server at www.microsoft.com is Microsoft-IIS/6.0 [mtj@camus]$ ./srvrinfo.rb www.apache.org The server at www.apache.org is Apache/2.2.3 (Unix) mod_ssl/2.2.3 OpenSSL/0.9.7g

Estes dados so teis e interessante observar o que as instituies do governo e acadmicas utilizam para seus servidores da Web. O prximo exemplo mostra algo um pouco mais til, um scraper com cotaes de aes. Voltar para parte superior Exemplo 2: Scraper com Cotaes de Aes Neste exemplo, eu criei um Web scraper simples (tambm chamado scraper de tela) para coletar informaes de cota de estoque. Isso feito de forma forada, explorando-se um padro na pgina da Web de resposta, como a seguir:

Lista 3. Um Web Scraper Simples para Cotaes de Aes


#!/usr/local/bin/ruby requer 'net/http' host = "www.smartmoney.com" link = "/eqsnaps/index.cfm? story=snapshot&symbol="+ARGV[0] begin # Criar uma nova conexo HTTP httpCon = Net::HTTP.new( host, 80 ) # Executar um pedido HEAD resp = httpCon.get( link, nil ) stroffset = resp.body =~ /class="price">/ subset = resp.body.slice(stroffset+14, 10) limit = subset.index('<') print ARGV[0] + " current stock price " + subset[0..limit-1] + " (from stockmoney.com)\n" end

Neste script Ruby, eu abro uma conexo com um cliente HTTP para um servidor (neste caso, www.smartmoney.com) e crio um link que solicite especificamente uma cota de estoque como transmitida pelo usurio (via &symbol=<symbol>). Esse link solicitado utilizando-se o mtodo HTTP GET (para recuperar a pgina de resposta completa) e depois procurando-se por class="price">, que imediatamente seguido pelo preo atual de estoque. Isso imediatamente suprimido da pgina da Web e depois exibido para o usurio. Para utilizar o scraper com cota de estoque, eu chamo o script com o smbolo de estoque do meu interesse, como mostrado em Lista 4. Lista 4. Exemplo de Uso do Scraper com Cota de Estoque
[mtj@camus]$ ./stockprice.rb ibm ibm current stock price 79.28 (from stockmoney.com) [mtj@camus]$ ./stockprice.rb intl intl current stock price 21.69 (from stockmoney.com) [mtj@camus]$ ./stockprice.rb nt nt current stock price 2.07 (from stockmoney.com) [mtj@camus]$

Voltar para parte superior Exemplo 3: Comunicao do Scraper com Cota de Estoque O Web scraper para cotaes de aes mostrado no exemplo 2 era tentador, mas seria realmente til se ele monitorasse com frequncia o preo de estoque e lhe informasse quando seu estoque favorito aumentasse a um determinado valor ou ficasse abaixo de outro valor. Essa espera acabou. Na Lista 5, eu atualizei o Web scraper simples para monitorar com frequncia o estoque e enviar uma mensagem de e-mail quando esse estoque ficar fora de um intervalo de preo definido. Lista 5. Scraper de Estoque que Pode Enviar um Alerta de e-mail
#!/usr/local/bin/ruby requer 'net/http' requer 'net/smtp' # # Fornecidos um Web site e link, retornar o preo de estoque # def getStockQuote(host, link) # Criar uma nova conexo HTTP httpCon = Net::HTTP.new( host, 80 ) # Executar um pedido HEAD resp = httpCon.get( link, nil ) stroffset = resp.body =~ /class="price">/ subset = resp.body.slice(stroffset+14, 10) limit = subset.index('<') return subset[0..limit-1].to_f fim # # Enviar uma mensagem (msg) para um usurio. # Nota: supe-se que o servidor SMTP esteja no mesmo host. # def sendStockAlert( user, msg ) lmsg = [ "Subject: Stock Alert\n", "\n", msg ] Net::SMTP.start('localhost') do |smtp| smtp.sendmail( lmsg, "rubystockmonitor@localhost.localdomain", [user] ) end fim # # Nosso principal programa verifica o estoque dentro da faixa de preo a cada # dois minutos, manda e-mail e sai se as faixas de preo do estoque estiverem fora.

# # Uso: ./monitor_sp.rb <smbolo> <alto> <baixo> <endereo_de_email> # begin host = "www.smartmoney.com" link = "/eqsnaps/index.cfm? story=snapshot&symbol="+ARGV[0] user = ARGV[3] high = ARGV[1].to_f low = ARGV[2].to_f while 1 price = getStockQuote(host, link) print "current price ", price, "\n" if (price > high) || (price < low) then if (price > high) then msg = "Stock "+ARGV[0]+" has exceeded the price of "+high.to_s+ "\n"+host+link+"\n" end if (price < low) then msg = "Stock "+ARGV[0]+" has fallen below the price of "+low.to_s+ "\n"+host+link+"\n" fim sendStockAlert( user, msg ) exit fim sleep 120 fim fim

Este script Ruby um pouco maior, mas criado no script de scrap de estoque existente da A Lista 3. Uma nova funo, getStockQuote, encapsula a funo de scrap de estoque. Outra funo, sendStockAlert, envia uma mensagem para um endereo de e-mail (ambos so definidos pelo usurio). O programa principal no nada mais que um loop para obter o preo de estoque atual, verificar se esse preo est dentro da faixa e, se no estiver, enviar um alerta de e-mail para o usurio. Houve um atraso entre a verificao do preo de estoque para no haver sobrecarga no servidor. A Lista 6 um exemplo de chamada do monitor de estoque com um estoque de tecnologia popular. A cada dois minutos, o estoque verificado e impresso. Quando esse estoque excede o limite mximo, um alerta de e-mail enviado e o script sai.

Lista 6. Demonstrao de Script do Monitor de Estoque


[mtj@camus]$ ./monitor_sp.rb ibm 83.00 75.00 mtj@mtjones.com current price 82.06 current price 82.32 current price 82.75 current price 83.36

O e-mail resultante mostrado na Figura 1, completo, com um link para a origem dos dados com scrap. Figura 1. Alerta de e-mail Enviado pelo Script Ruby na Lista 5

Agora deixaremos os scrapers e partiremos para a criao de um Web spider. Voltar para parte superior Exemplo 4: Crawler de Web Site Neste ltimo exemplo, foi explorado um Web spider que efetua crawl de um Web site. Para segurana, para evitar sair do site, simplesmente fui para uma pgina da Web simples. Para efetuar crawl de um Web site e seguir os links fornecidos nele, necessrio analisar as pginas HTML. Se for possvel analisar com xito uma pgina da Web, ser possvel identificar links para outros recursos. Alguns especificam recursos locais (arquivos), mas outros representam recursos no-locais (como links para outras pginas da Web).

Para efetuar crawl da Web, comece com uma pgina da Web especfica, identifique todos os links nessa pgina, enfilere-os em uma fila de visitas e depois repita esse processo utilizando o primeiro item dessa fila de visitas. Isso resulta em um comportamento transversal de primeira largura (comparado com um comportamento de primeira profundidade, quando se migra para o primeiro link encontrado). Se voc evita links no-locais e visita apenas pginas da Web locais, fornece um Web crawler para um Web site simples, como mostrado na Lista 7. Neste caso, eu alterno do Ruby para o Python para tirar proveito da classe til HTMLParser do Python. Lista 7. Crawler de Web Site Simples do Python (minispider.py)
#!/usr/local/bin/python import httplib import sys import re from HTMLParser import HTMLParser class miniHTMLParser( HTMLParser ): viewedQueue = [] instQueue = [] def get_next_link( self ): if self.instQueue == []: return '' else: return self.instQueue.pop(0) def gethtmlfile( self, site, page ): try: httpconn = httplib.HTTPConnection(site) httpconn.request("GET", page) resp = httpconn.getresponse() resppage = resp.read() except: resppage = "" return resppage def handle_starttag( self, tag, attrs ): if tag == 'a': newstr = str(attrs[0][1]) if re.search('http', newstr) == None: if re.search('mailto', newstr) == None: if re.search('htm', newstr) != None: if (newstr in self.viewedQueue) == False: print " adding", newstr self.instQueue.append( newstr ) self.viewedQueue.append( newstr )

else: print " ignoring", newstr else: print " ignoring", newstr else: print " ignoring", newstr def main(): if sys.argv[1] == '': print "usage is ./minispider.py site link" sys.exit(2) mySpider = miniHTMLParser() link = sys.argv[2] while link != '': print "\nChecking link ", link # Obter o arquivo do site e vincular retfile = mySpider.gethtmlfile( sys.argv[1], link ) # Alimentar o arquivo no analisador HTML mySpider.feed(retfile) # Procurar pelo retfile aqui # Obter o prximo link no pedido de nvel transversal link = mySpider.get_next_link() mySpider.close() print "\ndone\n" if __name__ == "__main__": main()

O design bsico desse crawler carregar o primeiro link para verificar em uma fila. Esta fila atua como a prxima fila a ser consultada. medida que um link verificado, todos os novos links encontrados so carregados na mesma fila. Isso fornece uma procura de primeira largura. Eu tambm mantenho uma fila j visualizada e evito seguir qualquer link que vi anteriormente. Basicamente isso; a maior parte do trabalho real feita pelo analisador HTML. Primeiro, derivo uma nova classe, chamada miniHTMLParser, da classe HTMLParser do Python. A classe faz algumas coisas. Primeiro, ela meu analisador HTML, com um mtodo de retorno de chamada (handle_starttag) sempre que uma tag HTML de incio encontrada. Eu tambm uso a classe para acessar links encontrados no crawl (get_next_link) e recuperar o arquivo representado pelo link (neste caso, um arquivo HTML).

Duas variveis de instncia esto contidas na classe, viewedQueue, que contm os links que foram investigados at aqui, e instQueue, que representa os links que ainda sero interrogados. Como possvel ver, os mtodos de classe so simples. O mtodo get_next_link faz uma verificao para saber se instQueue est vazio e retorna ''. Caso contrrio, o prximo item retornado atravs do mtodo pop. O mtodo gethtmlfile utiliza HTTPConnectionK para se conectar a um site e retornar o contedo da pgina definida. Finalmente, handle_starttag chamado para cada tag de incio em uma pgina da Web (alimentada no analisador HTML atravs do mtodo feed). Nessa funo, eu fao a verificao para saber se o link um link no-local (se contiver http), se um endereo de e-mail (via mailto) e tambm se o link contm 'htm', indicando (com grande probabilidade) que uma pgina da Web. Eu tambm fao a verificao para garantir que no fiz a visita antes e, nesse caso, carrego o link em minhas filas visualizadas e para interrogar. O mtodo main simples. Eu crio uma nova instncia miniHTMLParser e comeo com o site definido pelo usurio (argv[1]) e link (argv[2]). Obtenho os contedos do link, os alimento no analisador HTML e visito o prximo link, se existir. O loop ento continua enquanto houver links para visitar. Para chamar o Web spider, necessrio fornecer um endereo de Web site e um link:
./minispider.py www.fsf.org /

Neste caso, estou solicitando o arquivo raiz do Free Software Foundation. Este comando resulta na Lista 8. possvel ver os novos links includos na fila para interrogar e os que so ignorados, como os links no-locais. Na parte inferior da lista, possvel ver o interrogatrio dos links encontrados na raiz. Lista 8. Sada do Script Minispider
[mtj@camus]$ ./minispider.py www.fsf.org / Checking link / ignoring hiddenStructure ignoring http://www.fsf.org ignoring http://www.fsf.org ignoring http://www.fsf.org/news ignoring http://www.fsf.org/events ignoring http://www.fsf.org/campaigns ignoring http://www.fsf.org/resources ignoring http://www.fsf.org/donate ignoring http://www.fsf.org/associate ignoring http://www.fsf.org/licensing ignoring http://www.fsf.org/blogs ignoring http://www.fsf.org/about ignoring https://www.fsf.org/login_form ignoring http://www.fsf.org/join_form ignoring http://www.fsf.org/news/fs-award-2005.html ignoring http://www.fsf.org/news/fsfsysadmin.html ignoring http://www.fsf.org/news/digitalcommunities.html

ignoring http://www.fsf.org/news/patents-defeated.html ignoring /news/RSS ignoring http://www.fsf.org/news ignoring http://www.fsf.org/blogs/rms/entry20050802.html ignoring http://www.fsf.org/blogs/rms/entry20050712.html ignoring http://www.fsf.org/blogs/rms/entry20050601.html ignoring http://www.fsf.org/blogs/rms/entry20050526.html ignoring http://www.fsf.org/blogs/rms/entry20050513.html ignoring http://www.fsf.org/index_html/SimpleBlogFullSearch ignoring documentContent ignoring http://www.fsf.org/index_html/sendto_form ignoring javascript:this.print(); adding licensing/essays/free-sw.html ignoring /licensing/essays ignoring http://www.gnu.org/philosophy ignoring http://www.freesoftwaremagazine.com ignoring donate ignoring join_form adding associate/index_html ignoring http://order.fsf.org adding donate/patron/index_html adding campaigns/priority.html ignoring http://r300.sf.net/ ignoring http://developer.classpath.org/mediation/OpenOffice2GCJ4 ignoring http://gcc.gnu.org/java/index.html ignoring http://www.gnu.org/software/classpath/ ignoring http://gplflash.sourceforge.net/ ignoring campaigns adding campaigns/broadcast-flag.html ignoring http://www.gnu.org ignoring /fsf/licensing ignoring http://directory.fsf.org ignoring http://savannah.gnu.org ignoring mailto:webmaster@fsf.org ignoring http://www.fsf.org/Members/root ignoring http://www.plonesolutions.com ignoring http://www.enfoldtechnology.com ignoring http://blacktar.com ignoring http://plone.org ignoring http://www.section508.gov ignoring http://www.w3.org/WAI/WCAG1AA-Conformance ignoring http://validator.w3.org/check/referer ignoring http://jigsaw.w3.org/cssvalidator/check/referer ignoring http://plone.org/browsersupport Checking link licensing/essays/free-sw.html ignoring mailto:webmaster Checking link associate/index_html ignoring mailto:webmaster Checking link donate/patron/index_html ignoring mailto:webmaster

Checking link campaigns/priority.html ignoring mailto:webmaster Checking link campaigns/broadcast-flag.html ignoring mailto:webmaster done [mtj@camus]$

Este exemplo demonstra a fase de crawl de um Web spider. Depois que um arquivo lido pelo cliente, a pgina tambm deve ser varrida quanto ao contedo, como no caso de um indexador. Voltar para parte superior Ferramentas de Gerao de Spider do Linux Foi observado como implementar dois scrapers e um spider. As ferramentas Linux tambm podem fornecer essa funcionalidade para voc. O comando wget, que significa Web get, um comando til para trabalhar de modo recursivo atravs de um Web site e obter contedo de seu interesse. possvel especificar um Web site, o contedo no qual est interessado e algumas outras opes administrativas. O comando obtm ento os arquivos para seu host local. Por exemplo, o seguinte comando se conectar sua URL definida e percorrer de forma recursiva no mais que trs nveis e obter todos os arquivos com a extenso mp3, mpg, mpeg ou avi.
wget -A mp3,mpg,mpeg,avi -r -l 3 http://<some URL>

O comando curl opera de modo semelhante. Sua vantagem que ele ativamente desenvolvido. Outros comandos semelhantes que possvel utilizar so snarf, fget e fetch. Voltar para parte superior Questes Legais Existiram processos judiciais para a minerao de dados na Internet utilizando Web spiders e eles no foram bem-sucedidos. A Farechase, Inc. foi recentemente processada pela American Airlines por efetuar scrap de tela (em tempo real). Primeiro, o processo judicial alegou que a coleta de dados violava o contrato dos usurios da American Airlines (localizado nos Termos e Condies). Quando tal processo no teve xito, a American Airlines alegou como um tipo de infrao e teve xito. Outros processos judiciais alegam que a largura de banda obtida pelos spiders e scrapers interfere na legitimidade dos usurios. Todas essas alegaes so vlidas e torna as polticas de cortesia mais importantes. Consulte a seo Recursos para obter informaes adicionais. Voltar para parte superior

Indo Alm Efetuar crawl e scrap da Web pode ser divertido e, para alguns, extremamente eficaz. Mas, como discutimos anteriormente, h questes legais. Ao criar spider ou scrap, sempre obedea as regras do arquivo robots.txt disponvel no servidor e as incorpore em sua poltica de cortesia. Protocolos mais novos, como SOAP, tornam a criao de spiders muito mais fcil e menos intromissiva em operaes da Web normais. Esforos futuros, como a Web semntica, tornaro a criao de spiders ainda mais simples, para que solues e mtodos de criao de spiders continuem a crescer.

Recursos Aprender

A pgina Web crawler da wikipedia uma tima fonte de informaes sobre Web crawlers, inclusive sobre seu histrico e sobre as polticas de crawl da Web. Email Spiders oferece uma viso interessante sobre spiders de e-mail e sobre como combat-los. Web Robots Pages um dos Web sites mais antigos sobre robs na Web e tem timas informaes sobre o protocolo de excluso de robs (para sua poltica de cortesia). "Scrapers, Robots and Spiders: The Battle Over Internet Data Mining" (Gesmer Updegrove LLP, 2006) fornece uma viso geral interessante sobre questes legais e tcnicas de Web scrapers, inclusive uma discusso do processo judicial da American Airlines e da Farechase, Inc. Na zona Linux do developerWorks, encontre mais recursos para desenvolvedores Linux. Fique atualizado com eventos tcnicos e Webcasts do developerWorks.

Obter produtos e tecnologias

Source Code for Web Robot Spiders de Searchtools.com fornece cdigo de origem para robs de software livre em vrias linguagens para diversas tarefas. Solicite o SEK para Linux, um conjunto de dois DVDs que contm o software de perodo experimental IBM mais recente para Linux a partir do DB2, Lotus, Rational, Tivolie WebSphere. Com o Software de perodo experimental IBM, disponvel para download diretamente do developerWorks, construa seu prximo projeto de desenvolvimento em Linux.

Discutir

Verifique blogs do developerWorks e envolva-se com a comunidade do developerWorks.

Sobre o autor

M. Tim Jones um arquiteto de firmwares embarcados e autor de Inteligncia Artificial: Sistemas de Abordagem, GNU/Linux, Programao de Aplicativos AI (atualmente em sua segunda edio), Programao de Aplicativos AI (em sua segunda edio) e BSD Sockets Programming from a Multilanguage Perspective. Sua formao em engenharia vai desde o desenvolvimento de kernels para nave espacial geossincrnica at a arquitetura de sistema embarcado e o desenvolvimento de protocolos de interligao de redes. Tim um Engenheiro Consultor para a Emulex Corp. em Longmont, Colorado.

http://www.ibm.com/developerworks/br/library/l-spider/