如何动态地将作业添加到Scrapy / Selenium Spider?

时间:2019-10-17 20:18:36

标签: python selenium scrapy

我正在使用Scrapy + Selenium来抓取Facebook朋友数据。我想编写一个程序,将2个用户名作为输入,以递归方式抓取其朋友列表,直到找到连接2个用户的链。我的蜘蛛可以登录,生成项目并将其发送到MongoDB(通过管道)。我有一个工作函数,可以查询Mongo以检查链是否存在并返回它。我对算法的看法:

  1. 获取输入(2个用户名)
  2. 将2个用户放到抓取队列中
  3. Facebook登录
  4. 弹出队列并开始爬网
  5. 将其他所有项目发送到Mongo->检查是否找到链->否:将抓取的用户的朋友用户名放入QUEUE->弹出QUEUE。
  6. 一旦找到链->抓取+编写新链(如果找到)并弹出,直到QUEUE为空
  7. 返回所有找到的链条

登录过程只是一个创建Selenium实例,成功登录并返回webdriver实例的函数,该实例将进一步传递给Spider。

目前我还不了解如何组织QUEUE流程。我可以将单个用户名或列表传递到Spider中,但无法根据爬网的结果弄清楚如何将更多作业传递到同一个Spider中。

我为单个用户启动爬网,如下所示:

process = CrawlerProcess(config)
process.crawl(FacebookSpider, <username>, session)
process.start()

如何在不停止抓取程序的情况下(在完成一次爬网和处理完项目之后)向队列中添加新的用户名?还是方法应该是“等待蜘蛛完成工作”->“创建新任务”?

我已经尝试过浏览Scrapy文档,但是对于像我这样的新手来说,这是令人难以置信的。我尝试使用CrawlerRunner,但无法使其正常工作。

0 个答案:

没有答案