middleware中selenium模拟点击分页时,每页pagesource传递
来源:9-4 selenium集成到scrapy中
hi_Rengar
2019-03-25
class SeleniumMiddleware(object):
def process_request(self, request, spider):
if spider.name == 'gome':
gome_type = request.meta.get('gomeType', 0)
log.msg('gome type: %s' % gome_type)
spider.browser.get(request.url)
if gome_type == 2:
while True:
spider.browser_wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="min-pager-number"]')))
# TODO 分页数据处理
pager_souce = spider.browser.page_source
pager_text = spider.browser.find_element_by_xpath('//*[@id="min-pager-number"]').text()
pager_list = re.findall(u"\d+", pager_text)
if len(pager_list) == 2 and int(pager_list[0]) < int(pager_list[1]):
spider.browser.find_element_by_xpath('//*[@id="mp-next"]').click()
else:
break
return HtmlResponse(url=spider.browser.current_url, body=spider.browser.page_source, encoding="utf-8",
request=request)
pass
现在的问题是middleware中只能返回一次pagesource,如果pagesource的解析和存储都在middleware中,那scrapy用不用无所谓了。。
写回答
1回答
-
bobby
2019-03-27
当然可以把解析和存储都放在middleware中,但是你这样代码的逻辑就混淆了。middleware中就是用来处理response的,后续的处理逻辑应该放在对应的地方,即使你自己写代码不也是需要将这些逻辑分离吗?如果放在一起代码的后期维护会很痛苦的
062019-04-09
相似问题