Scrapy Shell и Scrapy Splash
Мы использовали scrapy-splash
промежуточное программное обеспечение для передачи очищенного исходного кода HTML через Splash
движок javascript, работающий внутри контейнера докера.
Если мы хотим использовать Splash в пауке, мы настраиваем несколько необходимых параметров проекта и получаем Request
указав конкретные meta
аргументы:
yield Request(url, self.parse_result, meta={
'splash': {
'args': {
# set rendering arguments here
'html': 1,
'png': 1,
# 'url' is prefilled from request url
},
# optional parameters
'endpoint': 'render.json', # optional; default is render.json
'splash_url': '<url>', # overrides SPLASH_URL
'slot_policy': scrapyjs.SlotPolicy.PER_DOMAIN,
}
})
Это работает как задокументировано. Но как мы можем использовать scrapy-splash
внутри Scrapy Shell?
2 ответа
Просто оберните URL-адрес, который вы хотите использовать в http-интерфейсе.
Таким образом, вы хотели бы что-то вроде:
scrapy shell 'http://localhost:8050/render.html?url=http://domain.com/page-with-javascript.html&timeout=10&wait=0.5'
где localhost:port
где работает ваша заставкаurl
это URL, который вы хотите ползать, и не забывайте указывать его!render.html
является одной из возможных конечных точек http api, в этом случае возвращает переведенную html-страницуtimeout
время в секундах для тайм-аутаwait
время в секундах, чтобы ждать выполнения JavaScript, прежде чем читать / сохранять HTML.
Вы можете запустить scrapy shell
без аргументов внутри настроенного проекта Scrapy, затем создайте req = scrapy_splash.SplashRequest(url, ...)
и позвонить fetch(req)
,
Для пользователей Windows, использующих Docker Toolbox:
Измените одиночную кавычку на двойную кавычку для предотвращения
invalid hostname:http
ошибка.измените localhost на IP-адрес докера, который находится под логотипом кита. для меня это было
192.168.99.100
.
В итоге я получил вот это:
scrapy shell "http://192.168.99.100:8050/render.html?url="https://samplewebsite.com/category/banking-insurance-financial-services/""