0

HTMLスクレイピングを行い、APIを使用してデータを取得するスクレイパーを作成しました。これは非常に長いコードであるため、ここには記載していません。ランダム スリープ メソッドを実装し、それをコード内で使用してスロットルを監視しました。しかし、このコードをオーバーランしないようにしたいので、3 ~ 4 時間実行してから息抜きをしてから、もう一度実行するというのが私の考えです。私は検索しようとしていたPythonでこのようなことを何もしていませんが、どこから始めればよいかよくわかりません。これに関するガイダンスがあれば素晴らしいでしょう。Python に特定のモジュールへのリンクがある場合は、非常に役立ちます。

また、これは関連していますか?このレベルの複雑さは必要ありませんか?

Python の Cron のようなスケジューラの提案はありますか?

すべてのスクレイピング タスクに関数があり、それらすべての関数を呼び出す main メソッドがあります。

4

2 に答える 2

1

開始した時間をメモして、何かを実行するたびに、指定された最大値を超えていないことを確認してください。このような何かがあなたを始めるはずです:

from datetime import datetime
MAX_SECONDS = 3600

# note the time you have started
start = datetime.now()

while True:
    current = datetime.now()
    diff = current-start
    if diff.seconds >= MAX_SECONDS:
        # break the loop after MAX_SECONDS
        break

    # MAX_SECONDS not exceeded, run more tasks
    scrape_some_more() 

日時モジュールのドキュメントへのリンクは次のとおりです。

于 2012-10-20T15:17:49.947 に答える
1

threading.Timerオブジェクトを使用して、時間を超えた後にメインスレッドへの割り込みシグナルをスケジュールできます。

import thread, threading

def longjob():
    try:
        # do your job
        while True:
            print '*', 
    except KeyboardInterrupt:
        # do your cleanup
        print 'ok, giving up'

def terminate():
    print 'sorry, pal'
    thread.interrupt_main()

time_limit = 5  # terminate in 5 seconds
threading.Timer(time_limit, terminate).start()
longjob()

これをcrontabに入れて、time_limit+2分ごとに実行します。

于 2012-10-20T16:03:26.840 に答える