Весьма вероятно, что при объединении выражений XPath, например, так:
response.xpath("//div[@class='news_li']")[0].xpath("//div[@class='a1']").extract()
если второе выражение начинается с двойной косой черты //
, то элементы выбираются в любом месте документа , независимо от того, что было выбрано ранее. Проще говоря: даже если первое выражение:
//div[@class='news_li']
выбирает только div
элементов с определенным атрибутом класса, следующий:
//div[@class='a1']
выделяет все div
элементов, где @class='a1'
во всем документе. Кажется, это твоя проблема.
Решение: используйте относительный путь
Одним из возможных решений является использование относительного выражения пути, которое не начинается с //
:
response.xpath("//div[@class='news_li']")[0].xpath(".//div[@class='a1']").extract()
Общие замечания
В зависимости от структуры ваших фактических документов и если вы можете сделать определенные предположения, могут быть найдены лучшие решения.
Кроме того, в общем случае для обработки результатов "по одному" необходимо
- написать выражение XPath, которое выбирает все нужные элементы и возвращает их в виде списка
- обрабатывает каждый элемент в этом списке индивидуально, например, с кодом Python