搬砖的手微微颤抖 发表于 2019-11-26 09:49:03

让你的爬虫像人一样打卡上下班。。。


前期接到的奇葩需求,要让爬虫像人一样打卡工作,工作还得有快有慢,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())
                        return func(self, response)
                    else
                        time.sleep(random.choice())
                        return func(self, response)
                else:
                    time.sleep(3600)
            else
                time.sleep(86400)

    return inner


非牛 发表于 2019-11-26 09:59:11

请问你们考虑过爬虫的感受吗?还有,应该细化到账号或者进程或者进程吧?比如你起了多个爬虫

搬砖的手微微颤抖 发表于 2019-11-26 10:13:30

1、账号特贵,只有一个
2、用的scrapy,只开一个线程

sfhfpc 发表于 2019-11-26 10:55:20

编一个定时调度平台不香吗?

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

文件数多,还要做监控和扩展之类的话,用 Flask 写一个服务,将 Apscheduler 和 Scrapyd 继承到服务中,这样就是一个完整的爬虫项目部署和调度管理平台了。跳槽还加分呢!

路过的憨憨 发表于 2019-11-26 11:10:31

只开一个线程没必要用scrapy啊,这种细化的需求还是自己写个调度系统比较好

haoyougen 发表于 2019-11-26 11:30:08

楼上老哥流弊,能写个教程让我等菜鸟观摩观摩不?

路过的憨憨 发表于 2019-11-26 13:47:30

流弊个锤子,我就是个憨憨,也就说说了,动手动不了,属实菜鸡

搬砖的手微微颤抖 发表于 2019-11-26 13:51:18

感觉有现成的就不想自己写了,太懒了。。。
有没有比自己写调度更简单方便的啊

v5yangzai 发表于 2019-11-26 17:52:02

使用APScheduler可以设置定时任务

陈祥安 发表于 2019-11-27 11:04:07

你直接用linux的定时任务 跑不就完事了
页: [1] 2
查看完整版本: 让你的爬虫像人一样打卡上下班。。。