Парсинг данных с 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-запроса - она указывает, что поиск должен выполняться относительно текущего элемента.

Буду благодарен за дополнительные советы и рекомендации по оптимизации данного подхода!