С помощью BeautifulSoup как получить доступ к <li>, у которого есть определенный div дочерний элемент?

Пример: Как получить доступ к тексту (например, info@blah.com) li, в котором Email является дочерним элементом div?

<li>
  <div>Country</div>
  Germany
</li>
<li>
  <div>Email</div>
  info@blah.com
</li>

Я пытался сделать это вручную: зацикливание на всех li и для каждого из них повторное зацикливание на всех дочерних div, чтобы проверить, является ли текст Email и т. д., но я уверен, что существует более умная версия с BeautifulSoup.

4
Basj 15 Дек 2015 в 20:16

3 ответа

Лучший ответ

Есть несколько способов решения проблемы.

Один из вариантов - найти Email div по тексту и получить следующий брат:

soup.find("div", text="Email").next_sibling.strip()  # prints "info@blah.com"
1
alecxe 15 Дек 2015 в 17:19

Если у вас есть только один div с содержимым «Электронная почта», вы можете сделать это так.

soup.find("div", text="Email").find_parent('li')
0
Sunhwan Jo 15 Дек 2015 в 17:48

Ваш вопрос о том, чтобы получить всю <li> часть, которая имеет "Email" внутри тега <div>, верно? Это означает, что вам нужно получить следующий результат,

 <li>
  <div>Email</div>
  info@blah.com
 </li>

Если я правильно понимаю ваш вопрос, значит, вам нужно сделать следующее.

soup.find("div", text="Email").parent

Или если вам нужен "info@blah.com" в качестве результата, вам нужно сделать следующее.

soup.find("div", text="Email").next_sibling
1
user3707514 16 Дек 2015 в 14:30