Nach langem Suchen hat mich kein Tool zufrieden gestellt, daher codiere ich mein eigenes mit http://scrapy.org/doc/
Website-Crawler / Spider, um eine Sitemap zu erhalten
Ich muss eine vollständige Website-Map abrufen, in einem Format wie:
- http://example.org/
- http://example.org/product/
- http://example.org/service/
- http://example.org/about/
- http://example.org/product/viewproduct/
Ich brauche es, um verlinkt zu sein (keine Datei oder Dir brute-force), wie:
Homepage durchsuchen -> alle Links abrufen -> erkunden -> Links abrufen, ...
Und ich brauche auch die Fähigkeit zu erkennen, ob eine Seite eine "Vorlage" ist, um nicht alle "untergeordneten Seiten" abzurufen. Zum Beispiel, wenn die folgenden Links gefunden werden:
- http://example.org/product/viewproduct?id=1
- http://example.org/product/viewproduct?id=2
- http://example.org/product/viewproduct?id=3
Ich brauche nur einmal das http://example.org/product/viewproduct
Ich habe mir HTTtracks angesehen, wget (mit Spider-Option), aber bisher nichts schlüssiges.
Das Soft- / Tool sollte herunterladbar sein, und ich bevorzuge es, wenn es unter Linux läuft. Es kann in jeder Sprache geschrieben werden.
Vielen Dank
5 Antworten auf die Frage
- Beliebte
- Neu
- Mit Kommentaren
- Aktiv
Hier ist ein Beispiel aus Python:
(Entnommen aus http://theanti9.wordpress.com/2009/02/14/python-web-crawler-in-less-than-50-lines/ )
Auf dieser Website befindet sich auch ein Link zu einem Github-Projekt http://github.com/theanti9/PyCrawler, das eine robustere Version der Person darstellt.
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)
Ich persönlich benutze Kapow Katalyst, aber ich schätze, es liegt außerhalb Ihres Budgets. Wenn nicht, ist dies wahrscheinlich die intuitivste Software, um Spider zu erstellen, und vieles mehr, wenn Sie es brauchen.
Technisch gesehen gibt es keine narrensichere Möglichkeit, die Verzeichnisstruktur einer Website zu extrahieren.
Dies ist darauf zurückzuführen, dass HTTP kein Netzwerkdateisystem ist. Das einzige, was Sie mit HTTP tun können, ist, den Links von der Startseite aus zu folgen. Außerdem muss die Startseite nur Links zu ihrem unmittelbaren Unterverzeichnis enthalten. Eine index.html-Seite der obersten Ebene kann beispielsweise einen direkten Link zu "foo / baz / blah.html" enthalten, tief in einem Unterverzeichnis.
Bearbeiten:
Um grundlegende zu erzeugen Sitemaps sind einige Online - Tools gibt es allgemein bekannt als Sitemap - Generator . Ein solches Tool ist web-site-map.com, es gibt Sitemap in XML.
Wenn Sie mit dem Programmieren vertraut sind, können Sie Ihren eigenen Web-Spider mit bestimmten Regeln für eine bestimmte Site schreiben.
(Win) HTTrack macht einen sehr anständigen Job.
Sie können eine World Wide Website aus dem Internet in ein lokales Verzeichnis herunterladen, alle Verzeichnisse rekursiv erstellen und HTML-Dateien, Bilder und andere Dateien vom Server auf Ihren Computer übertragen.
Verwandte Probleme
-
3
Was bedeutet abgeleitete Arbeit im Zusammenhang mit Websites?
-
8
Ressourcen zum Erstellen von Computern
-
2
Anrufen, aber keine Seite mit wget herunterladen
-
2
LogMeIn.com und Eingriffe auf bestimmte Websites
-
2
Freigeben eines Unterverzeichnisses in robots.txt
-
4
Wie kann ich gesendete Formulardaten im Internet Explorer erfassen / erfassen?
-
19
Wie kann ich eine komplette Website herunterladen?
-
1
wget und cookies.txt - domain.tld vs. .domain.tld
-
6
Welche Erweiterungen sollten bei der Registrierung einer Domain vermieden werden?
-
3
Kostenlose oder unbegrenzte Lizenzalternativen zur Monoslideshow Flash-Diashow?