Docompose тег по его содержанию / тексту - PullRequest
2 голосов
/ 09 мая 2019

Я хочу разложить тег h4, содержащий фотографии или прототипы текста / содержимого.

Вот HTML-код

     <div class='wrap'>
       <div class='col'>
          <h4 class='h4'>photos</h4>
          <h4 class='h4'>videos</h4>
           <h4 class='h4'>prototypes</h4>
            <h4 class='h4'>weight</h4>
        </div>
      <div class='col'>
          <h4 class='h4'>color</h4>
           <h4 class='h4'>selfie</h4>
            <h4 class='h4'>front</h4>
             <h4 class='h4'>back</h4>
       </div>
       </div>

и вывод, который я хочу:

<div class='wrap'>
       <div class='col'>
          <h4 class='h4'>videos</h4>
            <h4 class='h4'>weight</h4>
        </div>
      <div class='col'>
          <h4 class='h4'>color</h4>
           <h4 class='h4'>selfie</h4>
            <h4 class='h4'>front</h4>
             <h4 class='h4'>back</h4>
       </div>
       </div>

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Вы можете передать регулярное выражение параметру text в find_all. Затем разложить каждый соответствующий тег.

html_doc="""
<div class='wrap'>
   <div class='col'>
      <h4 class='h4'>photos</h4>
      <h4 class='h4'>videos</h4>
       <h4 class='h4'>prototypes</h4>
        <h4 class='h4'>weight</h4>
    </div>
  <div class='col'>
      <h4 class='h4'>color</h4>
       <h4 class='h4'>selfie</h4>
        <h4 class='h4'>front</h4>
         <h4 class='h4'>back</h4>
   </div>
</div>
"""
from bs4 import BeautifulSoup
import re
soup=BeautifulSoup(html_doc,'html.parser')
for tag in soup.find_all('h4',text=re.compile('photos|prototypes')):
    tag.decompose()
print(soup)

выход

<div class="wrap">
<div class="col">

<h4 class="h4">videos</h4>

<h4 class="h4">weight</h4>
</div>
<div class="col">
<h4 class="h4">color</h4>
<h4 class="h4">selfie</h4>
<h4 class="h4">front</h4>
<h4 class="h4">back</h4>
</div>
</div>
1 голос
/ 09 мая 2019

Используйте функцию Python lambda, чтобы найти tag и их text, а затем разложить ().

from bs4 import BeautifulSoup
data='''<div class='wrap'>
       <div class='col'>
          <h4 class='h4'>photos</h4>
          <h4 class='h4'>videos</h4>
           <h4 class='h4'>prototypes</h4>
            <h4 class='h4'>weight</h4>
        </div>
      <div class='col'>
          <h4 class='h4'>color</h4>
           <h4 class='h4'>selfie</h4>
            <h4 class='h4'>front</h4>
             <h4 class='h4'>back</h4>
       </div>
       </div>'''

soup=BeautifulSoup(data,'html.parser')
for item in soup.find_all(lambda tag:tag.name=='h4' and ('photos' in tag.text or 'prototypes' in tag.text) ):
    item.decompose()

print(soup)

Выход:

<div class="wrap">
<div class="col">

<h4 class="h4">videos</h4>

<h4 class="h4">weight</h4>
</div>
<div class="col">
<h4 class="h4">color</h4>
<h4 class="h4">selfie</h4>
<h4 class="h4">front</h4>
<h4 class="h4">back</h4>
</div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...