8.2 python - ウェブスクレイピング - request

 
8.2.1 request
8.2.2 取得してみる

8.2.1 request

 request というライブラリ(?)が使えるようなので、使ってみたいと思います。

import requests
 でいきなり

Traceback (most recent call last):
  File "./linkcheck.py", line 5, in <module>
    import request
ModuleNotFoundError: No module named 'request'
 というエラーが出るので、つまり request がインストールされていないのだな・・・と。  pip でインストールする方法はあるのでしょうが、できれば ports でインストールしたい。
/usr/ports/security/py-requests-credssp
 っていうのがあるのですがこれをインストールしたら request がインストールされるのでしょうか?  と思ったら

> cd /usr/ports/security/py-requests-credssp
> make
Makefile:22: *** 分離記号を欠いています.  中止.
 ですって。  仕方ない。pip でインストールしてみます。

> pip install request
  Downloading https://files.pythonhosted.org/packages/b8/13/b88a65f14470f3e17d72a1a930f173b36717c211685dbbadfc2e5ba21303/request-1.0.2.tar.gz

・・・略・・・

  Running setup.py install for request ... done
Successfully installed get-1.0.3 post-1.0.2 public-1.0.3 query-string-1.0.2 request-1.0.2
You are using pip version 9.0.3, however version 10.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
 最後の方のメッセージが気になりますがとりあえず置いておきます。

8.2.2 取得してみる

 参考サイトを真似て、ソースを書いて取得してみました。

#!/usr/local/bin/python3
# -*- coding: utf-8 -*-

import sys
import requests

argv = sys.argv
argc = len(argv)

if (argc < 2):
    print("チェック対象の URL が指定されていません")
    exit()

url = sys.argv[1];

r = requests.get(url)
print(r.content)
 linkcheck.py というソース名で実行権限をつけて実行してみました。

> ./linkcheck.py https://freebsd.sing.ne.jp/lang/python/
 これは、https のチェックでエラーになるようです。  エラーメッセージのみ掲載するとこんな感じです。

  File "/usr/local/lib/python3.6/site-packages/requests/adapters.py", line 504, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='freebsd.sing.ne.jp', port=443): Max retries exceeded with url: /lang/python/ (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",),))
 http であればエラーとはならず、取得できました。

> ./linkcheck.py http://freebsd.sing.ne.jp/lang/python/
 日本語はエンコードした形式で表示されるようです。