селектор css выделяет только первый дочерний текст, а не div

#javascript #html #css #web-scraping

#javascript #HTML #css #очистка веб-страниц

Вопрос:

Я хочу использовать селектор css для выбора только текста (который в моем примере «1.42») из этого div <div class="one"> для целей очистки:

 <div class="one">
1.42
<div class="nested">..</div>
</div>
  

Я попробовал это, но вернул все <div class="one"> (и я хочу только текст):

 div.one:first-child
  

и это также:

 div.one:first-child:not(.nested)
  

Все они возвращают текст плюс содержимое внутри div.nested

Редактировать:

Я хочу использовать селектор для очистки определенного текста с помощью Beautifulsoup

 soup.select_one('div.one:first-child:not(.nested)')
  

Комментарии:

1. что вы хотите сделать с этим текстом? скрыть это?

2. не используйте его с Beautifulsoup для очистки

3. Я вижу, что в моем ответе ниже не учитывается, что вы, вероятно, не можете редактировать внешний html-файл, поэтому, если бы вы могли уточнить, какой результат дает ваш тест soup.select_one, было бы полезно. Редактировать: вы уже написали, что это такое, извините за это. Боюсь, я не смогу тогда помочь. Возможно ли в Beautifulsoup удалить весь внутренний div.nested из результата с помощью функции?

Ответ №1:

Вы не можете css-выбрать что-то, чего нет внутри html-тега, с классом css или без него. В вашем случае вы должны обернуть свой текст 1.42 в HTML-тег, например <p> .

Это также лучшая практика, никогда не печатать текст непосредственно внутри div, без семантического текстового тега, такого как p .

Как только у вас будет свой, <p class="...">Text here</p> вы можете выбрать div:first-child или просто выбрать p или p.theclassname . Другой метод div:nth-child(1) .