Влияет ли использование scrapy-splash на скорость очистки?
До сих пор я использовал только scrapy и писал собственные классы для работы с сайтами, использующими ajax.
Но если бы я использовал scrapy-splash, который, насколько я понимаю, очищает рендеринг html после javascript, значительно ли повлияет скорость моего сканера?
Каково было бы сравнение времени, которое требуется, чтобы очистить ванильную HTML-страницу с помощью scrapy и javascript, визуализированного с помощью scrapy-splash?
И, наконец, как можно сравнить scrapy-splash и Selenium?
1 ответ
Это зависит от количества присутствующего на странице javascript.
Вы должны знать, что для рендеринга всего javascript заставка занимает некоторое время, и приложение python продолжает работу, не дожидаясь завершения рендеринга. Так что иногда всплеск тоже не в состоянии это сделать.
- Вы можете явно поставить ожидание на рендеринг, так как обычно это требует некоторого времени.
- Также это хорошая практика
wait
,
Вот,
import scrapy
from scrapy_splash import SplashRequest
yield scrapy.Request(url, callback=self.parse, meta={'splash':{'args':{'wait':'25'},'endpoint':'render.html'}})
или же
import scrapy
from scrapy_splash import SplashRequest
yield SplashRequest(url, self.parse, endpoint='render.html',
args={'wait': 5, 'html' : 1 } )
Между скрапом и селеном
Selenium
используется только для автоматизации взаимодействия с веб-браузером, Scrapy
используется для загрузки HTML, обработки данных и их сохранения (вся структура веб-сканирования).
Говоря о соскобе я бы порекомендовал scrapy
и если проблема в JavaScript.
- У Scrapy уже есть свой официальный проект для javascript, который называется scrapy-splash.
- Кроме того, вы можете создать новый экземпляр webdriver из Selenium в scrapy spider, выполнить некоторую работу, извлечь данные, а затем закрыть его после всей проделанной работы.