feapder
feapder copied to clipboard
分布式爬虫启动爬虫之后如何手动添加任务
请问大佬,我像这样启动一个爬虫之后,当出现“爬虫不自动结束, 等待下一轮任务...”之后,能否手动添加任务,该如何添加呢
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()
请问大佬,我像这样启动一个爬虫之后,当出现“爬虫不自动结束, 等待下一轮任务...”之后,能否手动添加任务,该如何添加呢
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 = 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动态添加新的任务是吗
请问大佬,我像这样启动一个爬虫之后,当出现“爬虫不自动结束, 等待下一轮任务...”之后,能否手动添加任务,该如何添加呢 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里塞任务也行
请问大佬,我像这样启动一个爬虫之后,当出现“爬虫不自动结束, 等待下一轮任务...”之后,能否手动添加任务,该如何添加呢 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里塞任务也行
好的,非常感谢