есть ли функция для извлечения тегов внутри тега и всех остальных оставшихся тегов в красивом супе - PullRequest
0 голосов
/ 02 июня 2019

Мне нужно удалить данные с веб-страницы в этом формате.Мне нужен только внутренний текст первого дочернего элемента h2 и h3, т. Е. Из первого диапазона и всех других тегов <p>

<div class="info">
   <h2>
      <span>first heading</span>
      <span> not required</span>
   </h2>
   <p> 1 paragraph</p>
   <p> 2 paragraph</p>
 <div> some tags</div>

  <h3>
      <span>second heading</span>
      <span> not required</span>
   </h3>
   <p> 3 paragraph</p>
   <p> 4 paragraph</p>

</div>

Outputs;

first heading
 1 paragraph
 2 paragraph
second heading
 3 paragraph
 4 paragraph

soup.find_all (["h1 "," p "," h2 "," h3 "]) после попытки этого я также получаю внутренний текст второго интервала, который мне не нужен.Мне нужен только внутренний текст содержимого первого диапазона h2 и h3 'и содержимого тега p.Я новичок в питоне и супе, любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 02 июня 2019

Вы можете использовать find_all (), чтобы получить нужные теги, а затем использовать findChild () для элементов, которые вы хотите только для первого дочернего элемента

from bs4 import BeautifulSoup

html = """
<div class="info">
   <h2>
      <span>first heading</span>
      <span> not required</span>
   </h2>
   <p> 1 paragraph</p>
   <p> 2 paragraph</p>
 <div> some tags</div>

  <h3>
      <span>second heading</span>
      <span> not required</span>
   </h3>
   <p> 3 paragraph</p>
   <p> 4 paragraph</p>

</div>
"""
soup = BeautifulSoup(html, "lxml")

for elem in soup.find_all(['h2', 'h3', 'p']):
    if elem.name == 'p':
        print(elem.text)
    else:
        print(elem.findChild().text)

Outputs;

first heading
 1 paragraph
 2 paragraph
second heading
 3 paragraph
 4 paragraph
0 голосов
/ 02 июня 2019

Попробуйте это

from bs4 import BeautifulSoup as bs
my_data = [your html above]
soup = bs(my_data, "lxml")

for head in ["h2", "h3"]:
  target = soup.find(head)
  print(target.findChild().text)

Вывод:

first heading
second heading
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...