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 回答