Rastreador / spider do site para obter o mapa do site [fechado]

0

Eu preciso recuperar um mapa do site inteiro, em um formato como:

Eu preciso que ele seja baseado em links (sem arquivo ou dir brute-force), como:

parse homepage -> retrieve all links -> explore them -> retrieve links, ...

E também preciso da capacidade de detectar se uma página é um "modelo" para não recuperar todas as "páginas-filho". Por exemplo, se os seguintes links forem encontrados:

  • link
  • link
  • link

Preciso ter apenas uma vez o link

Eu olhei para HTTtracks, wget (com opção de spider), mas nada conclusivo até agora.

O software / ferramenta deve estar disponível para download e eu prefiro se ele for executado no Linux. Pode ser escrito em qualquer idioma.

Obrigado

    
por ack__ 03.09.2012 / 16:23

5 respostas

3

Depois de muita pesquisa, nenhuma ferramenta me satisfez, portanto estou codificando o meu usando o link

    
por 11.09.2012 / 03:09
1

Eu pessoalmente uso Kapow Katalyst , mas acho que está fora do seu orçamento. Se não, é provavelmente o software mais intuitivo para criar aranhas, e muito mais se você precisar.

    
por 13.09.2012 / 09:58
1

Aqui está um exemplo de um feito em python:

(extraído de link )

Além disso, no site há um link para um link do projeto github, que é uma versão mais robusta que a pessoa fez.

import sys
import re
import urllib2
import urlparse
tocrawl = set(["http://www.facebook.com/"])
crawled = set([])
keywordregex = re.compile('<meta\sname=["\']keywords["\']\scontent=["\'](.*?)["\']\s/>')
linkregex = re.compile('<a\s*href=[\'|"](.*?)[\'"].*?>')

while 1:
    try:
        crawling = tocrawl.pop()
        print crawling
    except KeyError:
        raise StopIteration
    url = urlparse.urlparse(crawling)
    try:
        response = urllib2.urlopen(crawling)
    except:
        continue
    msg = response.read()
    startPos = msg.find('<title>')
    if startPos != -1:
        endPos = msg.find('</title>', startPos+7)
        if endPos != -1:
            title = msg[startPos+7:endPos]
            print title
    keywordlist = keywordregex.findall(msg)
    if len(keywordlist) > 0:
        keywordlist = keywordlist[0]
        keywordlist = keywordlist.split(", ")
        print keywordlist
    links = linkregex.findall(msg)
    crawled.add(crawling)
    for link in (links.pop(0) for _ in xrange(len(links))):
        if link.startswith('/'):
            link = 'http://' + url[1] + link
        elif link.startswith('#'):
            link = 'http://' + url[1] + url[2] + link
        elif not link.startswith('http'):
            link = 'http://' + url[1] + '/' + link
        if link not in crawled:
            tocrawl.add(link)
    
por 11.09.2012 / 14:39
0

(Win) HTTrack faz um trabalho muito decente.

It allows you to download a World Wide Web site from the Internet to a local directory, building recursively all directories, getting HTML, images, and other files from the server to your computer.

    
por 12.09.2012 / 19:45
0

Tecnicamente falando, não há uma maneira infalível de extrair a estrutura de diretórios de um site.

Isso ocorre porque o HTTP não é um sistema de arquivos de rede. A única coisa que você pode fazer com HTTP é seguir os links da página inicial. Além disso, não há nada que requer a página inicial para ter links apenas para o seu subdiretório imediato. Uma página index.html de nível superior pode, por exemplo, ter um link direto para "foo / baz / blah.html", em algum subdiretório.

Editar:

  • Para gerar mapas de sites básicos, algumas ferramentas on-line estão disponíveis conhecido como Gerador de Sitemaps . Uma dessas ferramentas é web-site-map.com , fornece sitemap em XML.

  • Se você se sentir confortável com a programação, poderá escrever o seu próprio web-spider, com um conjunto específico de regras de um site específico.

por 03.09.2012 / 17:55