Scrapy не может видеть список - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь сканировать определенную страницу веб-сайта (https://www.johnlewis.com/jaeger-wool-check-knit-shift-dress-navy-check/p3767291), чтобы привыкнуть к Scrapy и ее функциям. Однако я не могу заставить Scrapy увидеть 'li', содержащую уменьшенные изображения на карусели. Моя parse функция в данный момент выглядит следующим образом:

def parse(self, response):
    for item in response.css('li.thumbnail-slide'):
        #The for loop works for li.size-small-item
       print("We have a match!")

Неважно, что Скрапи не «видит» ли. Я попытался просмотреть страницу в оболочке Scrapy, чтобы убедиться, что Scrapy может видеть изображения, и они отображаются в ответе на это (поэтому я предполагаю, что Scrapy определенно может видеть список / изображения в списке). Я пробовал альтернативные списки, и у меня есть другой список для работы (согласно комментарию в коде). Я думаю только о том, что карусель может быть загружена с помощью JavaScript / AJAX, но я не могу быть слишком уверен. Я знаю, что класс списка изменится, если это выбранное изображение с «li.thumbnail-slide» на «li.thumbnail-slide thumbnail-slide-active», однако, я попробовал следующее в моем скрипте безрезультатно :

  1. li.thumbnail салазки
  2. li.thumbnail-слайд-активный
  3. li.thumbnail-slide.thumbnail-слайд-активный
  4. li.thumbnail-slide thumbnail-slide-active

Ничего не работает.

У кого-нибудь есть предложения по поводу того, что я могу делать не так? Или предложить дальнейшее чтение, которое может помочь?

Заранее спасибо!

1 Ответ

0 голосов
/ 03 ноября 2018

Ваше предположение верно, элементы есть, но не совсем там, где вы думаете.

Чтобы легко проверить, является ли элемент частью HTML ответа и не загружается ли JavaScript, я обычно рекомендую использовать плагин браузера для отключения javascript .

Если вам нужны изображения, они все еще являются частью ответа html, вы можете получить их с помощью:

response.css('li.product-images__item')

основное изображение появляется отдельно:

response.css('meta[itemprop=image]::attr(content)')

Надеюсь, это поможет вам.

...