Функция BS4 getText, выдающая неожиданный вывод - PullRequest
2 голосов
/ 17 октября 2019

Следующий образец HTML дает разные результаты в зависимости от формата стиля текста. Вот пример, когда в одной строке

card = """
<ul class="wrapper--inline-block float--left margin-top--15 padding-left--20 font--weight-300"><li><span class="font--weight-500">Minimum Qualification:</span> Bachelor</li><li><span class="font--weight-500">Experience Level:</span> Graduate trainee</li><li><span class="font--weight-500">Experience Length:</span> 1 year</li></ul>
"""

Вывод:

Minimum Qualification: BachelorExperience Level: Graduate traineeExperience Length: 1 year

И когда образец HTMLотформатированный

card = """
<ul class="wrapper--inline-block float--left margin-top--15 padding-left--20 font--weight-300">
<li><span class="font--weight-500">Minimum Qualification:</span> Bachelor</li>
<li><span class="font--weight-500">Experience Level:</span> Graduate trainee</li>
<li><span class="font--weight-500">Experience Length:</span> 1 year</li>
</ul>
"""

Выход

Minimum Qualification: Bachelor
Experience Level: Graduate trainee
Experience Length: 1 year

Вопрос в том, как сделать так, чтобы в первом случае получался желаемый результат, как в случае два. Вот мой текущий код

qualifications=  BeautifulSoup(card, "html.parser")
print(qualifications.getText())

Ответы [ 2 ]

1 голос
/ 17 октября 2019

Я предполагаю, что регистр для bs4 печатает содержимое так же, как он его получает (в одну строку или в другую строку). Но для вашего конкретного вопроса вы можете сначала найти <li> теги, а затем распечатать их содержимое. Все содержимое каждого элемента будет напечатано в отдельной строке.

qualifications=  BeautifulSoup(card, "html.parser")
soup = qualifications.findAll('li')
for i in soup:
     print(i.getText())

Вы получите это:

Minimum Qualification: Bachelor
Experience Level: Graduate trainee
Experience Length: 1 year
1 голос
/ 17 октября 2019

Используйте separator="\n" для получения желаемого выхода,

qualifications.getText(separator="\n")

Edit-1:

>>> card = """
<ul class="wrapper--inline-block float--left margin-top--15 padding-left--20 font--weight-300"><li><span class="font--weight-500">Minimum Qualification:</span> Bachelor</li><li><span class="font--weight-500">Experience Level:</span> Graduate trainee</li><li><span class="font--weight-500">Experience Length:</span> 1 year</li></ul>
"""

>>> qualifications=  BeautifulSoup(card, "html.parser")

>>> for li in qualifications.find_all('li'):
     print(li.get_text()) 
Minimum Qualification: Bachelor
Experience Level: Graduate trainee
Experience Length: 1 year
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...