2015-08-20 62 views
0

所以每一秒,我做了一堆請求X網站的每一秒,以現在的標準urllib包像這樣(的requestreturns一個json):重新使用HTTP連接的Python 3

import urllib.request 
import threading, time 

def makerequests(): 
    request = urllib.request.Request('http://www.X.com/Y') 
    while True: 
     time.sleep(0.2) 
     response = urllib.request.urlopen(request) 
     data = json.loads(response.read().decode('utf-8')) 

for i in range(4): 
    t = threading.Thread(target=makerequests) 
    t.start() 

但是,因爲我在約500次請求後發出這麼多請求,網站將返回HTTPError 429: Too manyrequests。我想這可能會幫助,如果我重新使用初始TCP連接,但我注意到這是不可能與urllib包執行此操作。

所以我做了一些谷歌搜索,發現了以下軟件包可能會有所幫助:

  • Requests
  • http.client
  • socket

所以我有一個問題:哪一個最適合我的情況,有人可以展示其中任何一個示例(對於Python 3)?

+4

要回答你的問題'請求'(可能)是最好的 - 它處理保持自動活着。實際上可以幫助的是減少請求。 – mhawke

+3

如果網站是速率限制請求,那麼重新使用tcp連接可能不起作用。 – Alasdair

+0

我假定網站的系統管理員知道你在做什麼以及爲什麼。如果不重複循環,相同的請求可能會被視爲攻擊,您的IP將以黑名單結束。 –

回答

2

requests自動處理keep alive如果您使用會話。如果服務器是速率限制請求,這可能實際上不會幫助您,但requests也處理解析JSON,因此這是使用它的一個很好的理由。這裏是一個例子:

import requests 

s = requests.Session() 
while True: 
    time.sleep(0.2) 
    response = s.get('http://www.X.com/y') 
    data = response.json()