scrapyとseleniumの遅延ロード処理
ネット上の爬虫類の需要になって、よく動的なページの処理に出会って、這い降りたページで、まだ一部の内容がロードされていないか、あるいはまだ処理が終わっていないので、ページの内容が不完全になって、例えば、画像の動的なロード、iframe、ajaxなどです.
対応するピクチャのダイナミックロード:次のようにします.
ダウンロードミドルウェアでは、ページの注目要素がすでに必要かどうかを判断します.そうしないと、ずっと待っています.タイムアウトまで.
iframeの判断については、方法があまり悪くありません.
これはseleniumが持参した方法で、ある要素がページに表示されているかどうかを判断します.表示されない場合は、タイムアウトまで待機します.
参考資料
——————————————————————————
https://www.cnblogs.com/cnkai/p/7538262.html
https://www.cnblogs.com/cnkai/p/7538260.html
https://www.cnblogs.com/mengyu/p/6972968.html
https://www.cnblogs.com/yoyoketang/p/6128580.html
https://blog.csdn.net/zhusongziye/article/details/80342781
https://www.cnblogs.com/VseYoung/p/selenium_wait_3_python.html
対応するピクチャのダイナミックロード:次のようにします.
#
class page_loaded:
def __init__(self, request, spider):
self.request = request
self.spider = spider
def __call__(self, driver):
img_src = driver.find_element_by_css_selector("img.lazyload").get_attribute("src")
if re.search("gif$", img_src):
return False
return True
#
class DetailSeleniumDownloaderMiddleware(object):
def process_request(self, request, spider):
sobj = re.search("movie", request.url, re.I)
if sobj:
try:
# browser webdriver
spider.browser.get(request.url)
WebDriverWait(spider.browser, timeout=30, poll_frequency=3).until(page_loaded(request, spider))
#time.sleep(5)
return HtmlResponse(url=spider.browser.current_url, body=spider.browser.page_source,
encoding='utf-8', request=request)
except TimeoutException:
spider.logger.error("url %s download failed", request.url)
ダウンロードミドルウェアでは、ページの注目要素がすでに必要かどうかを判断します.そうしないと、ずっと待っています.タイムアウトまで.
iframeの判断については、方法があまり悪くありません.
#
class testSeleniumDownloaderMiddleware(object):
def process_request(self, request, spider):
sobj = re.search("ckplayer",request.url, re.I)
if sobj:
try:
spider.browser.get(request.url)
# 0.5s, poll_frequency=0.5
WebDriverWait(spider.browser, timeout=10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "iframe")))
return HtmlResponse(url=spider.browser.current_url, body=spider.browser.page_source,
encoding="utf-8", request = request)
except TimeoutException:
spider.logger.error("url %s download failed", request.url)
これはseleniumが持参した方法で、ある要素がページに表示されているかどうかを判断します.表示されない場合は、タイムアウトまで待機します.
参考資料
——————————————————————————
https://www.cnblogs.com/cnkai/p/7538262.html
https://www.cnblogs.com/cnkai/p/7538260.html
https://www.cnblogs.com/mengyu/p/6972968.html
https://www.cnblogs.com/yoyoketang/p/6128580.html
https://blog.csdn.net/zhusongziye/article/details/80342781
https://www.cnblogs.com/VseYoung/p/selenium_wait_3_python.html