python百度网盘限速_人生不得已——Python爬虫 限速

下载限速

如果我们爬取网站的速度过快,就会面临被 封禁或是造成服务器过载的风险。

为了降低这些风险, 我们可以在两次下载之间添加延时,从而对爬虫限速。

方法: Throttle 类记录了每个域名上次访问的时间,如果当前时间距离上次

访问时间小于指定延时,则执行睡眠操作。 我们可以在每次下载之前调用

Throttle 对爬虫进行限速。

Throttle 类的实现

import urllib.parse

import time

import datetime

import re

import urllib.request

class Throttle:

def __init__(self, delay):

# 访问同域名时需要的间隔时间

self.delay = delay

# key:netloc,value:lastTime.记录每个域名的上一次访问的时间戳

self.domains = {}

# 计算需要的等待时间,并执行等待

def wait(self, url):

if self.delay <= 0:

print('delay ='+self.delay)

return

domain = urllib.parse.urlparse(url).netloc

lastTime = self.domains.get(domain)

if lastTime is not None:

# 计算等待时间

wait_sec = self.delay - (datetime.datetime.now() - lastTime).seconds

if wait_sec > 0:

time.sleep(wait_sec)

self.domains[domain] = datetime.datetime.now()

使用方式

在爬虫函数中

t = Throttle(0.5)

#在循环内

t.wait(url)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值