Как я могу изменить код, чтобы сделать его таким, чтобы HTML-теги не отображались

#python #web-scraping #beautifulsoup

Вопрос:

 from bs4 import BeautifulSoup
import requests

url = 'https://www.mediacorp.sg/en/your-mediacorp/our-artistes/tca/male-artistes/ayden-sng-12357686'

artiste_name = 'celeb-name'

page = requests.get(url)

soup = BeautifulSoup(page.text, 'lxml')

txt = soup.find_all('h1', attrs={'class':artiste_name})

print(txt)
 

с помощью приведенного выше кода я получаю вывод:

 [<*h1 class="celeb-name">Ayden Sng</h1*>] #asterisks added to show h1 tags
 

Что мне нужно изменить в моем коде или как я могу сделать так, чтобы в качестве выходных данных я получал только ‘Ayden Sng’?

Комментарии:

1. Вероятно, будет несколько лучше (в долгосрочной перспективе), если вы будете использовать html5lib синтаксический анализатор Beautiful Soup, а не lxml .

Ответ №1:

Выполните итерацию по каждой записи txt списка и извлеките ее txt свойство:

 txt = [element.text for element in txt] # ['Ayden Sng']
 

Repl.it

Ответ №2:

 from bs4 import BeautifulSoup 
import requests

url = 'https://www.mediacorp.sg/en/your-mediacorp/our-artistes/tca/male-artistes/ayden-sng-12357686'

artiste_name = 'celeb-name'

page = requests.get(url)

soup = BeautifulSoup(page.text, 'lxml')

txt = soup.find_all('h1', attrs={'class':artiste_name})

print(txt[0].text)
 

если существует более одного повторного использования, вы можете использовать этот код:

 from bs4 import BeautifulSoup 
import requests

url = 'https://www.mediacorp.sg/en/your-mediacorp/our-artistes/tca/male-artistes/ayden-sng-12357686'

artiste_name = 'celeb-name'

page = requests.get(url)

soup = BeautifulSoup(page.text, 'lxml')

txt = soup.find_all('h1', attrs={'class':artiste_name})
for i in txt:
  print(i.text)