5

特定のTLDで終わる「すべての」サイトを見つける方法を探しています。私はそれを実現する方法についていくつかのアイデアを持っていましたが、これを実現するための最良/最も効果的な方法が何であるかわかりません。どこにもリンクされていないページはスパイダーなどで見つけられないことを知っているので、この例では孤立したページは気にしません。私がやりたいことは、プログラムの入力としてTLDを使用し、出力としてサイトのリストを使用することです。例えば:

# <program> .de
- spiegel.de
- deutsche-bank.de
...
- bild.de

では、これに到達するための最良の方法は何ですか?私を助けるために利用できるツールはありますか、またはこれをどのようにプログラムしますか?

4

2 に答える 2

8

この答えは少し遅れているかもしれませんが、私はこれを見つけました。

Common Crawlerの素晴らしいデータを使用してみてください。

コモンクローラーとは

Common Crawl は 501(c)(3) 非営利団体で、インターネット研究者、企業、個人に調査と分析の目的で無料でインターネットのコピーを提供することを目的としています。

URL 検索ツールのクエリを使用して.de、結果をファイルとしてダウンロードしjsonます。

結果の素晴らしいファイルが得られますが、それにはドメインのすべてのサイト マップが含まれているため、いくつかの作業を行う必要があります (したがってクロール)。

一部のサイトでは歓迎されないファイルを使用しているため、クローラーが含まれないという別の欠点がありますrobot.txtが、これは私がこれまでに見つけた最良の結果です.

于 2015-10-18T12:15:31.017 に答える
0

以下のコードは、python3 のマルチスレッド ドメイン チェッカー スクリプトであり、リストに追加されるブルート フォース文字列ジェネレーターのようなものを使用します。そのリストには、(指定された長さに応じて) 文字のすべての可能な組み合わせが含まれている可能性があります。それにいくつかの文字を追加します。中国語、ロシア語、オランダ語のサイトでうまく使用できました。

from multiprocessing.pool import ThreadPool
from urllib.request import urlopen
import pandas as pd

from itertools import product

chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890' # add all chars in your language
urls = []# list
for length in range(0, 9999): # Change this length 
    to_attempt = product(chars, repeat=length)
    for attempt in to_attempt:
        a=("https://"+''.join(attempt)+".de")
        urls.append(a)


import sys
sys.stdout = open('de.csv','wt')
def fetch_url(url):
    try:
        response = urlopen(url)
        return url, response.read(), None
    except Exception as e:
        return url, None, e

start = timer()
results = ThreadPool(4000).imap_unordered(fetch_url, urls)
for url, html, error in results:
    if error is None:
        print(url)
于 2018-08-09T11:00:56.670 に答える