Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python3,Urllib3:对单个站点的快速服务器友好请求,大约100000个请求?_Python 3.x_Urllib3 - Fatal编程技术网

Python 3.x Python3,Urllib3:对单个站点的快速服务器友好请求,大约100000个请求?

Python 3.x Python3,Urllib3:对单个站点的快速服务器友好请求,大约100000个请求?,python-3.x,urllib3,Python 3.x,Urllib3,我试图通过web API获取整个旧Bailey在线存档的子集 我的问题是,我的实现不仅速度慢,而且服务器相当迅速地停止为我的请求提供服务(大约10分钟) 目前,我将urllib3的开发版本用作: import urllib3 retry = urllib3.util.Retry(total=1000, read=200, connect=200, backoff_factor=0.5) timeout = urllib3.util.Timeout(connect=2.0, read=4.0) h

我试图通过web API获取整个旧Bailey在线存档的子集

我的问题是,我的实现不仅速度慢,而且服务器相当迅速地停止为我的请求提供服务(大约10分钟)

目前,我将urllib3的开发版本用作:

import urllib3
retry = urllib3.util.Retry(total=1000, read=200, connect=200, backoff_factor=0.5)
timeout = urllib3.util.Timeout(connect=2.0, read=4.0)
http=urllib3.PoolManager(retry=retry, timeout=timeout, maxsize=10)
然后我用这个http池运行所有请求。我选择的数字相当荒谬,但最好的是8(

每年,我需要在243年内针对不同的场景提出70个并发请求。 我曾在一年内同时使用@shazow的workerpool(根据修改为与python3.4一起使用),多线程年,但效果也不太好。主要原因是服务器超时和我的无知

DNS查找是否有明显的延迟?我不能使用Ip,因为域是apache虚拟主机(或者我可以吗?)


Soo.真正的问题是:我如何才能从同一台服务器上“很好地”及时地下载数十万次?我仍然认为这需要一天左右的时间8)

听起来服务器可能会因为太频繁地发出太多请求而限制/禁止您的IP

首先,我建议检查域上的robots.txt,看看是否有关于自动请求频率的指导。如果没有,你可以要求网站所有者建议如何最好地抓取网站。否则,您可能需要通过实验确定速率限制

要限制您的请求,您可以使用类似.RateLimiter*()的内容。它看起来像这样:

from apiclient import RateLimiter
from urllib3 import PoolManager

lock = RateLimiter(max_messages=30, every_seconds=60)
http = PoolManager(...)
...

for url in crawl_list:
    lock.acquire()
    r = http.request(...)
你可以做的另一件事是抓取网站的缓存版本,如果可以通过Google或archive.org获得的话


[*]免责声明:我很久以前也写过apiclient。它没有很好的记录。我怀疑如果您发现缺少其他类似的模块,您可以使用这些模块,但是源代码应该很容易理解和扩展。

No robots.txt,也不在父站点上。让apiclient更好地与python3.4一起工作主要是urllib->urllib.parse。应该很容易。。。只有轻微的成功改变了周围的数字。