Um Spider simples coleta o conteúdo da Internet
Spider é um programa que visita sites e lê suas páginas e outras informações, a fim de criar entradas para um índice de motor de busca. Os principais motores de busca na Web, todos têm um programa desse tipo, o que também é conhecido como um “crawler” ou um “bot”. Os spiders são normalmente programados para visitar sites que tenham sido apresentados por seus proprietários como novos ou atualizados. Sites inteiros ou páginas específicas podem ser visitados e indexados de forma seletiva. Spiders são chamados de aranhas, porque eles costumam visitar muitos locais, em paralelo, ao mesmo tempo, as suas “pernas” que abrangem uma grande área do “web”. As aranhas podem rastejar através de páginas de um site de várias maneiras. Uma maneira é seguir todos os links de hipertexto em cada página até que todas as páginas foram lidas.
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 cabeçalho e corpo, com o cabeçalho fornecendo informações de status e uma descrição do conteúdo do corpo.
Coleta de e-mail
Agora o lado ruim dos crawlers. Infelizmente, pessoas mal intencionadas podem efetuar estragos na Internet. Os crawlers de coleta de e-mail procuram por endereços de e-mail em Web sites que são então utilizados para gerar o spam em massa que vemos diariamente.
A coleta de e-mail pode ser uma das atividades de crawl mais fáceis.
Exemplo:
Requisitos: Package Termcolor – https://pypi.python.org/pypi/termcolor
Neste exemplo em Python executamos o script do nosso Spyder via terminal do linux, passando o nome do web site como parametro e logo nosso Spyder analisa todas as paginas do site e captura todos os links do site.
Este exemplo pode ser modificado para capturar varias outras informações do website.
Executar: python spyder.py http://nomedosite.com
Python
#!/usr/bin/env python # -*- coding: latin-1 -*- # Estes modulos fazem a maioria do trabalho. import sys import urllib2 import urlparse import htmllib, formatter from cStringIO import StringIO from termcolor import colored def log_stdout(msg): """imprime menssagem na tela""" print colored(msg,"cyan") def get_page(url, log): """Retorna URL e seus conteudos, log erros.""" try: page = urllib2.urlopen(url) except urllib2.URLError: log("Retornando Erros : " + url) return '' body = page.read() page.close() return body def find_links(html): """Retorna uma lista de links html.""" # Usa para validar as urls e retornar as HREFs writer = formatter.DumbWriter(StringIO()) f = formatter.AbstractFormatter(writer) parser = htmllib.HTMLParser(f) parser.feed(html) parser.close() return parser.anchorlist class Spider: """ O coração do programa, encontra todos os links em web site. run() contem o loop principal. process_page() retorna cada pagina e encontra os links. """ def __init__(self, startURL, log=None): # Este metodo seta valores iniciais self.URLs = set() self.URLs.add(startURL) self.include = startURL self._links_to_process = [startURL] if log is None: # Use log_stdout se não providenciar log self.log = log_stdout else: self.log = log def run(self): # Processa lista de URLs de uma vez while self._links_to_process: url = self._links_to_process.pop() self.log("Retornando: " + url) self.process_page(url) def url_in_site(self, link): # Checa quando o link começa com uma base URL return link.startswith(self.include) def process_page(self, url): # Retorna a pagina e checa o link nela html = get_page(url, self.log) for link in find_links(html): # Manipula oslinks relativos link = urlparse.urljoin(url, link) self.log("Checking: " + link) # Obtendo certeza que este é um novo link if link not in self.URLs and self.url_in_site(link): self.URLs.add(link) self._links_to_process.append(link) if __name__ == '__main__': # Este codigo roda quando o script é rodado na linha de comando startURL = sys.argv[1] spider = Spider(startURL) spider.run() for URL in sorted(spider.URLs): print colored(URL, "blue")
Não sou muito familiarizado com a linguagem python, mas onde eu posso inserir uma url ?
consegui, mas tem como eu retornar o resultado para uma pagina html ?
Olá Jeff,
Tem várias maneiras de fazer isso, Python é muito flexivel e possiu uma sintaxe bem amigavel, você pode começar olhando esta documentação:
https://docs.python.org/2/howto/webservers.html
Espero ter ajudado.
Abs.