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?
Ответы
Ответ 1
просто оберните URL-адрес, который вы хотите скопировать в всплывать http api.
Итак, вам нужно что-то вроде:
scrapy shell 'http://localhost:8050/render.html?url=http://domain.com/page-with-javascript.html&timeout=10&wait=0.5'
где localhost:port
находится ваша служба всплеска
url
- это URL-адрес, который вы хотите выполнить, и не забывайте urlquote!
render.html
является одной из возможных конечных точек http api, возвращает reded html-страницу в этом случае
timeout
время в секундах для тайм-аута
wait
время в секундах, чтобы дождаться выполнения javascript перед чтением/сохранением html.
Ответ 2
Вы можете запустить scrapy shell
без аргументов внутри сконфигурированного проекта Scrapy, затем создать req = scrapy_splash.SplashRequest(url, ...)
и вызвать fetch(req)
.
Ответ 3
Для пользователей Windows, которые используют Docker Toolbox:
-
Измените одиночную кавычку на двойную кавычку, чтобы предотвратить invalid hostname:http
ошибка 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/""