Извлечь определенную строку с веб-страницы с помощью Beautiful Soup

У меня есть ряд URL-адресов, которые я просматриваю и хочу получить все в строке «Известно как» в верхней части страницы (пример). Однако это есть не на каждом стадионе (пример).

1 Arrowhead Drive, Kansas City, MO 64129
Years Active: 1972-2021 (406 games)
===> Known As: Arrowhead Stadium (1972-2020), GEHA Field at Arrowhead Stadium (2021-2021) <===
Surfaces: astroturf (1972-1993), grass (1994-2021)

Вот код, чтобы вернуть все в div, в котором он находится, но я не уверен, как действовать и вернуть текст в конкретном теге p, который я хочу.

url_base = "https://www.pro-football-reference.com/stadiums/KAN00.htm"
response = requests.get(url_base)
soup = bs(response.text, "html.parser")
div = soup.find("div", {"id":"meta"})
<div id = "meta">
<div>
<h1 itemprop = "name">GEHA Field at Arrowhead Stadium History</h1>
<p>1 Arrowhead Drive, Kansas City, MO 64129</p><p><b>Years Active:</b> 1972-2021 (<a href = "https://stathead.com/football/tgl_finder.cgi?request=1&amp;match=career&amp;year_min=1950&amp;year_max=2022&amp;game_type=E&amp;game_num_min=0&amp;game_num_max=99&amp;week_num_min=0&amp;week_num_max=99&amp;temperature_gtlt=lt&amp;stadium_id=KAN00&amp;c5val=1.0&amp;order_by=pass_td">406 games</a>)<p><b>Known As:</b> Arrowhead Stadium (1972-2020), GEHA Field at Arrowhead Stadium (2021-2021)<p><b>Surfaces:</b> astroturf (1972-1993), grass (1994-2021)<p><b>Teams:</b><ul><li><a href = "/teams/kan/">Kansas City Chiefs</a> (1972-2022)</li><li> Regular Season: <a href = "https://stathead.com/football/tgl_finder.cgi?request=1&amp;match=game&amp;team_id=kan&amp;year_min=1950&amp;year_max=2022&amp;game_type=R&amp;game_num_min=0&amp;game_num_max=99&amp;week_num_min=0&amp;week_num_max=99&amp;temperature_gtlt=lt&amp;stadium_id=KAN00&amp;c5val=1.0&amp;order_by=pass_td">233-155-1</a></li><li> Playoffs: <a href = "https://stathead.com/football/tgl_finder.cgi?request=1&amp;match=game&amp;team_id=kan&amp;year_min=1950&amp;year_max=2022&amp;game_type=P&amp;game_num_min=0&amp;game_num_max=99&amp;week_num_min=0&amp;week_num_max=99&amp;temperature_gtlt=lt&amp;stadium_id=KAN00&amp;c5val=1.0&amp;order_by=pass_td">9-8</a></li></ul></p>
<button class = "opener" data-class = "open" data-id = "info" data-type = "hide_after" id = "meta_more_button">More venue info</button>
<script>
// see sr.menus.js:sr_menus_checkInfoCookie to explain
function sr_menus_checkInfoCookie_inline(browserType) {
    var el_info = document.getElementById('info');
    var el_button = document.getElementById('meta_more_button');
    var bling_len = 0;    
    if (!el_button || !el_info || !el_info.classList) { console.info('no meta_button'); return; }
    var el = el_button;
    var siblingsHidden = 0;
    while (el = el.previousSibling) { if ((el.nodeType === 1) && (el.offsetWidth <= 0 || el.offsetHeight <= 0)) { siblingsHidden++; } }
    var button_cookie = false;
    if (browserType === 'desktop') {  button_cookie = vjs_readCookie('meta_more_button');   }
    // We allow up to four of bling lines or additional player bio data entries in mobile.
    if (el_info && el_button && (button_cookie || (siblingsHidden + bling_len <= 4))) {el_button.parentNode.removeChild(el_button); el_info.classList.add('open');  }
    else { el_button.classList.add('show');  }
}
if (Modernizr.desktop || Modernizr.laptop) { sr_menus_checkInfoCookie_inline('desktop'); } else { sr_menus_checkInfoCookie_inline('mobile'); }
var sr_menus_checkInfoCookie_run_inline = true;
</script>
</p></p></p></div>
</div>
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете выбрать тег <b> с текстом «Известно как», а затем получить следующий текстовый брат:

txt = (
    soup.select_one('b:-soup-contains("Known As")')
    .find_next_sibling(text=True)
    .strip()
)
print(txt)

Отпечатки:

Arrowhead Stadium (1972-2020), GEHA Field at Arrowhead Stadium (2021-2021)

Это дает NotImplementedError: ':-soup-contains' pseudo-class is not implemented at this time в моей системе. Можете ли вы объяснить, что я делаю неправильно?

akaAbdullahMateen 06.05.2022 00:17

@akaAbdullahMateen Пожалуйста, обновите версию beautifulsoup, которую вы используете 4.10.0

Andrej Kesely 06.05.2022 00:20

Большое спасибо. Позвольте мне попробовать обновить beautifulsoup. Я дам вам знать, если это сработало :)

akaAbdullahMateen 06.05.2022 00:22

Огромное спасибо. Проблема действительно была в версии beautifulsoup. Похоже, что использование Anaconda Python имеет довольно устаревшие пакеты.

akaAbdullahMateen 06.05.2022 00:24

Другие вопросы по теме