Scrapy с Splash не ждет загрузки сайта

Я пытаюсь отобразить и очистить интерактивный веб-сайт, вызывая Splash через скрипт Python, в основном следуя этому руководство:

import scrapy
from scrapy_splash import SplashRequest

class MySpider(scrapy.Spider):
    start_urls = ["http://example.com"]

    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url, self.parse,
                endpoint='render.html',
                args={'wait': 0.5},
            )

    def parse(self, response):
        filename = 'mywebsite-%s.html' % '1'
        with open(filename, 'wb') as f:
            f.write(response.body)

Вывод выглядит нормально, однако в нем отсутствует часть веб-сайта, которая загружается через ajax через секунду или две, а это контент, который мне действительно нужен. Теперь странно то, что если я получаю доступ к Splash непосредственно внутри контейнера через веб-интерфейс, устанавливаю тот же URL-адрес и нажимаю кнопку Render, возвращаемый ответ правильный. Итак, единственный вопрос в том, почему, когда скрипт Python вызывает его, он не отображает веб-сайт правильно?


person Zed    schedule 11.08.2018    source источник


Ответы (1)


Я попробовал то, что предложил Адриану, но это не сработало. Через некоторое время мне стало интересно, что произойдет и возможно ли вообще выполнить тот же скрипт, что и Splash UI. Итак, я узнал, что можно передать lua-скрипт в качестве аргумента, и это работает!

script1 = """
            function main(splash, args)
            assert (splash:go(args.url))
            assert (splash:wait(0.5))
            return {
                html = splash: html(),
                png = splash:png(),
                har = splash:har(),
            }
            end
          """

    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url, self.parse,
                                endpoint='execute',
                                args={
                                    'html': 1,
                                    'lua_source': self.script1,
                                    'wait': 0.5,
                                }
person Zed    schedule 12.08.2018