scrapy xpath выбрать элементы по имени класса
Я следил Как я могу найти элемент по классу CSS с XPath? который дает селектор для выбора элементов по имени класса. Проблема в том, что когда я его использую, он получает пустой результат "[]", и я знаю, что в URL-адресе, передаваемом в оболочку scrapy, есть div-класс "zoomWindow".
Моя попытка:
scrapy shell "http://www.niceicdirect.com/epages/NICShop.sf/secAlIVFGjzzf2/?ObjectPath=/Shops/NICShop/Products/5696"
response.xpath("//*[contains(@class, 'zoomWindow')]")
Я посмотрел на многие ресурсы, которые предоставляют различные селекторы. В моем случае элемент имеет только один класс, поэтому версии, использующие "concat", я использовал, но не работал и отбрасывал.
Я установил Ubuntu и Scrapy на виртуальную машину, просто чтобы убедиться, что это не было ошибкой в моей установке на Windows, но моя попытка на Ubuntu имела те же результаты.
Я не знаю, что еще попробовать, вы можете увидеть опечатку в селекторе?
1 ответ
Если бы вы проверили response.body
в оболочке - вы увидите, что он не содержит элемент с class="zoomWindow"
:
In [3]: "zoomWindow" in response.body
Out[3]: False
Но если вы откроете страницу в браузере и осмотрите источник HTML, вы увидите, что этот элемент есть. Это означает, что загрузка страницы включает в себя логику JavaScript или дополнительные запросы AJAX. Scrapy не является браузером и не имеет встроенного движка JavaScript. Другими словами, он только загружает исходный HTML-код страницы без дополнительной загрузки файлов js и css и их "выполнения".
Что вы можете попробовать, для начала, это использовать scrapyjs
скачать обработчик и промежуточное ПО.
Изображение, которое вы хотите извлечь, также доступно в img
пометить с id="PreviewImage"
:
In [4]: response.xpath("//img[@id='PreviewImage']/@src").extract()
Out[4]: [u'/WebRoot/NICEIC/Shops/NICShop/547F/0D9A/F434/5E4C/0759/0A0A/124C/58F7/5708.png']