Красивый суп получит содержание - PullRequest
0 голосов
/ 29 июня 2018

Я проанализировал HTML-страницу: с помощью Beautifulsoup

badges = soup.body.find('div', attrs={'class': 'col-md-11'})

после этого мой badges объект выглядит так:

<div class="col-md-11">
   <h4>
      <span class="fas fa-user-circle padding-right-sm text-green"></span><span class="label label-success">Avocat definitiv</span>
      <font style="font-weight:bold;">NEDELCU Paul-Iulian</font>, Baroul Dolj
      <span style="color:green;font-weight:bold;"> [activ]</span>
   </h4>
   <p>
      <span class="fas fa-map-marker text-red padding-right-sm"></span>Sediu principal în Baroul Dolj, adresă: mun.Craiova, str.Mihail kogălniceanu, nr.16, jud.Dolj, tel.
   </p>
   <p>
      <span class="padding-right-md text-primary"><span class="fal fa-phone text-primary padding-right-sm"></span></span>
      <span class="text-nowrap"><span class="fal fa-envelope text-info padding-right-sm"></span>paul_iulyan@yahoo.com</span>
   </p>
</div>

Теперь я хочу извлечь NEDELCU Paul-Iulian , Baroul Dolj , [activ] , Sediu main în Baroul Dolj , адрес: мун. Крайова, ул. Михаил Когэлничану, № 16, Джуд. Доль, тел. и * 10101 * paul_iulyan@yahoo.com

Я пытался использовать badges.span.span, но это не сработало.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Оптимизированное решение с одним soup.select методом:

for el in badges.select('h4 font, h4 span:nth-of-type(3), p:nth-of-type(1), p:nth-of-type(2) > span.text-nowrap'):
    if el.name == 'font':
        result.extend([el.text.strip(), el.nextSibling.strip()])
    else:
        result.append(el.text.strip())

print(result)

Вывод (в формате):

['NEDELCU Paul-Iulian',
 ', Baroul Dolj',
 '[activ]',
 'Sediu principal în Baroul Dolj, adresă: mun.Craiova, str.Mihail kogălniceanu, nr.16, jud.Dolj, tel.',
 'paul_iulyan@yahoo.com']
0 голосов
/ 29 июня 2018

Использование soup.find

Демо:

from bs4 import BeautifulSoup
s = """<div class="col-md-11">
   <h4>
      <span class="fas fa-user-circle padding-right-sm text-green"></span><span class="label label-success">Avocat definitiv</span>
      <font style="font-weight:bold;">NEDELCU Paul-Iulian</font>, Baroul Dolj
      <span style="color:green;font-weight:bold;"> [activ]</span>
   </h4>
   <p>
      <span class="fas fa-map-marker text-red padding-right-sm"></span>Sediu principal în Baroul Dolj, adresă: mun.Craiova, str.Mihail kogălniceanu, nr.16, jud.Dolj, tel.
   </p>
   <p>
      <span class="padding-right-md text-primary"><span class="fal fa-phone text-primary padding-right-sm"></span></span>
      <span class="text-nowrap"><span class="fal fa-envelope text-info padding-right-sm"></span>paul_iulyan@yahoo.com</span>
   </p>
</div>"""

soup = BeautifulSoup(s, "html.parser")
val = soup.find("font", {"style":"font-weight:bold;"})
print( "{} {}".format(val.text, val.next_sibling ).strip() )
print( soup.find("span", {"style":"color:green;font-weight:bold;"}).text.strip() )
print( soup.find("span", class_="fas fa-map-marker text-red padding-right-sm").next_sibling.strip() )
print( soup.find("span", class_="text-nowrap").text.strip() )

Выход:

NEDELCU Paul-Iulian , Baroul Dolj
[activ]
Sediu principal în Baroul Dolj, adresă: mun.Craiova, str.Mihail kogălniceanu, nr.16, jud.Dolj, tel.
paul_iulyan@yahoo.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...