Как вычеркнуть названия продуктов с веб-сайта, используя оболочку 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" в качестве фильтра
- Сделайте поиск (или перезагрузите сайт)
Вы увидите список предметов, который вам нужен:
искать? чид =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, который вы можете сохранить в файл или сделать все, что захотите.
Если вам нужно больше деталей, дайте мне знать.