Я хочу получить все <a>
теги, которые являются дочерними для <li>
:
<div>
<li class="test">
<a>link1</a>
<ul>
<li>
<a>link2</a>
</li>
</ul>
</li>
</div>
Я знаю, как найти элемент с таким классом:
soup.find("li", { "class" : "test" })
Но я не знаю, как найти всех, <a>
чьи дети, <li class=test>
но не все остальные.
Как я хочу выбрать:
<a>link1</a>
python
html
beautifulsoup
tej.tan
источник
источник
soup.find('li', {'class': 'text'}).findChildren()
.find(li).find(a).firstChild()
В DOC есть очень маленький раздел, в котором показано, как найти / find_all прямых потомков.
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#the-recursive-argument
В вашем случае, если вы хотите link1, который является первым прямым дочерним элементом:
Если вы хотите всех прямых детей:
источник
Возможно, ты хочешь сделать
источник
<a> link2 </a>
но я не хочу этого<a>link1</a>
в HTML, заданном в вопросе, но это будет НЕОБХОДИМО, если первый не<li class="test">
будет содержать<a>
элементов и есть другиеli
элементы сtest
классом, который содержит<a>
.попробуй это:
другие напоминания:
Метод find получает только первый возникающий дочерний элемент. Метод find_all получает все дочерние элементы и хранится в списке.
источник
«Как найти всех
a
детей,<li class=test>
но не других?»Учитывая приведенный ниже HTML (я добавил еще один,
<a>
чтобы показать разницу междуselect
иselect_one
):Решение - использовать дочерний комбинатор (
>
), который помещается между двумя селекторами CSS:Если вы хотите найти только первого ребенка:
источник
Еще один способ - создать функцию фильтра, возвращающую
True
все желаемые теги:Затем просто позвоните
find_all
с аргументом:источник