feapder icon indicating copy to clipboard operation
feapder copied to clipboard

分布式爬虫启动爬虫之后如何手动添加任务

Open shengtaovvv opened this issue 3 years ago • 4 comments

请问大佬,我像这样启动一个爬虫之后,当出现“爬虫不自动结束, 等待下一轮任务...”之后,能否手动添加任务,该如何添加呢

spider = test_spider.TestSpider(redis_key=redis_key, thread_count=2, delete_keys="feapder:test_spider__0*", auto_stop_when_spider_done=False) spider.start()

shengtaovvv avatar Aug 04 '21 07:08 shengtaovvv

请问大佬,我像这样启动一个爬虫之后,当出现“爬虫不自动结束, 等待下一轮任务...”之后,能否手动添加任务,该如何添加呢

spider = test_spider.TestSpider(redis_key=redis_key, thread_count=2, delete_keys="feapder:test_spider__0*", auto_stop_when_spider_done=False) spider.start()

import feapder
from feapder.db.mysqldb import MysqlDB


class SpiderTest(feapder.Spider):
    def start_requests(self):
        # TODO 下发任务

    def parser(self, request, response):
        print(response)


if __name__ == "__main__":
    spider = SpiderTest(
        redis_key="feapder:spider_test", min_task_count=100, auto_stop_when_spider_done=False
    )
    # 监控任务,若任务数小于min_task_count,则调用start_requests下发一批,注start_requests产生的任务会一次下发完,然后任务队列中少于100条任务时,框架会再次调用start_requests下发一批
    spider.start_monitor_task()
    # 采集
    # spider.start()

Boris-code avatar Aug 04 '21 08:08 Boris-code

请问大佬,我像这样启动一个爬虫之后,当出现“爬虫不自动结束, 等待下一轮任务...”之后,能否手动添加任务,该如何添加呢 spider = test_spider.TestSpider(redis_key=redis_key, thread_count=2, delete_keys="feapder:test_spider__0*", auto_stop_when_spider_done=False) spider.start()

import feapder
from feapder.db.mysqldb import MysqlDB


class SpiderTest(feapder.Spider):
    def start_requests(self):
        # TODO 下发任务

    def parser(self, request, response):
        print(response)


if __name__ == "__main__":
    spider = SpiderTest(
        redis_key="feapder:spider_test", min_task_count=100, auto_stop_when_spider_done=False
    )
    # 监控任务,若任务数小于min_task_count,则调用start_requests下发一批,注start_requests产生的任务会一次下发完,然后任务队列中少于100条任务时,框架会再次调用start_requests下发一批
    spider.start_monitor_task()
    # 采集
    # spider.start()

也就是说,spider.start_monitor_task()负责调用start_requests下发任务,spider.start()负责进行采集解析。但是执行spider.start()之后,在程序采集运行的过程中,只能通过start_monitor_task()持续下发写在start_requests中的任务,无法通过参数控制是否停止下发、下发几次、重新下发以及重写start_requests动态添加新的任务是吗

shengtaovvv avatar Aug 04 '21 08:08 shengtaovvv

请问大佬,我像这样启动一个爬虫之后,当出现“爬虫不自动结束, 等待下一轮任务...”之后,能否手动添加任务,该如何添加呢 spider = test_spider.TestSpider(redis_key=redis_key, thread_count=2, delete_keys="feapder:test_spider__0*", auto_stop_when_spider_done=False) spider.start()

import feapder
from feapder.db.mysqldb import MysqlDB


class SpiderTest(feapder.Spider):
    def start_requests(self):
        # TODO 下发任务

    def parser(self, request, response):
        print(response)


if __name__ == "__main__":
    spider = SpiderTest(
        redis_key="feapder:spider_test", min_task_count=100, auto_stop_when_spider_done=False
    )
    # 监控任务,若任务数小于min_task_count,则调用start_requests下发一批,注start_requests产生的任务会一次下发完,然后任务队列中少于100条任务时,框架会再次调用start_requests下发一批
    spider.start_monitor_task()
    # 采集
    # spider.start()

也就是说,spider.start_monitor_task()负责调用start_requests下发任务,spider.start()负责进行采集解析。但是执行spider.start()之后,在程序采集运行的过程中,只能通过start_monitor_task()持续下发写在start_requests中的任务,无法通过参数控制是否停止下发、下发几次、重新下发以及重写start_requests动态添加新的任务是吗

没现成的参数,每个人的需求不一样,可以写代码控制。你直接往redis里塞任务也行

Boris-code avatar Aug 04 '21 08:08 Boris-code

请问大佬,我像这样启动一个爬虫之后,当出现“爬虫不自动结束, 等待下一轮任务...”之后,能否手动添加任务,该如何添加呢 spider = test_spider.TestSpider(redis_key=redis_key, thread_count=2, delete_keys="feapder:test_spider__0*", auto_stop_when_spider_done=False) spider.start()

import feapder
from feapder.db.mysqldb import MysqlDB


class SpiderTest(feapder.Spider):
    def start_requests(self):
        # TODO 下发任务

    def parser(self, request, response):
        print(response)


if __name__ == "__main__":
    spider = SpiderTest(
        redis_key="feapder:spider_test", min_task_count=100, auto_stop_when_spider_done=False
    )
    # 监控任务,若任务数小于min_task_count,则调用start_requests下发一批,注start_requests产生的任务会一次下发完,然后任务队列中少于100条任务时,框架会再次调用start_requests下发一批
    spider.start_monitor_task()
    # 采集
    # spider.start()

也就是说,spider.start_monitor_task()负责调用start_requests下发任务,spider.start()负责进行采集解析。但是执行spider.start()之后,在程序采集运行的过程中,只能通过start_monitor_task()持续下发写在start_requests中的任务,无法通过参数控制是否停止下发、下发几次、重新下发以及重写start_requests动态添加新的任务是吗

没现成的参数,每个人的需求不一样,可以写代码控制。你直接往redis里塞任务也行

好的,非常感谢

shengtaovvv avatar Aug 04 '21 08:08 shengtaovvv