Как парсить комментарии в Instagram за 5 минут с использованием Selenium
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
Парсинг комментариев
Прежде чем мы начнем парсить, нам нужно загрузить больше комментариев, так как на странице показано очень мало комментариев. Посмотрите на кнопку с плюсом (кнопка для загрузки больше комментариев), если мы проверим эту кнопку, она принадлежит <svg>
с aria-label="Загрузить больше комментариев"
, мы можем использовать эту информацию для автоматического нажатия.
Мы можем использовать метод 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>
.
С помощью метода 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'])
Легко, да?
вот и все, спасибо за чтение этой статьи :)