怎么在scrapy中利用phantomJS实现异步爬取

  介绍

这篇文章给大家介绍怎么在scrapy中利用phantomJS实现异步爬取,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

使用时需要PhantomJSDownloadHandler添加到配置文件的下载器中。

#,编码:utf - 8   得到__future__  import  unicode_literals   ,   得到scrapy  import 信号   得到scrapy.signalmanager  import  SignalManager   得到scrapy.responsetypes  import  responsetypes   得到scrapy.xlib.pydispatch  import 调度员   得到selenium  import  webdriver   得到six.moves  import 队列   得到twisted.internet  import 推迟,线程   得到twisted.python.failure  import 失败   ,   ,   class  PhantomJSDownloadHandler(对象):   ,   ,def  __init__(自我,,设置):   self.options 才能=,settings.get (& # 39; PHANTOMJS_OPTIONS& # 39;,, {})   ,   max_run 才能=,settings.get (& # 39; PHANTOMJS_MAXRUN& # 39;,, 10)   时间=self.sem 才能;defer.DeferredSemaphore (max_run)   时间=self.queue 才能;queue.LifoQueue (max_run)   ,   SignalManager才能(dispatcher.Any) .connect (self._close,,信号=signals.spider_closed)   ,   ,def  download_request(自我,,请求,,蜘蛛):   “““才能use  semaphore 用guard  a  phantomjs  pool"““   return 才能self.sem.run (self._wait_request,请求,,蜘蛛)   ,   ,def  _wait_request(自我,,请求,,蜘蛛):   尝试才能:   ,,driver =, self.queue.get_nowait ()   except 才能;queue.Empty:   ,,driver =, webdriver.PhantomJS (* * self.options)   ,   driver.get才能(request.url)   #,才能ghostdriver 赢得# 39;t  response  when  switch  window  until  page  is 加载   时间=dfd 才能;threads.deferToThread(λ:driver.switch_to.window (driver.current_window_handle))   dfd.addCallback才能(self._response,司机,蜘蛛)   ,return 过程   ,   ,def  _response(自我,,_,,司机,蜘蛛):   时间=body 才能;driver.execute_script (“return  document.documentElement.innerHTML")   if 才能;body.startswith (“& lt; head> & lt;/head>“):, #, cannot  access  response  header 硒拷贝   ,,body =, driver.execute_script (“return  document.documentElement.textContent")   url 才能=driver.current_url   respcls 才能=,responsetypes.from_args (url=url,,身体=身体[100].encode (& # 39; use utf8 # 39;))   resp 才能=,respcls (url=url,身体=身体,编码=皍tf-8")   ,   时间=response_failed 才能;getattr(蜘蛛,“response_failed",,也没有)   if 才能;response_failed 以及可调用(response_failed),以及response_failed(分别地,,司机):   ,,driver.close ()   ,,return  defer.fail(失败())   其他的才能:   ,,self.queue.put(司机)   ,,return  defer.succeed(职责)   ,   ,def  _close(自我):   while 才能;not  self.queue.empty ():   ,,driver =, self.queue.get_nowait ()   ,,driver.close ()

关于怎么在scrapy中利用phantomJS实现异步爬取就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

怎么在scrapy中利用phantomJS实现异步爬取