52498


<https://grid.cryptact.com/gridhelp/coins>  
の情報を取得しようと思い、以下のようなコードを書きました。

[code]

    from bs4 import BeautifulSoup
    import urllib.request
    import gzip
    
    url = 'https://grid.cryptact.com/gridhelp/coins'
    req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'})
    html = gzip.decompress(urllib.request.urlopen(req).read())
    soup = BeautifulSoup(html, "html.parser")
    print(soup.body.text)
    
[/code]

しかし、これを実行すると

[code]

      var ua = window.navigator.userAgent.toLowerCase();
      if(ua.indexOf('msie')!=-1|| ua.indexOf('trident')!=-1) document.location='https://support.cryptact.com/hc/ja/articles/360001678611'
    
[/code]

となります。

ユーザーエージェントにmsie、tridentどちらも記述が無いものを選んだのに何故このような結果になるのでしょうか？

また、どうすれば正常にこのページの情報を取得できるのでしょうか？


CC BY-SA 4.0
2019-02-02T04:31:19.860
52497
2019-02-02T06:23:37.567
2019-02-02T04:52:54.523
25791
25791
question
python python3
urllibでWebページを正常に取得できない


ユーザーエージェントがどうかではなく、実際に`body`の中に存在する`text`が、その文字列です。  
その意味では、ページの情報は取得出来ていると思います。  
ページの実態が、ほぼJavaScriptの指定です。

urllibをどうするかはいったん脇に置いておいて、Selenium/WebDriverでアクセスしてみる、  
等でしょうか。  
[Python Webスクレイピング
テクニック集「取得できない値は無い」JavaScript対応@追記あり6/12](https://qiita.com/Azunyan1111/items/b161b998790b1db2ff7a#%E5%8B%95%E4%BD%9C%E3%81%99%E3%82%8B%E3%82%B3%E3%83%BC%E3%83%89-2)  
[JavaScriptのページをスクレイピング・クローリングするならPython＋Seleniumがオススメ](https://shimi-
dai.com/python-selenium-crawler-with-javascript/)  
[Seleniumのインストール方法とWebブラウザ操作の自動化](https://shimi-dai.com/python-selenium-for-
beginner/)

ちなみに、上記質問のまま最後の `print(soup.body.text)` を `print(soup.body)` に変えると、  
以下になりました。

[code]

    <body>
    <div id="container" style="height: 100%"></div>
    <script src="https://www.google.com/recaptcha/api.js"></script>
    <script>
          var ua = window.navigator.userAgent.toLowerCase();
          if(ua.indexOf('msie')!=-1|| ua.indexOf('trident')!=-1) document.location='https://support.cryptact.com/hc/ja/articles/360001678611'
      </script>
    <script src="/runtime.088a4f2a.js" type="text/javascript"></script><script src="/vendor.e17994d2.js" type="text/javascript"></script><script src="/app.6efc6897.js" type="text/javascript"></script></body>
    
[/code]


CC BY-SA 4.0
2019-02-02T05:58:36.027
52498
2019-02-02T06:23:37.567
2019-02-02T06:23:37.567
26370
26370
52497
answer