Селектор Scrapy: получить текст элемента nth-child - PullRequest
0 голосов
/ 07 января 2020

Я использую селектор Scrapy для извлечения полей из html

xpath = /html/body/path/to/element/text()

Это похоже на вопрос scrapy получить текст n-го ребенка того же класса и следуя документации, мы можем использовать метод .getall(), чтобы получить все элементы и выбрать в списке указанный c один.

selected_list = Selector(text=soup.prettify()).xpath(xpath).getall()

Можно ли напрямую указать, какой n-й элемент выбрать в самом xpath? ? Примерно так:

xpath = /html/body/path/to/element/text(2) #to select 3 child text

Пример

<body>
  <div>
    <i class="ent_sprite remind_icon">
    </i> 
    text that needs to be
  </div>
</body>

Результат response.xpath('/body/div/text()').getall() состоит из 2 элементов

  1. '\n'
  2. 'text that needs to be'

1 Ответ

1 голос
/ 09 января 2020

Вы можете использовать following-sibling::, чтобы иметь ближайшего брата (вниз) выражения. Например, в этом случае вам нужен ближайший тег text() из <i>, поэтому вы можете сделать:

response.xpath('//i[@class="ent_sprite remind_icon"]/following-sibling::text()').get()

, который даст вам ближайший text() узел к <i class="ent_sprite remind_icon">. Если вы хотите получить n-й ближайший брат (нисходящий) узла, XPath будет following-sibling::node[n] в нашем случае:

'//i[@class="ent_sprite remind_icon"]/following-sibling::text()[n]'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...