Requestsモジュールを使用して単純なWebクローラーをプログラムしようとしていますが、その-default-keep-alive機能を無効にする方法を知りたいです。
私は使ってみました:
s = requests.session()
s.config['keep_alive'] = False
ただし、セッションオブジェクトに属性「config」がないというエラーが表示されます。新しいバージョンで変更されたと思いますが、公式ドキュメントでその方法を見つけることができないようです。
実は、特定のWebサイトでクローラーを実行すると、最大5ページしか取得できず、無限にループし続けるので、キープアライブ機能と関係があると思いました。
PS:リクエストはWebクローラーに適したモジュールですか?もっと適応したものはありますか?
ありがとうございました !
よくわかりませんが、リクエストを使用してGETリクエストを送信するときに、HTTPヘッダーとして{"Connection": "close"}を渡してみてください。これにより、サーバーが応答を返すとすぐに接続が閉じられます。
>>> headers = {"Connection": "close"}
>>> r = requests.get('https://example.xcom', headers=headers)
@praveenが示唆したように、HTTP/1.1
ヘッダーConnection: close
を使用して、応答の完了後に接続を閉じる必要があることをサーバーに通知することが期待されています。
これが RFC 2616 でどのように記述されているかです:
HTTP/1.1は、応答の完了後に接続が閉じられることを送信者が通知するための「閉じる」接続オプションを定義します。例えば、
Connection: close
要求または応答ヘッダーフィールドのいずれかで、現在の要求/応答が完了した後、接続が「永続的」(セクション8.1)と見なされるべきではないことを示します。
持続的接続をサポートしないHTTP/1.1アプリケーションは、すべてのメッセージに「閉じる」接続オプションを含める必要があります。