Влияет ли использование 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, выполнить некоторую работу, извлечь данные, а затем закрыть его после всей проделанной работы.
Другие вопросы по тегам