Я собираюсь использовать BeautifulSoup, чтобы найти таблицу, которая определена в «логическом определении контента» по следующим ссылкам:
1) https://www.hl7.org/fhir/valueset-account-status.html
2) https://www.hl7.org/fhir/valueset-activity-reason.html
3) https://www.hl7.org/fhir/valueset-age-units.html
На страницах может быть определено несколько таблиц. Таблица, которую я хочу, находится под <h2> tag with text “content logical definition”
. На некоторых страницах может отсутствовать какая-либо таблица в разделе «логическое определение контента», поэтому я хочу, чтобы таблица была нулевой. К настоящему времени я попробовал несколько решений, но каждое из них возвращает неправильную таблицу для некоторых страниц.
Последнее решение, предложенное alecxe, таково:
import requests
from bs4 import BeautifulSoup
urls = [
'https://www.hl7.org/fhir/valueset-activity-reason.html',
'https://www.hl7.org/fhir/valueset-age-units.html'
]
for url in urls:
r = requests.get(url)
soup = BeautifulSoup(r.content, 'lxml')
h2 = soup.find(lambda elm: elm.name == "h2" and "Content Logical Definition" in elm.text)
table = None
for sibling in h2.find_next_siblings():
if sibling.name == "table":
table = sibling
break
if sibling.name == "h2":
break
print(table)
Это решение возвращает значение null, если в разделе «логическое определение контента» нет таблицы, но для второго URL-адреса, имеющего таблицу в «логическом определении контента», оно возвращает неправильную таблицу, таблицу в конце страницы.
Как можно Я редактирую этот код, чтобы получить доступ к таблице, определенной сразу после тега с текстом «логическое определение контента», и если в этом разделе нет таблицы, он возвращает null.