質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

意見交換

クローズ

6回答

1145閲覧

Pythonでスクレイピングするときのrequestsライブラリの取得時間について

pheasant

総合スコア5

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2024/05/13 11:57

編集2024/05/13 13:36

0

1

テーマ

requestsライブラリの取得時間について

背景

※プログラミング初学者なので見当違いのことを議論していたら、申し訳ありません。
requestsライブラリのget関数でサーバから情報を取得するのかかる時間について議論させてください。
当方スクレイピングをしてサイトからデータを抽出したりしています。
その際にpythonでrequests.get()関数を使用しているのですが、使用するPCや環境によって速度が著しく異なるため、疑問に思い今回の質問を作成しています。

有識者の皆様には、このget()関数の情報取得時間に影響のある要因を教えていただきたいです。

まず、私は2つの環境を構築して下記プログラムを流して確認しました。
その結果①と②で下記のように速度で7倍ほど差が出ました。
①time_elapsed: 0.433486
②time_elapsed: 0.065314
この結果は繰り返したり、何度やっても同じ傾向で再現性があることは確認しています。

このような差が生まれる要因がわからず、スペックの高い①のPC環境で情報取得速度を上げたいというのが今回の質問の結論です。博識な皆様のお力添えで私の質問の手助けをしていただきたいです。よろしくお願いいたします。他に知りたい情報などありましたら、ご連絡いただければ回答いたします。

プログラム

Python

1import requests 2import time 3import os 4 5url = "URLを記載" 6res = requests.get(url) 7time_elapsed = res.elapsed.total_seconds() 8print('time_elapsed:', time_elapsed) 9

実施環境

接続先のルーターは下記環境一緒
PC環境①
使用機器:自作PC
CPU:AMD Ryzen7 3700X
ツール:Jupyterlab Desktop Version 4.1.8-1
Jupyterlab Version 3.6.7
Python:Python 3.11.7
ネット接続方法:有線

PC環境②
使用機器:ノートPC
CPU:Intel Core i5 8thGen
ツール:Jupyterlab Version 3.1.13-1
Python:Python 3.8.12
ネット接続方法:Wifi

補足

PC環境①でも以前はPC環境②と同じレベルの速度でサーバー情報の取得ができていました。
Jupyterlabのアップデートなどをしたところ今回のような遅い結果になるようになりました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答6

#1

otn

総合スコア85766

投稿2024/05/13 13:27

記述が無いのですが、
・連続して繰り返し何度やっても同じ傾向
・ネットワーク環境は同一(接続先ルーター、Wifiか有線LANか、など)
でしょうか?

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

pheasant

総合スコア5

投稿2024/05/13 13:38

#1 otnさん
コメントありがとうございます。
・再現性がある現象で連続で繰り返しても同じような結果が返ってきます。
・ネットワーク環境は同一のルーターを使用していますが、有線かWifiの違いはあります。詳細は追記しておきました。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

otn

総合スコア85766

投稿2024/05/13 13:53

編集2024/05/13 15:19

再現性がある現象で連続で繰り返しても同じような結果が返ってきます。

詳細に聞き損ねましたが、6-8行目を9行目以降に繰り返しコピペして繰り返しても(または6-8行をループで10回くらい繰り返し実行しても)、ほぼ同じ時間が表示されると言うことですよね。

ダウンロード速度測定サイトで出る速度は両方ともそれなりでしょうか?(有線LANが低い速度でリンクしてしまってないかの確認)

別のサイトでも同傾向でしょうか?

ping ホスト名したとき、IPv4 IPv6どちらのアドレスでpingしていますか?(片方がIPv4で他方がIPv6であるとかの確認)

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#4

can110

総合スコア38339

投稿2024/05/14 00:37

Python Requests module performance after 3.11.4にてPythonバージョン違いによる速度低下が報告されています。
明確な原因までは分かりませんが、上記でも指摘されているOpenSSL 3.0 performance issue: SSLContext.set_default_verify_paths / load_verify_locations about 5x slower #95031が関連しているかもしれません。
もし実運用コードで同じ接続先から複数回getするような状況であればsessionを利用すると速度改善するかもしれません。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#5

otn

総合スコア85766

投稿2024/05/14 00:41

なんと!Python自体の問題だったのですね。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#6

pheasant

総合スコア5

投稿2024/05/14 15:02

編集2024/05/14 15:02

#4 can110さん
Pythonのバージョンが原因ということで試してみたところ下記のような結果になりました。
Python 3.9.7:time_elapsed: 0.045591
以前の結果に戻って助かりました。早急の解決ありがとうございました。

#1 otnさん
いろいろと助言を頂きありがとうございました。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問