Сканирующий сайт / паук, чтобы получить карту сайта [закрыто]

0

Мне нужно получить целую карту сайта в формате, подобном:

Мне нужно, чтобы он был основан на ссылках (без файла или dir brute-force), например:

разобрать домашнюю страницу -> получить все ссылки -> изучить их -> получить ссылки, ...

И мне также нужна возможность определить, является ли страница «шаблоном», чтобы не получить все «дочерние страницы». Например, если найдены следующие ссылки:

Мне нужно получить только один раз http://example.org/product/viewproduct

Я посмотрел на HTTtracks, wget (с паутинкой), но пока что ничего убедительного.

Софт / инструмент должен быть загружаемым, и я предпочитаю, если он работает на Linux. Это может быть написано на любом языке.

Спасибо

ack__
источник

Ответы:

3

После долгих исследований ни один инструмент не удовлетворил меня, поэтому я пишу свой собственный, используя http://scrapy.org/doc/

ack__
источник
1

Я лично использую Kapow Katalyst , но я думаю, что это вне вашего бюджета. Если нет, то это, вероятно, самое интуитивное программное обеспечение для создания пауков, и гораздо больше, если вам нужно.

m4573r
источник
Спасибо, я не знал об этом. Я посмотрю, хотя сейчас у меня нет на это бюджета.
ack__
1

Вот пример того, что сделано в python:

(Взято с http://theanti9.wordpress.com/2009/02/14/python-web-crawler-in-less-than-50-lines/ )

Также на этом сайте есть ссылка на проект GitHub http://github.com/theanti9/PyCrawler, который является более надежной версией, которую сделал человек.

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
источник
0

(Win) HTTrack делает очень приличную работу.

Он позволяет вам загружать сайт World Wide Web из Интернета в локальный каталог, рекурсивно создавать все каталоги, получать HTML, изображения и другие файлы с сервера на ваш компьютер.

Ян Догген
источник
0

Технически говоря, нет надежного способа извлечь структуру каталогов сайта.

Это связано с тем, что HTTP не является сетевой файловой системой. Единственное, что вы можете сделать с помощью HTTP - это перейти по ссылкам с начальной страницы. Кроме того, нет ничего, что требовало бы, чтобы на начальной странице были ссылки только на ее непосредственный подкаталог. Страница index.html верхнего уровня может, например, иметь прямую ссылку на «foo / baz / blah.html» глубоко в некотором подкаталоге.

Редактировать:

  • Для создания основных карт сайта некоторые онлайн-инструменты обычно называются Sitemap Generator . Одним из таких инструментов является web-site-map.com , он предоставляет карту сайта в XML.

  • Если вы знакомы с программированием, то вы можете написать свой собственный веб-паук, с определенным набором правил конкретного сайта.

Анкит
источник
В самом деле, я ищу паука в стиле следующей ссылки. Нет проблем с сайтами, не имеющими ссылок только на вложенные каталоги, софт может позже обрезать найденный контент и упорядочить его в виде дерева. Я не хочу полагаться на XML-карты сайтов, так как они не представляют весь контент сайта. А что касается программирования моего собственного паука, то это гораздо сложнее, чем кажется (см. Различные потоки в stackoverflow), и на это уходит очень много времени.
2012 г.