サイトマップを取得するためのWebサイトクローラー/スパイダー[非公開]


0

次のような形式で、Webサイトマップ全体を取得する必要があります。

次のように、リンクベースである必要があります(ファイルまたはディレクトリブルートフォースなし)。

ホームページを解析->すべてのリンクを取得->それらを探索->リンクを取得、...

また、すべての「子ページ」を取得しないために、ページが「テンプレート」であるかどうかを検出する機能も必要です。たとえば、次のリンクが見つかった場合:

http://example.org/product/viewproductを一度だけ取得する必要があります

私はHTTtracks、wget(スパイダーオプション付き)を調べましたが、これまでのところ決定的なものはありません。

ソフト/ツールはダウンロード可能である必要があり、Linux上で実行する場合は好みです。任意の言語で作成できます。

ありがとう

回答:


3

多くの研究の後、私を満足させるツールはありません。したがって、http://scrapy.org/doc/を使用して自分でコーディングしています。


1

私は個人的にKapow Katalystを使用していますが、予算外です。そうでない場合、おそらくスパイダーを作成するための最も直感的なソフトウェアであり、必要に応じてさらに多くのソフトウェアです。


おかげで、私はこれについて知りませんでした。現時点では予算がありませんが、見てみましょう。
ack__

1

Pythonで作成されたものの例を次に示します。

http://theanti9.wordpress.com/2009/02/14/python-web-crawler-in-less-than-50-lines/から取得

また、そのWebサイトには、ユーザーが作成したより堅牢なバージョンである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)

0

(Win)HTTrackは非常にまともな仕事をしています。

これにより、インターネットからローカルディレクトリにWorld Wide Webサイトをダウンロードし、すべてのディレクトリを再帰的に構築し、HTML、画像、およびその他のファイルをサーバーからコンピューターに取得できます。


0

技術的に言えば、Webサイトのディレクトリ構造を抽出する確実な方法はありません。

これは、HTTPがネットワークファイルシステムではないためです。HTTPでできることは、開始ページからリンクをたどることだけです。さらに、開始ページに直接のサブディレクトリへのリンクのみを必要とするものはありません。たとえば、トップレベルのindex.htmlページには、サブディレクトリの深い「foo / baz / blah.html」への直接リンクがあります。

編集:

  • 基本的なサイトマップを生成するために、サイトマップジェネレーターとして一般に知られているオンラインツールがあります。そのようなツールの1つがweb-site-map.comで、サイトマップをXMLで提供します。

  • プログラミングに慣れている場合は、特定のサイトの特定のルールセットを使用して、独自のWebスパイダーを作成できます。


実際、私はフォローリンクスタイルのスパイダーを探しています。サブディレクトリへのリンクのみを持たないサイトでは問題ありません。ソフトは後で見つかったコンテンツをトリミングし、ツリービューで整理できます。すべてのサイトのコンテンツを表示するわけではないため、XMLサイトマップに依存したくありません。そして、自分のスパイダーをプログラムする場合、これは見た目よりもはるかに複雑なものであり(stackoverflowのさまざまなスレッドを参照)、非常に多くの時間がかかります。
ack__
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.