人生不得已——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)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本内容为《用Python写网络爬虫》书籍内容,有兴趣的读者可以购买本书,本章的代码皆可在Python3中运行。为了...
    海人为记阅读 2,444评论 0赞 5
  • 书名:《用python写网络爬虫》,通过阅读并记录去学习,如果文章有什么错误的地方还希望指正本文参考了http:/...
    枫灬叶阅读 3,049评论 2赞 2
  • 分析网站 识别对方使用技术-builtwith模块 寻找网站所有者 import whoisprint whois...
    行走的老者阅读 803评论 0赞 0
  • 爬虫是一个比较容易上手的技术,也许花5分钟看一篇文档就能爬取单个网页上的数据。但对于大规模爬虫,完全就是另一回事,...
    真依然很拉风阅读 9,907评论 5赞 114
  • 1、对于造型能力不太好的小伙伴来说,首先得找来一张美女原图 哈哈,有木有发现,黑人小姐姐也蛮美的,(此图不做商业用...
    木子林夕梦阅读 511评论 3赞 4

友情链接更多精彩内容