我需要把 whois 数据放在一个像这样的表中
- 注册人,
- 创建日期,
- 到期日等
我有从 whois 服务器中提取数据的脚本,但是每个域扩展的输出都不同。
例如,对于.com
域,注册人详细信息以总地址的形式出现,对于.org
域,它以注册人名称、street1、street2、street3 等形式出现。
所以我无法将注册人详细信息作为一个单元提取到数据库中。
有些地方我听说如果我们得到 xml 数据,我们可以提取它,有人可以帮助解决这个问题吗?谢谢!。
其实问题远不止于此。
WHOIS 服务由 RFC3912 定义。它是一个非常基本的请求协议,根本没有定义应答内容的格式。因此,答案通常反映了包含数据的数据库的格式,并且您可能会为每个数据库获得不同的语法。由于 WHOIS 可用于您想要的任何内容,因此您不能对您将获得的答案格式做出太多假设。但是,希望您可以期望收到可解析的内容,以及每个请求的类似格式的答案。
因此,您需要为每个服务器开发一个解析逻辑,您必须以非常经验的方式进行。
然而,这里有一些来自 RFC 的开发技巧。
您需要使用 TCP 端口 43 发送请求,单行以 CR+LF ASCII 字符结尾
您必须期望 TCP 连接结束仅意味着答案已完成。
特别是关于域名,您可能需要注意,以前对 ASCII 编码的限制使一些注册人使用 Punycode 对 DNS 系统中的一些(通过示例强调)字符串进行编码,因此您可能希望能够在 Whois 答案中期待这些如果你遇到一些回复。自 2003 年以来国际化域名的存在将要求您支持 unicode 编码。转换名称的算法很复杂,RFC 3490 应该为您提供一些有用的细节。
祝你好运 !
您需要检测格式并为它们使用不同的正则表达式。或者,正如您提到的,您可以使用 XML 甚至 JSON API http://whoisxmlapi.com/ http://www.domaintools.com/api/docs/
您需要扩展数据库和处理以更好地处理问题。
正如您已经注意到的,远程服务提供的数据采用不同的格式。所以你需要将获取数据和解析数据的关注点分开,因为这两件事是相互独立的。例如,一个 TLD 的格式会随着时间而改变。
因此,首先您获取每个域的纯文本数据并将其存储为元数据:
然后,您可以稍后在第二个处理中进行解析。您可以使用已经存在的元数据来决定您需要哪种解析算法。这也有助于您随着时间的推移维护您的应用程序。
解析正确后,您就获得了您想要的标准化格式。
除了这些技术处理之外,您还应该注意 whois 服务提供的使用条件。并非所有技术上可行的,在法律上或道德上都被接受。以应有的尊重照顾和对待他人的个人记录。保护您收集的数据,例如存档和加扰/锁定您不再需要的数据以进行持续处理。
另见: