寻找一个国家的“所有”域名

时间:2012-08-23 18:24:50

标签: web-crawler tld

我正在寻找一种方法来查找以给定tld结尾的“所有”网站。关于如何实现这一点,我有几点想法,但我不确定实现这一点的最佳/最有效的方法是什么。我知道蜘蛛等无法找到无处链接的页面,所以在这个例子中我并不关心孤立的页面。 我想做什么,我希望有一个TLD作为我的程序的输入,我想要一个站点列表作为输出。例如:

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

那么达到此目的的最佳途径是什么?有没有工具可以帮助我,或者你会如何编程呢?

2 个答案:

答案 0 :(得分:5)

这个答案可能有点迟,但我刚发现了这个。

您可以尝试使用 Common Crawler 真棒数据。

那么,什么是Common Crawler?

  

Common Crawl是一个501(c)(3)非营利组织,致力于   向互联网研究人员,公司提供互联网副本   和个人免费进行研究和分析。

.de使用url search tool查询,然后将结果下载为json文件。

您将获得一个很好的结果文件,然后您将需要对其进行一些工作,因为它包含域的所有站点地图(因此爬行)。

某些网站使用不受欢迎的robot.txt文件的另一个缺点是不会包含它们仍然是我迄今为止找到的最佳结果。

答案 1 :(得分: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)