Как вычеркнуть названия продуктов с веб-сайта, используя оболочку Scrapy

Пожалуйста, помогите мне найти названия продуктов по этой ссылке: http://www.gap.com/browse/category.do?cid=5168&scrollTo=product353401012&scrollTo=product353401012

Имена продуктов содержатся в class="product-card- name", который находится в div. Когда я запускаю:response.css('div.product-card- name::text'). Extract(),it возвращает пустой список.

Пожалуйста, предоставьте команды css и xpath.

1 ответ

По словам Габи, содержимое загружается динамически. Вы можете увидеть это по:

  • Открытие веб-сайта в Chrome (у Firefox также есть способ сделать это)
  • Нажмите F12, чтобы открыть DevTools
  • Выберите вкладку "Сеть"
  • Выберите "XHR" в качестве фильтра
  • Сделайте поиск (или перезагрузите сайт)

XHR фильтр

Вы увидите список предметов, который вам нужен:

искать? чид =5168&isFacetsEnabled= истина &globalShippingCountryCode=&globalShippingCurrencyCode=& локаль =en_US& PageId=0

и если вы нажмете на него, вы увидите http-запрос с заголовками и ответ со всеми данными, которые вы хотите.

Чтобы сделать это в scrapy, это немного сложнее, вы должны удалить эту ссылку, но используя метод "POST" вместо значения по умолчанию ("GET"). Чтобы сделать это с помощью паука-скрапа:

yield scrapy.Request(url, self.parse_data, method="POST", headers=headers, body=body)

Там, где URL должен быть тем, который вы нашли в XHR-фильтре, используется метод "POST", вы должны скопировать заголовки, которые мы нашли ранее, и в тексте содержатся все параметры, относящиеся к тому, что вы ищете. После этого вы получите ответ JSON, который вы можете сохранить в файл или сделать все, что захотите.

Если вам нужно больше деталей, дайте мне знать.

Другие вопросы по тегам