介绍
这篇文章给大家介绍怎么在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实现异步爬取就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。