网站爬虫/蜘蛛获取网站地图

网站爬虫/蜘蛛获取网站地图

我需要检索整个网站地图,格式如下:

我需要它基于链接(没有文件或目录暴力破解),例如:

解析主页->检索所有链接->探索它们->检索链接,...

我还需要能够检测页面是否为“模板”,以便不检索所有“子页面”。例如,如果发现以下链接:

我只需要得到一次http://example.org/product/viewproduct

我研究过 HTTtracks、wget(带有 spider 选项),但目前还没有任何结论。

软件/工具应该可以下载,我更喜欢它在Linux上运行。它可以用任何语言编写。

谢谢

答案1

经过大量研究,没有一个工具让我满意,因此我使用http://scrapy.org/doc/

答案2

下面是用 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)

答案3

我个人使用Kapow 催化剂,但我猜它超出了你的预算。如果不是,它可能是创建蜘蛛最直观的软件,如果你需要的话,它还有更多功能。

答案4

(赢)HTTrack做得很好。

它允许您将万维网站点从互联网下载到本地目录,递归构建所有目录,并将 HTML、图像和其他文件从服务器获取到您的计算机。

相关内容