78044


やりたいこと：  
下記のコードでドメインの情報を取得しておりますが、  
特定のドメイン (例: yahoo.co.jp) ではoutputのように取得出来ないです。

他の方法で取得する方法ありますでしょうか。

わかる方いらっしゃいましたらご教示願います。  
お手数ですが、宜しくお願いいたします。

* * *

コード

[code]

    import whois
    w = whois.whois('https://www.yahoo.co.jp/')
    print(w)
    
[/code]

output

[code]

    {
      "domain_name": null,
      "registrant_org": "Yahoo Japan Corporation",
      "creation_date": null,
      "name_servers": null,
      "updated_date": null,
      "status": null
    }
    
[/code]

取得したい項目

[code]

    {
      "domain_name": 
      "registrar": 
      "whois_server": 
      "referral_url": 
      "updated_date": 
      "expiration_date": 
      "name_servers": 
      "status": 
      "emails": 
      "dnssec": 
      "name":
      "org":,
      "address":
      "city":
      "state":
      "zipcode":
      "country":
    }
    
[/code]


CC BY-SA 4.0
2021-07-08T03:56:09.613
78039
2021-07-08T06:42:59.577
2021-07-08T06:17:37.937
3060
18859
question
python python3
Python でのドメイン情報取得に失敗する場合がある


JPドメイン名の登録管理業務とDNSを運用しているのは[株式会社日本レジストリサービス(JPRS)](https://jprs.jp/)で、質問にある
`yahoo.co.jp` ドメインに関する whois 情報は以下の様になります。

[code]

    $ whois -h whois.jprs.jp yahoo.co.jp
    Domain Information: [ドメイン情報]
    a. [ドメイン名]                 YAHOO.CO.JP
    e. [そしきめい]                 やふーかぶしきがいしゃ
    f. [組織名]                     ヤフー株式会社
    g. [Organization]               Yahoo Japan Corporation
    k. [組織種別]                   株式会社
    l. [Organization Type]          Corporation
    m. [登録担当者]                 HT46858JP
    n. [技術連絡担当者]             KM56800JP
    p. [ネームサーバ]               ns01.yahoo.co.jp
    p. [ネームサーバ]               ns02.yahoo.co.jp
    p. [ネームサーバ]               ns11.yahoo.co.jp
    p. [ネームサーバ]               ns12.yahoo.co.jp
    s. [署名鍵]                     
    [状態]                          Connected (2021/09/30)
    [登録年月日]                    2019/09/27
    [接続年月日]                    2019/09/27
    [最終更新]                      2020/10/01 01:02:24 (JST)
    
[/code]

gTLD によって whois 情報の公開範囲が異なっていて、`.jp` ドメインの場合は [.JP
公開・開示対象情報一覧](https://jprs.jp/doc/rule/disclose-list.html)
に記載されています。書かれてある通りに、オンライン公開されているのは上記の情報で、それ以外の情報は「情報開示請求手続き」を行う必要があります。

本題の [python-whois](https://pypi.org/project/python-whois/) に関してですが、既に `.jp`
ドメイン用のパーサが用意されています。

[whois/whois/parser.py](https://github.com/richardpenman/whois/blob/master/whois/parser.py#L853)

[code]

    class WhoisJp(WhoisEntry):
        """Whois parser for .jp domains
        """
        regex = {
            'domain_name': 'a\. \[Domain Name\]\s*(.+)',
            'registrant_org': 'g\. \[Organization\](.+)',
            'creation_date': r'\[Registered Date\]\s*(.+)',
            'name_servers': 'p\. \[Name Server\]\s*(.+)',  # list of name servers
            'updated_date':  '\[Last Update\]\s?(.+)',
            'status': '\[State\]\s*(.+)',  # list of statuses
        }
    
        def __init__(self, domain, text):
            if 'No match!!' in text:
                raise PywhoisError(text)
            else:
                WhoisEntry.__init__(self, domain, text, self.regex)
    
[/code]

whois 情報が英語で表記されている事を前提としていますので、`g. [Organization]` のみを抽出しています。ところで、JPRS の
whois サーバではドメイン名の末尾に `/e` を付けると whois 情報を英語表記で返してくれます。

[code]

    $ whois -h whois.jprs.jp yahoo.co.jp/e
    Domain Information:
    a. [Domain Name]                YAHOO.CO.JP
    g. [Organization]               Yahoo Japan Corporation
    l. [Organization Type]          Corporation
    m. [Administrative Contact]     HT46858JP
    n. [Technical Contact]          KM56800JP
    p. [Name Server]                ns01.yahoo.co.jp
    p. [Name Server]                ns02.yahoo.co.jp
    p. [Name Server]                ns11.yahoo.co.jp
    p. [Name Server]                ns12.yahoo.co.jp
    s. [Signing Key]                
    [State]                         Connected (2021/09/30)
    [Registered Date]               2019/09/27
    [Connected Date]                2019/09/27
    [Last Update]                   2020/10/01 01:02:24 (JST)
    
[/code]

こちらを使います。

[code]

    import whois
    
    query = 'yahoo.co.jp'
    result = whois.NICClient().whois_lookup({
      'whoishost': 'whois.jprs.jp'
    }, query + '/e', 0)
    
    print(whois.parser.WhoisJp(query, result))
    
[/code]

#### 実行結果

[code]

    {
      "domain_name": "YAHOO.CO.JP",
      "registrant_org": "Yahoo Japan Corporation",
      "creation_date": "2019-09-27 00:00:00",
      "name_servers": [
        "ns01.yahoo.co.jp",
        "ns02.yahoo.co.jp",
        "ns11.yahoo.co.jp",
        "ns12.yahoo.co.jp"
      ],
      "updated_date": "2020/10/01 01:02:24 (JST)",
      "status": "Connected (2021/09/30)"
    }
    
[/code]


CC BY-SA 4.0
2021-07-08T06:37:35.083
78044
2021-07-08T06:42:59.577
2021-07-08T06:42:59.577
47127
47127
78039
answer