让你的爬虫像人一样打卡上下班。。。 无合适标签 原创


前期接到的奇葩需求,要让爬虫像人一样打卡工作,工作还得有快有慢,wtf,想了半天,写个装饰器算了,基本能满足需求,大家还有更好的方法吗,求指教。 

目标网站需账号访问,账号收费(贵,冷门),访问频繁直接封号。

def jobstatus(func):
    '''
    爬虫的工作状态装饰器
    周一至周五
    09:00-18:00
    小时数是偶数
    每分钟请求30次左右
    小时数是奇数
    每分钟请求10次左右
    其余时间等待
    '''

    @wraps(func)
    def inner(self, response):
        while 1:
            # 开始时间
            time_on = datetime.strptime(str(datetime.now().date()) + '09:00', '%Y-%m-%d%H:%M')
            # 结束时间
            time_off = datetime.strptime(str(datetime.now().date()) + '18:00', '%Y-%m-%d%H:%M')
            # 当前星期
            week_now = datetime.now().weekday()
            # 当前时间
            time_now = datetime.now()
            # 当前小时
            hour_now = datetime.now().hour
            # 判断当前星期是否为工作日
            if week_now in list(range(5)):
                # 判断当前时间是否为工作时间
                if time_on <= time_now <= time_off:
                    if hour_now % 2 == 0
                        time.sleep(random.choice([1, 2]))
                        return func(self, response)
                    else
                        time.sleep(random.choice([3, 4]))
                        return func(self, response)
                else:
                    time.sleep(3600)
            else
                time.sleep(86400)

    return inner


最新回复 (11)
  • 0 12
    其实大家说的我都想到过,但是我还是用了最懒的
  • 陈祥安 2019-11-27
    0 11
    python只写主逻辑,然后shell写这些时间的判断就行了
  • 陈祥安 2019-11-27
    0 10
    你直接用linux的定时任务 跑不就完事了
  • v5yangzai 2019-11-26
    0 9
    使用APScheduler可以设置定时任务
  • 0 8
    感觉有现成的就不想自己写了,太懒了。。。
    有没有比自己写调度更简单方便的啊
  • 0 7
    haoyougen 楼上老哥流弊,能写个教程让我等菜鸟观摩观摩不?
    流弊个锤子,我就是个憨憨,也就说说了,动手动不了,属实菜鸡
  • haoyougen 2019-11-26
    0 6
    楼上老哥流弊,能写个教程让我等菜鸟观摩观摩不?
  • 0 5
    只开一个线程没必要用scrapy啊,这种细化的需求还是自己写个调度系统比较好
  • sfhfpc 2019-11-26
    3 4
    编一个定时调度平台不香吗?

    如果文件数不多,Linux Shell 更适合

    文件数多,还要做监控和扩展之类的话,用 Flask 写一个服务,将 Apscheduler 和 Scrapyd 继承到服务中,这样就是一个完整的爬虫项目部署和调度管理平台了。跳槽还加分呢!
  • 0 3
    1、账号特贵,只有一个
    2、用的scrapy,只开一个线程
  • 非牛 2019-11-26
    1 2
    请问你们考虑过爬虫的感受吗?还有,应该细化到账号或者进程或者进程吧?比如你起了多个爬虫
返回