После долгих исследований ни один инструмент не удовлетворил меня, поэтому я пишу свой собственный, используя http://scrapy.org/doc/
Сканирующий сайт / паук, чтобы получить карту сайта
Мне нужно получить целую карту сайта в формате, подобном:
- http://example.org/
- http://example.org/product/
- http://example.org/service/
- http://example.org/about/
- http://example.org/product/viewproduct/
Мне нужно, чтобы он был основан на ссылках (без файла или dir brute-force), например:
разобрать домашнюю страницу -> получить все ссылки -> изучить их -> получить ссылки, ...
И мне также нужна возможность определить, является ли страница «шаблоном», чтобы не получить все «дочерние страницы». Например, если найдены следующие ссылки:
- http://example.org/product/viewproduct?id=1
- http://example.org/product/viewproduct?id=2
- http://example.org/product/viewproduct?id=3
Мне нужно получить только один раз http://example.org/product/viewproduct
Я изучил HTTtracks, wget (с паутинкой), но пока что ничего убедительного.
Софт / инструмент должен быть загружаемым, и я предпочитаю, если он работает на Linux. Это может быть написано на любом языке.
Спасибо
5 ответов на вопрос
- Популярные
- Новые
- С комментариями
- Активные
Here is an example of one made in python:
(Taken from http://theanti9.wordpress.com/2009/02/14/python-web-crawler-in-less-than-50-lines/ )
Also on that website there is a link to a github project http://github.com/theanti9/PyCrawler that is a more robust version the person made.
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)
Я лично использую Kapow Katalyst, но я думаю, что это вне вашего бюджета. Если нет, то это, вероятно, самое интуитивно понятное программное обеспечение для создания пауков, и гораздо больше, если вам нужно.
Технически говоря, нет надежного способа извлечь структуру каталогов веб-сайта.
Это связано с тем, что HTTP не является сетевой файловой системой. Единственное, что вы можете сделать с помощью HTTP, это перейти по ссылкам с начальной страницы. Кроме того, нет ничего, что требовало бы, чтобы на начальной странице были ссылки только на ее непосредственный подкаталог. Страница index.html верхнего уровня может, например, иметь прямую ссылку на «foo / baz / blah.html», глубоко в некотором подкаталоге.
Редактировать:
Для создания основных карт сайта некоторые онлайн-инструменты обычно называются Sitemap Generator . Одним из таких инструментов является web-site-map.com, он предоставляет карту сайта в XML.
Если вы знакомы с программированием, то вы можете написать свой собственный веб-паук, с определенным набором правил конкретного сайта.
(Победа) HTTrack делает очень приличную работу.
Это позволяет вам загружать сайт World Wide Web из Интернета в локальный каталог, рекурсивно создавать все каталоги, получать HTML, изображения и другие файлы с сервера на ваш компьютер.
Похожие вопросы
-
3
Что означает производная работа в контексте веб-сайтов?
-
8
Ресурсы для сборки компьютеров
-
2
Звоните, но не загружайте страницу с помощью wget
-
-
2
LogMeIn.com и вмешательства на определенных сайтах
-
2
Неограниченная подкаталог в robots.txt
-
4
Как я могу прослушать / захватить отправленные данные формы в IE?
-
19
Как я могу скачать весь сайт?
-
1
wget и cookies.txt - domain.tld против .domain.tld
-
6
Каких расширений следует избегать при регистрации домена?
-
3
Бесплатные или неограниченные варианты лицензий для слайдшоу Monoslideshow Flash?