Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何向Scrapy/Selenium爬行器动态添加作业?_Python_Selenium_Scrapy - Fatal编程技术网

Python 如何向Scrapy/Selenium爬行器动态添加作业?

Python 如何向Scrapy/Selenium爬行器动态添加作业?,python,selenium,scrapy,Python,Selenium,Scrapy,我正在使用Scrapy+Selenium来抓取Facebook好友数据。我想写一个程序,将2个用户名作为输入,递归地抓取他们的好友列表,直到找到连接这2个用户的链。我的spider可以登录、生成项目并将它们发送到MongoDB(通过管道)。我有一个工作函数,可以向Mongo进行查询,以检查链是否存在并返回它。我对算法的看法是: 获取输入(2个用户名) 将2个用户放入爬网队列 Facebook登录 弹出队列并开始爬网 一旦其他项目发送到Mongo->检查是否找到链->如果没有:将刮取的用户的好友用

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

  • 获取输入(2个用户名)
  • 将2个用户放入爬网队列
  • Facebook登录
  • 弹出队列并开始爬网
  • 一旦其他项目发送到Mongo->检查是否找到链->如果没有:将刮取的用户的好友用户名放入队列->弹出队列
  • 一旦找到链->爬网+写入新链(如果找到)并弹出,直到队列为空
  • 返回所有找到的链
  • 登录过程只是一个创建Selenium实例、成功登录并返回webdriver实例的函数,该实例将进一步传递到spider中

    目前我不明白如何组织排队过程。我可以将单个用户名或列表传递到爬行器中,但无法根据爬行的结果找出如何将更多作业传递到同一个爬行器中

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

    process = CrawlerProcess(config)
    process.crawl(FacebookSpider, <username>, session)
    process.start()
    
    process=CrawlerProcess(配置)
    进程爬网(FacebookSpider,会话)
    process.start()
    
    在不停止爬行器的情况下,如何向队列添加新用户名(在一次爬网完成并处理项目之后)?或者,方法应该是“等待蜘蛛完成任务”->“创建新任务”


    我试着翻阅那些粗糙的文档,但对于像我这样的新手来说,这实在是太难了。我尝试使用CrawlerRunner,但无法使其正常工作。

    您是否可以
    让process.crawl(args)
    ?这就是CrawlerRunner的方法,对吗?这是怎么回事?我尝试使用“常用实践”中的所有示例,但无法启动一个爬行器作业。什么会产生process.crawl?它会是spider类中的一个单独的方法吗?您会不会
    产生process.crawl(args)
    ?这就是CrawlerRunner方法,对吗?这是怎么回事?我尝试使用“常用实践”中的所有示例,但无法启动一个爬行器作业。什么会产生process.crawl?它会是spider类中的一个单独的方法吗?