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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python

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

Q&A

解決済

1回答

4351閲覧

クローリング時の、time.sleepの挿入箇所について

Prometheus

総合スコア10

Python

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

0グッド

0クリップ

投稿2020/07/29 04:07

前提・実現したいこと

time.sleep()関数の挿入箇所について、教えて頂きたいです。

具体的には、time.sleep()関数は、指定したURLのページの情報を取得する前(つまり、requests.get()関数の前)に、記述するべきだと思ったのですが、

https://techacademy.jp/magazine/34387

などを読んでみても、requests.get()関数の後に、記述されています。
両者に処理速度の違いなどがあれば、教えて下さい。

Python

1......requests.get()関数の前に記述 2 3base = 'https://hogehoge' 4for i in range(5): 5 url = base + str(i) 6 7 time.sleep(1) 8 9 html = requests.get(url) 10 soup = BeautifulSoup(html.content, 'lxml') 11 12...... 13

Python

1......requests.get()関数の後に記述 2 3base = 'https://hogehoge' 4for i in range(5): 5 url = base + str(i) 6 7 html = requests.get(url) 8 9 time.sleep(1) 10 11 soup = BeautifulSoup(html.content, 'lxml') 12 13...... 14

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

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

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

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

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

guest

回答1

0

ベストアンサー

time.sleep()関数は、指定したURLのページの情報を取得する前
(つまり、requests.get()関数の前)に、記述するべきだと思ったのですが

なぜそう考えましたか?

sleep() の目的

sleep() する目的にも色々あります

リンク先の記事は Selenium を使っており、
フォームの送信を行った後、次のページのレンダリングが完了するのを待つために
sleep() している可能性があります

python

1# coding: utf-8 2 3import time 4 5from selenium import webdriver 6 7from bs4 import BeautifulSoup 8 9url = "http://qiita.com" 10 11driver = webdriver.Chrome("chromedriver.exe") 12 13# ページにアクセス 14 15driver.get(url) 16 17# 検索ボックスを見つけてキーワードを検索 18 19search = driver.find_element_by_class_name("st-Header_searchInput") 20 21search.send_keys("Python") 22 23search.submit() 24 25time.sleep(5) 26 27# 検索先のページのHTMLを取得 28 29html = driver.page_source.encode('utf-8')

sleep() をどこに挿入すべきか

僕なら sleep() はループの一番最後に挿入します

成功したときの実行速度に差はありませんが
sleep() の後で何らかのエラーが発生したとき
その結果を得るまでの時間をロスすることになります

1 秒であればそれほど大きな違いではないかもしれませんが、
開発時は何度も実行するので、それなりに生産性に影響が出ます

投稿2020/07/29 04:38

y_shinoda

総合スコア3272

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

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

Prometheus

2020/07/29 05:15

回答ありがとうございます。 挿入箇所は、sleep()の使用用途の違いなども関係していたのですね。 ご指摘の通り、ループ処理の最後に記述しようと思います。 sleep()の挿入箇所を、requests.get(url)の前にするべきだと考えた理由は、サーバーに負担を掛けないために、get(url)によってurl先にジャンプする直前に、待機時間を設けようとしたからです。しかしよく考えれば、今回の場合は、sleep()はループ処理のどこに記述しても良さそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問