CoderCastrov logo
CoderCastrov
Питон

Как парсить комментарии в Instagram за 5 минут с использованием Selenium

Как парсить комментарии в Instagram за 5 минут с использованием Selenium
просмотров
2 мин чтение
#Питон
Table Of Content

    Instagram - одна из самых популярных социальных сетей, особенно среди подростков и молодых взрослых. Если вам нужно собрать текстовые данные, раздел комментариев в Instagram - ваша золотая жила.

    Подготовка окружения

    Сначала вам понадобится библиотека под названием Selenium. Вы можете скачать и установить ее с помощью pip или conda. Затем вам нужно скачать драйвер Chrome с этого URL: https://chromedriver.chromium.org/downloads

    Затем откройте свой текстовый редактор или блокнот и загрузите соответствующие библиотеки

    import requests
    import pandas as pd
    from selenium import webdriver
    import time, urllib.request

    Получение URL-адреса

    Нам нужно указать URL-адрес поста в Instagram, который мы хотим спарсить, и путь каталога, где мы сохраняем наш драйвер Chrome.

    url = 'https://www.instagram.com/p/CU5IKigF-k2/'
    PATH = r"C:\Users\Fachriza\Downloads\Programs\chromedriver_win32\chromedriver.exe"

    Затем нам нужно создать экземпляр webdriver и передать path в качестве аргумента, а затем получить URL-адрес с помощью метода get() из webdriver.

    driver = webdriver.Chrome(PATH)
    driver.get(url)

    откроется новое окно Chrome

    image from vans instagram

    Парсинг комментариев

    Прежде чем мы начнем парсить, нам нужно загрузить больше комментариев, так как на странице показано очень мало комментариев. Посмотрите на кнопку с плюсом (кнопка для загрузки больше комментариев), если мы проверим эту кнопку, она принадлежит <svg> с aria-label="Загрузить больше комментариев", мы можем использовать эту информацию для автоматического нажатия.

    button to load more comments

    Мы можем использовать метод find_element_by_css_selector, чтобы получить элемент кнопки, и использовать метод click, чтобы нажать на эту кнопку. Вот код для автоматического нажатия 10 раз. Кстати, если Instagram попросит вас войти, просто войдите в свою учетную запись.

    for i in range(0, 10):
      time.sleep(5)
      driver.find_element_by_css_selector("svg[aria-label='Загрузить больше комментариев']").click()

    Теперь мы можем спарсить комментарии. Если мы проверим текст комментария, мы увидим, что он принадлежит тегу <span>, но у тегов <span> нет атрибутов, поэтому мы не можем получить доступ к этому элементу напрямую. Но если вы посмотрите на HTML-код, вы увидите, что <span> являются дочерними элементами тега <div> с class=C4VMK, мы можем использовать этот родительский элемент, чтобы получить доступ к <span>.

    comment text

    С помощью метода find_elements_by_css_selector мы можем получить доступ к тегу <span> и получить его текст.

    comments = driver.find_elements_by_css_selector('div.C4VMK > span')
    comments_text = [comment.text for comment in comments]

    и, наконец, мы можем сохранить только что спарсенные комментарии в формате dataframe с помощью pandas, чтобы вы могли экспортировать его в формате xlsx или csv.

    df_comments = pd.DataFrame(comments_text, columns=['comment'])

    Легко, да?

    вот и все, спасибо за чтение этой статьи :)