как получить внешний тег <li>с внутренним тегом <li>или другим текстом тега, используя BeautifulSoup в python - PullRequest
1 голос
/ 31 января 2020

Я хочу выводить только внешний текст тега li.

  from bs4 import BeautifulSoup

  html = BeautifulSoup("""

      <ul>

            <li><a href="#">B2B Marketing</a>
                   <ul>
                        <li><a href="offerings/b2bmarketing/outboundai.php"> Campagin </a></li>
                        <li><b>Inbound AI </b>Enrich inbound leads</a></li>
                   </ul>
           </li>

           <li>Marketing Data Analysis
                   <ul>
                        <li><a href="offerings/marketingdataanalysis/event360ai.php"><b>Event 360 AI </b></a></li>
                   </ul>
          </li>

          <li class="drop-down"><a href="#">Enrichment API</a>
          </li>


      </ul>

      """)

  print([i.text.strip() for i in html.findAll('li')])

Выводится весь текст содержимого html.

['B2B Marketing\n\n Campagin \nInbound AI Enrich inbound leads', 'Campagin', 'Inbound AI Enrich inbound leads', 'Marketing Data Analysis\n          \nEvent 360 AI', 'Event 360 AI', 'Enrichment API\n\nAPI  Technographics, Firmographics, Intent data', 'API  Technographics, Firmographics, Intent data']

Но

Вывод должен быть: -

  [
   'B2B Marketing : Campagin, Enrich inbound leads',
   'Marketing Data Analysis : Event 360 AI',
   'Enrichment API'
  ]

Пожалуйста, помогите мне решить эту проблему

1 Ответ

0 голосов
/ 01 февраля 2020

Как это?

from simplified_scrapy.simplified_doc import SimplifiedDoc
html = '''<ul>
            <li><a href="#">B2B Marketing</a>
                   <ul>
                        <li><a href="offerings/b2bmarketing/outboundai.php"> Campagin </a></li>
                        <li><b>Inbound AI </b>Enrich inbound leads</a></li>
                   </ul>
           </li>
           <li>Marketing Data Analysis
                   <ul>
                        <li><a href="offerings/marketingdataanalysis/event360ai.php"><b>Event 360 AI </b></a></li>
                   </ul>
          </li>
          <li class="drop-down"><a href="#">Enrichment API</a>
          </li>
      </ul>
'''
doc = SimplifiedDoc(html)
lis = doc.ul.lis
out = []
for li in lis:
  if li.b and li.b.nextText():
    li.removeElement('b')
  name = li.firstText() if li.firstText() else li.a.text
  tmp = ''
  for l in li.lis:
    tmp += l.text+','
  if tmp:
    out.append(name+':'+tmp[0:-1])
  else:
    out.append(name)
print (out)

Результат:

['B2B Marketing:Campagin,Enrich inbound leads', 'Marketing Data Analysis:Event 360 AI', 'Enrichment API']
...