Robot indeksujący / pająk, aby uzyskać mapę witryny [zamknięty]

0

Muszę pobrać całą mapę witryny w formacie takim jak:

Potrzebuję go opartego na linkach (bez pliku lub dir brute-force), takiego jak:

parsuj stronę główną -> pobierz wszystkie linki -> przeglądaj je -> pobierz linki, ...

Potrzebuję też możliwości wykrycia, czy strona jest „szablonem”, aby nie pobierać wszystkich „stron potomnych”. Na przykład, jeśli zostaną znalezione następujące linki:

Muszę uzyskać tylko raz http://example.org/product/viewproduct

Zajrzałem do HTTtracków, wget (z opcją pająka), ale jak dotąd nic rozstrzygającego.

Oprogramowanie / narzędzie powinno być dostępne do pobrania i wolę, jeśli działa w systemie Linux. Można go napisać w dowolnym języku.

Dzięki

ack__
źródło

Odpowiedzi:

1

Osobiście używam Kapow Katalyst , ale myślę, że to nie z twojego budżetu. Jeśli nie, to prawdopodobnie najbardziej intuicyjne oprogramowanie do tworzenia pająków i wiele więcej, jeśli potrzebujesz.

m4573r
źródło
Dzięki, nie wiedziałem o tym. Rzucę okiem, chociaż obecnie nie mam na to budżetu.
ack__
1

Oto przykład jednego wykonanego w Pythonie:

(Źródło: http://theanti9.wordpress.com/2009/02/14/python-web-crawler-in-less-than-50-lines/ )

Również na tej stronie znajduje się link do projektu github http://github.com/theanti9/PyCrawler, który jest bardziej niezawodną wersją stworzoną przez osobę.

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)
d4v3y0rk
źródło
0

(Win) HTTrack wykonuje bardzo przyzwoitą robotę.

Umożliwia pobranie witryny sieci Web z Internetu do lokalnego katalogu, rekurencyjne budowanie wszystkich katalogów, pobieranie HTML, obrazów i innych plików z serwera na komputer.

Jan Doggen
źródło
0

Technicznie rzecz biorąc, nie ma niezawodnego sposobu na wyodrębnienie struktury katalogów witryny.

Wynika to z faktu, że HTTP nie jest sieciowym systemem plików. Jedyne, co możesz zrobić z HTTP, to skorzystaj z linków na stronie początkowej. Ponadto nic nie wymaga, aby strona początkowa zawierała linki tylko do jej bezpośredniego podkatalogu. Strona index.html najwyższego poziomu może na przykład zawierać bezpośredni link do „foo / baz / blah.html”, głęboko w pewnym podkatalogu.

Edytować:

  • Aby wygenerować podstawowe mapy witryn , niektóre narzędzia online są powszechnie znane jako Generator map witryn . Jednym z takich narzędzi jest web-site-map.com , daje mapę witryny w formacie XML.

  • Jeśli nie masz doświadczenia w programowaniu, możesz napisać własnego pająka z określonym zestawem reguł dla konkretnej witryny.

Ankit
źródło
Rzeczywiście szukam pająka w stylu linku podążającego. Nie ma problemu z witrynami, które nie mają linków tylko do podkatalogów, program może później przyciąć znalezioną zawartość i uporządkować ją w widoku drzewa. Nie chcę polegać na mapach witryn XML, ponieważ nie prezentują one całej zawartości witryny. Jeśli chodzi o programowanie własnego pająka, jest to coś o wiele bardziej skomplikowanego niż się wydaje (zobacz różne wątki na temat przepełnienia stosu) i zajmuje to dużo czasu.
ack__