Вы можете использовать селекторы CSS для этого.Это делается с помощью Beautiful Soup 4.7+.Здесь мы нацеливаемся на те же div
и классы, которые вы сделали выше, но мы также ищем потомка li
и его прямого потомка > strong
.Затем мы используем пользовательский псевдокласс :contains()
, чтобы гарантировать, что элемент strong
содержит текст Extended Version:
.Мы используем select_one
вызов API, поскольку он вернет первый соответствующий элемент, select
вернет все элементы, которые совпадают в списке, но нам нужен только один.
Как только у нас будет элемент strong
мы знаем, что следующий текстовый узел имеет необходимую информацию, поэтому мы можем просто использовать next_sibling
, чтобы получить этот текст:
from bs4 import BeautifulSoup
import requests
page = requests.get("https://www.symantec.com/security_response/definitions.jsp?pid=sep14")
soup = BeautifulSoup(page.content, 'html.parser')
extended = soup.select_one('div.unit.size1of2.feedBody li:contains("Extended Version:") > strong')
print(extended.next_sibling)
Вывод
4/18/2019 rev. 7
РЕДАКТИРОВАТЬ: As @QHarr упоминает в комментариях, вы, скорее всего, можете уйти с более упрощенным strong:contains("Extended Version:")
.Важно помнить, что :contains()
ищет все дочерние текстовые узлы данного элемента, даже субтекстовые узлы дочерних элементов, поэтому важно быть конкретным.Я бы не стал использовать :contains("Extended Version:")
, поскольку он нашел бы div
, элементы списка и т. Д., Поэтому при указании (как минимум) strong
должно сузить выбор настолько, чтобы дать вам именно то, что вам нужно.