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.