Прежде всего вам не нужно создавать два объекта BeautifulSoup.Что касается вашего вопроса:
import re
for link in links:
soup = BeautifulSoup(requests.get(link).content, "html.parser")
header = soup.find('h1').text
header = re.sub(r'.*<<(.*)>>.*', r'\g<1>', header)
limit = [elem.text.strip() for elem in soup.find_all('li') if re.search(r'^Limit-at:', elem.text)][0].split('\n')[0]
print(header, limit)
Я использовал предоставленный вами html для проверки вышеуказанного решения.
Итак, вы получаете списки, потому что вы используете find_all
, который всегда возвращает список.
Для заголовка я использовал find
тоже самое, но он возвращает только первое совпадение.Затем я делаю некоторую подстановку регулярных выражений, чтобы удалить все, кроме нужной части теста заголовка.
Для предела все немного сложнее, потому что он находится во вложенном элементе li
.Поэтому выполните цикл по всем элементам li
, добавив элемент, текстовый атрибут которого начинается с «Limit-at:».Поскольку это будет список, я беру элемент 0, разбивая его на символ новой строки, и получается новый список.Затем возьмите нулевой элемент этого, чтобы избавиться от части «Последнее обновление» этого текста.