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:

  1. Измените одиночную кавычку на двойную кавычку, чтобы предотвратить invalid hostname:http ошибка invalid hostname:http.

  2. измените 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/""