Всплеск Scrapy не возвращает результаты

Я изучаю скрапирование (с заставкой) и создаю паука для очистки результатов со страниц с поддержкой js. Мой паук работает и возвращает результаты для js-страниц. Однако он не возвращает цену по этой ссылке https://www.zara.com/us/en/bejewelled-appliqu%C3%A9-dress-p07854034.html?v1=4818592&v2=733885

xpath used: //*[contains(concat( " ", @class, " " ), concat( " ", "_product-price", " " ))]//span/text()

Приведенный выше xpath возвращает результаты в браузере, но не возвращает результаты при вызове через scrapy. Вот мой паучий зов

yield scrapy.Request(url, callback=self.parse_page, dont_filter=True, meta={'splash': {'args': {'wait': 5,},'endpoint': 'render.html',}})

Помогите пожалуйста разобраться почему цена с сайта не возвращается?

Спасибо!


person user6055239    schedule 19.10.2017    source источник
comment
чтобы проверить, связано ли это с вашим кодом или конфигурацией, вы можете сделать снимок экрана с результатом заставки и проверить его или просто проверить дерево документов, если цена есть.   -  person jabargas    schedule 20.10.2017
comment
о, только что взглянул на ваш код, кажется, ваш xpath неверен.   -  person jabargas    schedule 20.10.2017


Ответы (2)


Проблема в том, что цена вообще отсутствует в выводе HTML, отображаемом Splash (лучше всего увидеть свой URL-адрес в консоли Splash в веб-браузере на порту 8050 и увидеть его вывод). Начните со Splash FAQ, когда страница отображается некорректно. Вы обнаружите, что в вашем случае решение заключается в отключить приватный режим для Splash либо с помощью параметра запуска --disable-private-mode для Docker, либо путем установки splash.private_mode_enabled = false в сценарии LUA. После отключения приватного режима страница отображается корректно.

person Tomáš Linhart    schedule 20.10.2017

используйте это для своего xpath - //*[contains(concat( " ", @class, " " ), concat( " ", "_product-price", " " ))]//span/text() или просто //*[contains(concat( " ", @class, " " )," _product-price " ))]//span/text()

Предикаты Xpath @class= не работают для нескольких классов (классы, разделенные пробелом), как тот, который у вас есть. Чтобы получить элемент, вы должны использовать contains()

person jabargas    schedule 19.10.2017
comment
Я также пытался использовать указанный вами xpath, но безуспешно. Есть ли что-то еще, что может пойти не так? //*[содержит(concat( , @class, ), concat( , _product-price, ))]//span/text() - person user6055239; 20.10.2017