#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']
Ответ №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)