import requests
from bs4 import BeautifulSoup
r = requests.get('https://www.bbc.co.uk/news/uk-44496876')
soup = BeautifulSoup(r.content, "html.parser")
article_soup = [s.get_text() for s in soup.find_all('p', {'dir': 'ltr'})]
tweets = '\n'.join(article_soup)
print(tweets)
Если вы также хотите получить автора твитов, это немного сложно, так как у вас нет тега для автора. Поэтому я использовал код Python, чтобы удалить все теги между авторами следующим образом:
import requests
from bs4 import BeautifulSoup
r = requests.get('https://www.bbc.co.uk/news/uk-44496876')
soup = BeautifulSoup(r.content, "html.parser")
articles_soup = [s for s in soup.find_all('blockquote', {'class': 'twitter-tweet'})]
tweets = []
for article_soup in articles_soup:
tweet = article_soup.find('p').get_text()
# The last <a href='...'></a> is the date, others are part of the tweet
date = article_soup.find_all('a')[-1].get_text()
tweet_author = article_soup.get_text()[len(tweet):-len(date)].strip()
tweets.append((tweet_author, tweet))
print(tweets)
Note1 : если вы хотите получить только части tweet_author
, вы можете легко взять первый элемент кортежа и настроить его, чтобы получить нужный объект.
Примечание2 : пример кода вопроса не всегда возвращает твиты, проблема связана со страницей html, поскольку время от времени некоторые элементы не возвращаются. Быстрое решение - запустить метод requests.get
еще раз - я предлагаю вам разобраться с этой проблемой.
Как только я получил твиты с исходным вопросом, я нашел теги и получил те, которые вы ожидали получить, каждый твит в отдельной строке в моем коде.