Извлечение текста из встроенных твитов с помощью Python и BeautifulSoup - PullRequest
0 голосов
/ 28 июня 2018

Мне нужно отдельно извлечь текст из встроенных твитов на веб-странице. Приведенный ниже код работает нормально, но мне нужно избавиться от начальных и конечных строк, таких как: Skip Twitter post by... и End Twitter post by..., дата и Report, оставляя только твиты. Я даже не вижу, откуда эти строки и какой тег использовать. Буду очень признателен за вашу помощь!

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( 'div', {'class': 'social-embed'})]
tweets = '\n'.join(article_soup)
print(tweets)

1 Ответ

0 голосов
/ 28 июня 2018
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 еще раз - я предлагаю вам разобраться с этой проблемой. Как только я получил твиты с исходным вопросом, я нашел теги и получил те, которые вы ожидали получить, каждый твит в отдельной строке в моем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...