Pythonでgrabを用いてGET リクエストを作成し情報を取得する

Pythonでgrabを用いてGET リクエストを作成し情報を取得してみます。

今回はgrabを用います。このライブラリ・モジュールは、Pythonの標準ライブラリではありませんので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.6.8」を使用しています。(Windows10)(pythonランチャーでの確認)

■grabを用いてGET リクエストを作成し情報を取得する

では、早速grabを用いてGET リクエストを作成し情報を取得するスクリプトを書いていきます。

■コード

from grab import Grab
g = Grab(transport='urllib3')
resp = g.go('https://www.yahoo.co.jp/')

print(resp.unicode_body())

今回は「from import」でgrabモジュールのGrabを呼び出します。その後、「g = Grab()」でGrabインスタンスを作成します。作成しますが、括弧内に引数,パラメータとして、「transport=’urllib3’」を渡します。これでurllib3というネットワーク ライブラリを用いてネットワーク リクエストを実行し、ネットワーク レスポンスを取得することができます。なお、現在、Grabはurllib3のネットワーク ライブラリのみをサポートしていますので、引数,パラメータとしてこのライブラリを渡さないと、下記のエラーが発生します。

Traceback (most recent call last):
  File "C:\Users\user_\AppData\Roaming\Python\Python36\site-packages\grab\base.py", line 267, in setup_transport
    cls = TRANSPORT_CACHE[(mod_path, cls_name)]
KeyError: ('grab.transport.curl', 'CurlTransport')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "grab_get.py", line 4, in 
    resp = g.go('https://www.yahoo.co.jp/')
  File "C:\Users\user_\AppData\Roaming\Python\Python36\site-packages\grab\base.py", line 382, in go
    return self.request(url=url, **kwargs)
  File "C:\Users\user_\AppData\Roaming\Python\Python36\site-packages\grab\base.py", line 454, in request
    self.prepare_request(**kwargs)
  File "C:\Users\user_\AppData\Roaming\Python\Python36\site-packages\grab\base.py", line 402, in prepare_request
    self.setup_transport(self.transport_param)
  File "C:\Users\user_\AppData\Roaming\Python\Python36\site-packages\grab\base.py", line 269, in setup_transport
    mod = __import__(mod_path, globals(), locals(), ['foo'])
  File "C:\Users\user_\AppData\Roaming\Python\Python36\site-packages\grab\transport\curl.py", line 22, in 
    import pycurl
ModuleNotFoundError: No module named 'pycurl'

括弧内に引数,パラメータを渡したあと、respという変数を定義し、g.go()を用います。括弧内には、情報を取得するURLを渡します。今回は「Yahoo!Japan(https://www.yahoo.co.jp/)」を指定しています。これでWebサーバから取り出された情報がresp変数に格納されます。

その後、応答コンテンツ(resp変数)をUnicodeとして取得するために、resp.unicode_body()を用います。これで文字セットを自動的に検出し、それをUnicodeに変換します。変換後、変換された応答コンテンツをprint()で出力します。

■実行・検証

このスクリプトを「grab_get.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

実行してみると、grabを用いてGET リクエストを作成し指定したURLから情報を取得し、取得した情報を出力させることができました。

コメント

タイトルとURLをコピーしました