Парсинг данных с books.toscrape.com: решение проблемы с извлечением информации из элементов
Я разрабатываю парсер для учебного сайта books.toscrape.com, который должен извлекать названия книг, ссылки на изображения и стоимость товаров.
При использовании следующего XPath-запроса:
all_product_information = tree.xpath('//article[@class="product_pod"]')я получаю список элементов, но не могу извлечь из них нужные данные. Вывод выглядит следующим образом:
[<Element article at 0x7008b358d240>, <Element article at 0x7008b3394880>, ...]Проблема
При переборе элементов в цикле я получаю только объекты Element, но не могу получить доступ к их содержимому (названиям книг, ценам и другим данным). Попытки обращения по индексам [0], [1] также не дают желаемого результата.
Решение
Для извлечения конкретных данных из каждого элемента необходимо использовать относительные XPath-запросы. Вот как это можно сделать:
- Название книги: Используйте относительный путь внутри каждого элемента article, например:
./h3/a/@titleили./h3/a/text() - Стоимость: Для получения цены используйте путь:
./div[@class="product_price"]/p[@class="price_color"]/text() - Изображение: Ссылку на картинку можно получить через:
./div[@class="image_container"]/a/img/@src
Пример кода для извлечения данных:
for product in all_product_information:
title = product.xpath('./h3/a/@title')[0]
price = product.xpath('./div[@class="product_price"]/p[@class="price_color"]/text()')[0]
image_url = product.xpath('./div[@class="image_container"]/a/img/@src')[0]Обратите внимание на точку в начале каждого XPath-запроса - она указывает, что поиск должен выполняться относительно текущего элемента.
Буду благодарен за дополнительные советы и рекомендации по оптимизации данного подхода!