перейти к содержанию

Как очистить данные Twitter с помощью Python и Selenium: полное руководство

Twitter — это сокровищница ценных данных для бизнеса, исследователей и аналитиков. От отслеживания настроений бренда до анализа актуальных тем — информация Twitter в режиме реального времени предоставляет беспрецедентную информацию. Но поскольку ежедневно публикуется более 500 миллионов твитов, вручную отслеживать Twitter невозможно.

Вот тут-то и приходит на помощь парсинг веб-страниц. Парсинг веб-страниц позволяет автоматически извлекать данные с таких веб-сайтов, как Twitter, и компилировать их в структурированный формат для анализа. И хотя Twitter предоставляет официальные API для доступа к данным, у них есть несколько ограничений, связанных с доступом к историческим данным, ограничениями скорости и процессами утверждения.

Для многих проектов парсинга использование автоматизированного браузерного инструмента, такого как Selenium, представляет собой привлекательную альтернативу API. Selenium позволяет программно взаимодействовать с веб-страницами через настоящий браузер, что затрудняет обнаружение и блокировку по сравнению с другими методами очистки.

В этом руководстве вы узнаете, как использовать возможности Python и Selenium для сбора данных из Twitter. Независимо от того, анализируете ли вы настроения пользователей, составляете списки потенциальных клиентов или проводите академические исследования, эти методы помогут вам извлечь ценную информацию из огромного потока данных Твиттера.

Настройка скребка Selenium Twitter

Прежде чем углубляться в код, вам необходимо настроить среду. Для этого руководства мы будем использовать Python и Selenium. Следуй этим шагам:

  1. Установите Python 3.6+ из python.org

  2. Создайте новый каталог проекта и виртуальную среду:


$ mkdir twitter-scraper 
$ cd twitter-scraper
$ python -m venv venv
$ source venv/bin/activate
  1. Установите Selenium и пакет webdriver-manager, который упрощает установку драйверов:

(venv)$ pip install selenium webdriver-manager
  1. Чтобы Selenium мог автоматизировать ваш браузер, вам необходимо установить драйвер для конкретного браузера. Для этого урока мы будем использовать Chrome. Пакет webdriver-manager автоматически загрузит правильную версию ChromeDriver:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())

Когда наша среда готова, давайте начнем создавать наш скребок!

Очистка страницы профиля Twitter

Мы начнем с извлечения ключевых данных со страницы профиля пользователя Twitter, в том числе:

  • Имя пользователя и отображаемое имя
  • Bio
  • Район
  • ссылка на сайт
  • Дата регистрации
  • Подписки и количество подписчиков
  • Твит имеет значение

Получение страницы с помощью Selenium

Во-первых, нам нужно указать Selenium загрузить определенный URL-адрес профиля Twitter и дождаться отображения страницы:


url = ‘https://twitter.com/GoogleAI‘
driver.get(url)

Нам также необходимо убедиться, что страница полностью загружается, прежде чем пытаться найти элементы. Надежный подход — дождаться присутствия ключевых элементов:


from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10) name = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ‘[data-testid="UserName"]‘)))

Здесь мы ждем до 10 секунд элемента с CSS-селектором. [data-testid="UserName"] присутствовать перед тем, как продолжить. Это гарантирует загрузку профиля.

Поиск элементов для извлечения

Далее нам нужно найти элементы, содержащие точки данных, которые мы хотим извлечь, используя селекторы CSS или XPath.

Атрибуты data-testid, которые Twitter добавляет к определенным элементам, очень полезны для создания надежных селекторов. Хотя имена классов часто меняются, значения data-testid стабильны.

Вот как найти ключевые элементы:


name = driver.find_element_by_css_selector(‘[data-testid="UserName"]‘).text
handle = driver.find_element_by_css_selector(‘[data-testid="UserHandle"]‘).text  
bio = driver.find_element_by_css_selector(‘[data-testid="UserDescription"]‘).text
location = driver.find_element_by_css_selector(‘[data-testid="UserLocation"]‘).text
website = driver.find_element_by_css_selector(‘[data-testid="UserUrl"]‘).text
join_date = driver.find_element_by_css_selector(‘[data-testid="UserJoinDate"]‘).text

