特定のURLセットをスキャンして、Pythonで「200OK」などのHTTPステータスコードを取得する必要があります。私は現在、これを行うためにurllibを使用しています。これを行うためのより速い方法はありますか?
Pythonコード
def get_status(url):
try:
return urllib.urlopen(url).getcode()
except StandardError :
return None
より幸せなステータスチェックのために私が作るカップルの発言。最初のヒントは、httpHEAD
メソッドを使用することです。これにより、サーバーはhttpヘッダー(ステータスコードを含む)のみを要求し、ページの本文も提供しません。
2番目のurllibは機能しますが、httpで実行したいほとんどすべてのことに対してはるかに優れたAPIを提供する素晴らしいRequestsライブラリを使用することをお勧めします。
最後に、geventsライブラリを使用して、各ヘッダーを非同期でダウンロードできるようにし、プロセス全体を大幅に高速化します。
おそらく、非ブロッキングの方法で並行して実行したいと思うでしょう。ここでイベントレットライブラリをチェックしてください:http://eventlet.net/。フロントページhttp://eventlet.net/#web-crawler-exampleから例を取得できます。
速度を上げるには、GRequestsを使用してURLを非同期で(一度に1つずつではなく)チェックしてみてください。
import grequests
urls = [
'http://www.heroku.com',
'http://tablib.org',
'http://httpbin.org',
'http://python-requests.org',
'http://kennethreitz.com'
]
rs = (grequests.get(u) for u in urls)
# For even faster status code checks, use the HEAD method instead of GET
# rs = (grequests.head(u) for u in urls)
for r in grequests.map(rs):
print r.status_code, r.url
200 http://www.heroku.com/
200 http://tablib.org/
200 http://httpbin.org/
200 http://docs.python-requests.org/en/latest/index.html
200 http://kennethreitz.com/
はいあります。
スレッドを使用します。コードをThreadクラスに入れ、結果をグローバルオブジェクトに格納します。スレッドの束を呼び出します。