У меня есть структура HTML, подобная следующей:

important 1

  • 1
  • 2

important 2

  • 3
  • 4

not important

  • 5
  • 6

not important

  • 7
  • 8

Я пытаюсь получить все элементы

  • , кроме элементов ниже h2 или h3 с именем класса с ключевым словом not_important на нем, но я действительно не знаю, как это сделать.

    Вот что я сделал до сих пор:

    In [1]: import scrapy
    
    In [2]: selector = scrapy.Selector(text="""

    important 1

    ...:
    • 1
    ...:
    • 2
    ...: ...:

    important 2

    ...:
    • 3
    ...:
    • 4
    ...: ...:

    not important

    ...:
    • 5
    ...:
    • 6
    ...: ...:

    not important

    ...:
    • 7
    ...:
    • 8
    """) In [3]: not_important = selector.xpath(".//span[contains(@class, 'not_important')]") In [4]: not_important Out[4]: [not importan'>, not import'>]

    Моя идея заключалась в том, чтобы получить все

  • элементы. Затем получите все элементы, которые мне не нужны, используя приведенный выше код в сочетании с following-sibling :: ul (он не работает, когда я использую not_important [0] .xpath ("following-sibling :: ul")) И в самом конце исключите все, что мне не нужно, из списка каждого элемента
  • .

    Другими словами я застрял. Любая помощь будет оценена по достоинству и с наступающим Новым годом,

  • gglasses

    Ответов: 1

    Ответы (1)

    Идея состоит в том, чтобы использовать комбинацию , предшествующих и , следующих за, чтобы получить каждый ul элемент между «важные» и «неважные» элементы:

    //ul[preceding::span/@class ="important" and 
         following::span/@class = "not_important"]/li/text()
    

    Подходит для меня в приведенном примере ввода (извлекает ['1', '2', '3', '4']).

    2022 WebDevInsider