我正在使用Selenium的scrapy,这里是蜘蛛纲要
class MySpider(spider.Spider):
name = "myname"
start_urls = ["example.com"]
def __init__(self, *args, *kwargs):
self.driver = webdriver.PhantomJS()
super(MySpider, self).__init__(*args, **kwargs)
def parse(self, response):
# ignore response, work with selenium instead
source = self.driver.get(response.url).page_source
sel = Selector(text=source)
# now use xpath/css selectors on sel and yield item
...
问题是我在抓取不同数量的页面后得到111连接错误(有时是100,有时是200)所以我实现了download_delay和autothrottling,这非常酷。
但是selenium并没有与中间件交谈,而且我并没有真正使用中间件返回的响应。所以我将不得不实现自己的download_delay。
不幸的是,我对扭曲,并发编程等知之甚少,所以在调用time.sleep(secs)
合理之前,我不确定是否等同于self.driver.get
(阻塞码?)。
使用selenium scrapy解析响应时,如何实现下载延迟?
答案 0 :(得分:0)
Selenium支持Explicit和Implicit等待。如果您认为等待一定的时间足以加载您的页面,请使用:
self.driver.implicitly_wait(secs)
但如果您想等待特殊事件(例如等待加载特定元素),您可以执行以下操作:
try:
def find(self.driver):
dropdown = self.driver.find_element_by_xpath('//a')
if dropdown:
return dropdown
else:
return False
element = WebDriverWait(self.driver, secs).until(find)
except:
self.driver.quit()
显式等待可以帮助您实施DOWNLOAD_DELAY
。您只需要等待页面上最后加载的元素。