Web Spider – Captura Links de Website

Publicado: 23 de fevereiro de 2014 em Hacking

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")
Anúncios
comentários
  1. Jeff Monteiro disse:

    Não sou muito familiarizado com a linguagem python, mas onde eu posso inserir uma url ?

  2. Jeff Monteiro disse:

    consegui, mas tem como eu retornar o resultado para uma pagina html ?

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s