我正在使用Scrapy + Selenium来抓取Facebook朋友数据。我想编写一个程序,将2个用户名作为输入,以递归方式抓取其朋友列表,直到找到连接2个用户的链。我的蜘蛛可以登录,生成项目并将其发送到MongoDB(通过管道)。我有一个工作函数,可以查询Mongo以检查链是否存在并返回它。我对算法的看法:
登录过程只是一个创建Selenium实例,成功登录并返回webdriver实例的函数,该实例将进一步传递给Spider。
目前我还不了解如何组织QUEUE流程。我可以将单个用户名或列表传递到Spider中,但无法根据爬网的结果弄清楚如何将更多作业传递到同一个Spider中。
我为单个用户启动爬网,如下所示:
process = CrawlerProcess(config)
process.crawl(FacebookSpider, <username>, session)
process.start()
如何在不停止抓取程序的情况下(在完成一次爬网和处理完项目之后)向队列中添加新的用户名?还是方法应该是“等待蜘蛛完成工作”->“创建新任务”?
我已经尝试过浏览Scrapy文档,但是对于像我这样的新手来说,这是令人难以置信的。我尝试使用CrawlerRunner,但无法使其正常工作。