Website-Crawler / Spider, um eine Sitemap zu erhalten

13165
ack__

Ich muss eine vollständige Website-Map abrufen, in einem Format wie:

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:

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

0

5 Antworten auf die Frage

3
ack__

Nach langem Suchen hat mich kein Tool zufrieden gestellt, daher codiere ich mein eigenes mit http://scrapy.org/doc/

1
d4v3y0rk

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) 
1
m4573r

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.

Danke, ich wusste nichts davon. Ich werde einen Blick darauf werfen, obwohl ich derzeit kein Budget dafür habe. ack__ vor 11 Jahren 0
0
Ankit

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.

In der Tat bin ich auf der Suche nach einer Follow-Link-Spinne. Kein Problem, da Websites nicht nur Links zu Unterverzeichnissen haben. Die Software kann später den gefundenen Inhalt kürzen und in der Strukturansicht organisieren. Ich möchte mich nicht auf XML-Sitemaps verlassen, da diese nicht den gesamten Inhalt der Website darstellen. Und um meine eigene Spinne zu programmieren, ist dies etwas komplizierter als es aussieht (siehe verschiedene Threads in stackoverflow), und es dauert sehr viel Zeit. ack__ vor 11 Jahren 0
0
Jan Doggen

(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.