following_count = driver.find_element_by_xpath(‘//a[contains(@href,"/following")]/span[1]/span[1]‘).text
followers_count = driver.find_element_by_xpath(‘//a[contains(@href,"/followers")]/span[1]/span[1]‘).text

Селекторы для подписок и количества подписчиков немного сложнее: для поиска нужного числа используется XPath. span элементы внутри a теги, ссылающиеся на страницы «Подписчики» и «Подписчики».

Извлечение твитов пользователя

Чтобы получить твиты пользователя, мы можем найти все элементы, соответствующие селектору текста твита:


tweets = driver.find_elements_by_css_selector(‘[data-testid="tweet"]‘)
for tweet in tweets:
    tweet_text = tweet.find_element_by_css_selector(‘[data-testid="tweetText"]‘).text
    print(tweet_text)

Внутри каждого элемента твита мы также можем анализировать другие точки данных, такие как количество ответов, ретвитов и лайков, полученные из других элементов с атрибутами data-testid:


replies = tweet.find_element_by_css_selector(‘[data-testid="reply"]‘).text
retweets = tweet.find_element_by_css_selector(‘[data-testid="retweet"]‘).text        
likes = tweet.find_element_by_css_selector(‘[data-testid="like"]‘).text

Решение проблем

Несколько проблем могут усложнить парсинг Twitter с помощью Selenium. Вот несколько проблем, на которые следует обратить внимание:

Бесконечная прокрутка

Twitter загружает больше твитов, когда вы прокручиваете страницу вниз. Чтобы очистить большое количество твитов, вам понадобится скрипт прокрутки, чтобы инициировать загрузку дополнительного контента:


driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

Добавление некоторых задержек и отслеживание положения прокрутки поможет вам извлечь все доступные твиты.

Ограничение скорости

Как и многие другие сайты, Twitter ограничивает доступ, чтобы препятствовать использованию ботов и парсеров. Распределите свои запросы и рассмотрите возможность использования нескольких IP-адресов, чтобы избежать блокировки.

Непоследовательная структура элемента

Продвигаемые твиты, ответы и другие варианты могут нарушить работу селекторов. Протестируйте свой код на различных профилях, чтобы выявить крайние случаи, которые могут нарушить извлечение.

Стены аутентификации

Для доступа к некоторым данным Twitter требуется вход в систему. Вы можете автоматизировать аутентификацию с помощью Selenium, но вы можете нарушить условия обслуживания Twitter, поэтому действуйте осторожно.

Этический соскоб

Прежде чем парсить Twitter, обратите внимание, что агрессивные парсеры могут быть заблокированы или даже повлечь за собой юридические последствия. Соблюдайте правила и условия обслуживания Twitter robots.txt. Не перегружайте сайт запросами, используйте данные ответственно и соблюдайте конфиденциальность пользователей.

Как правило, собирайте только общедоступные данные, не передавайте очищенные личные данные и используйте очищенные данные только по назначению. Подумайте, подходит ли вам использование официального API Twitter.

Альтернативы и следующие шаги

Разработка и поддержка парсера Twitter вручную может занять много времени. К счастью, существует несколько парсеров на основе Selenium с открытым исходным кодом, например:

  • твиттер-скребок – Простой сканер, не требующий аутентификации.
  • ТвитСкрапер – Очищает твиты и метаданные на основе поисковых запросов.
  • сладкий – Более многофункциональный парсер, поддерживающий вход в систему, геолокацию и многое другое.

Эти проекты обеспечивают отличную основу для удовлетворения ваших конкретных потребностей.

В дальнейшем вы можете расширить свой парсер, чтобы извлекать дополнительные точки данных, такие как хэштеги, упоминания, изображения и видео. Вы можете запланировать периодический запуск парсера и отслеживать определенные условия. Или интегрируйте конвейер анализа, чтобы получать ценную информацию и визуализировать тенденции на основе собранных данных.

Заключение

Selenium — мощный инструмент для сбора данных Twitter в больших масштабах. Обладая некоторыми знаниями Python, вы можете извлечь ценную информацию из профилей и твитов, к которым нелегко получить доступ через официальный API.

Ключом к успеху является понимание структуры DOM Twitter и тщательная разработка селекторов для точного определения нужных вам данных. Использование таких инструментов, как атрибуты data-testid, помогает обеспечить отказоустойчивое извлечение. Но не менее важно действовать этично и соблюдать условия сайта, чтобы избежать проблем.

Нет недостатка в возможностях использования веб-скрапинга для использования потока данных Twitter. Надеемся, что это руководство послужит основой для начала использования этого богатого ресурса для собственного анализа и применения.

Как всегда, не стесняйтесь обращаться по любым вопросам. Приятного скрежетания!

Присоединяйтесь к беседе

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *