Как выполнить веб-скрапинг данных из социальных сетей — актуальное руководство 2023 года

Из этого руководства вы узнаете, как извлекать нужные данные из социальных сетей с помощью Python — мощного инструмента для веб-скрапинга.
4 min read
How to scrape social media

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

С помощью веб-скрапинга вы можете эффективно перемещаться по веб-страницам, выбирать конкретные данные и извлекать их в структурированном формате, например, в виде файла CSV или JSON.

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

Скрапинг социальных сетей с помощью Python

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

  • Python: язык программирования, используемый для данного руководства.
  • pip: менеджер пакетов для Python. Он полезен для получения нужных библиотек.
  • Beautiful Soup: полезный пакет Python для парсинга и извлечения данных из файлов HTML и XML. Информацию о том, как его загрузить, можно найти в этой документации.
  • Selenium: фреймворк для выполнения операций в браузере, который позволяет рендерить и парсить динамические сайты и сайты с поддержкой JavaScript. Более подробную информацию о том, как установить Selenium, вы можете найти в этой официальной документации.

Благодаря этому руководству вы научитесь настраивать собственную среду Python с помощью установки нужных пакетов. После этого останется запустить написанный на Python скрипт для веб-скрапинга данных из интернета. Однако многие социальные сети, например, Facebook и Instagram часто внедряют специальные блокираторы, предназначенные ботов-скраперов: определенные условия для входа в учетную запись, сокрытие полезных данных за кнопками и динамическим контентом или использование JavaScript для отображения данных. Вы будете использовать Selenium, чтобы обойти все эти меры и ограничить веб-скрапинг публичными страницами, чтобы иключить необходимость в учетных данных для входа.

Весь код для этого руководства доступен в этом репозитории GitHub.

Веб-скрапинг Facebook с помощью Python

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

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

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

Как только вы найдете селекторы, которые выделяют нужные вам данные, можно приступать к написанию кода для веб-скрапинга. Откройте файл Python (.py) и импортируйте в него пакеты, которые планируете использовать: Selenium для доступа к содержимому HTML-страницы, Beautiful Soup для парсинга и извлечения конкретных данных и pandas для структурирования и очистки конечного набора данных:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import pandas as pd

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


# Define the URL you want to scrape
url = 'https://www.facebook.com/officialtomcruise/'

# Define the options for the Chrome webdriver
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')

# Create a new instance of the Chrome webdriver with the defined options
driver = webdriver.Chrome(options=options)

# Load the Facebook page in the webdriver
driver.get(url)

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

# Extract the HTML content of the page using BeautifulSoup
html_content = driver.page_source
soup = BeautifulSoup(html_content, 'html.parser')

posts = soup.find_all('div', class_='x1l90r2v') 

# Extract the text content of each post
post_content = [post.text for post in posts]

# Save the scraped data in a CSV file
data = pd.DataFrame({'post_content': post_content})
data.to_csv('facebook_posts.csv', index=False)

# Print the scraped data
print(data)


# Close the webdriver
driver.quit()

Как только вы выделили необходимые данные, можно структурировать их в виде DataFrame (или любой другой подходящей вам структуры). DataFrame — широко используемая структура данных, поскольку она предлагает удобное табличное представление данных:

Веб-скрапинг Twitter с помощью Python

Теперь, когда вы выполнили веб-скрапинг страницы на Facebook, выполните то же самое и для Twitter.

Изучите страницу Тома Круза в Twitter и выделите селектор, который можно использовать для получения доступа к нужным вам данным:

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

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

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

Снова создайте файл Python и используйте следующий код для поиска нужного содержимого:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import pandas as pd
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import WebDriverException
from selenium.webdriver.common.by import By
import time 

# Define the URL you want to scrape
url = 'https://twitter.com/TomCruise'

# Define the options for the Chrome webdriver to mimic a real page
options = Options()
options.add_argument('--headless')
options.add_argument("--incognito")
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')
options.add_argument("--enable-javascript")

# Create a new instance of the Chrome webdriver with the defined options
driver = webdriver.Chrome(options=options)

# Load the Twitter page in the webdriver
driver.get(url)

# Wait for tweets to populate the page
try:
    WebDriverWait(driver, 60).until(expected_conditions.presence_of_element_located(
        (By.CSS_SELECTOR, '[data-testid="tweet"]')))
except WebDriverException:
    print("Something happened. No tweets loaded")

# scroll a bit for more tweets to appear
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(10)

# Extract the HTML content of the page using BeautifulSoup
html_content = driver.page_source
soup = BeautifulSoup(html_content, 'html.parser')

posts = soup.find_all(attrs={"data-testid": "tweetText"})

# Extract the text content of each post
post_content = [post.text for post in posts]

# Save the scraped data in a CSV file
data = pd.DataFrame({'post_content': post_content})
data.to_csv('twitter_posts.csv', index=False)

# Print the scraped data
print(data)

# Close the webdriver
driver.quit()

Веб-скрапинг Instagram с помощью Python

И, наконец, посмотрите, как вы можете выполнить веб-скрапинг в случае с Instagram.

Если вы не вошли в систему, страница Тома Круза в Instagram представляется как медиагалерея, где есть только фотографии и видео. Однако внимательное изучение страницы показывает, что альтернативный текст медиафайлов в большинстве случаев содержит также содержание поста. Это означает, что вы можете считывать URL-адреса медиафайлов и их alt-описания прямо с этой страницы:

Для этого вам требуется только найти селекторы для ваших данных и структурировать DataFrame для сбора информации:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import pandas as pd
# Define the URL you want to scrape
url = 'https://www.instagram.com/tomcruise'

# Define the options for the Chrome webdriver
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')

# Create a new instance of the Chrome webdriver with the defined options
driver = webdriver.Chrome(options=options)

# Load the Instagram page in the webdriver
driver.get(url)

# Extract the HTML content of the page using BeautifulSoup
html_content = driver.page_source
soup = BeautifulSoup(html_content, 'html.parser')

# Collect instagram links
links = soup.find_all('a', href= True) 

# Limit the collected links to posts data

posts = []
for i in links :
    if '/p/' in i:
        posts.append(i)

# Save the scraped data in a CSV file
data = pd.DataFrame({'post_links': posts})
data.to_csv('instagram_posts.csv', index=False)

# Print the scraped data
print(data)

# Close the webdriver
driver.quit()

Веб-скрапинг социальных сетей с помощью Bright Data

Веб-скрапинг может быть трудоемким и утомительным процессом, но не обязательно.

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

Кроме того, если вы хотите получить данные из других источников, вам могут помочь такие инструменты от Bright Data, как Web Scraper IDE и Web Unlocker. Они поставляются с предварительно созданными шаблонами для сокращения объема кода, который вам понадобится написать, и имеют встроенные прокси, которые помогут получить доступ к заблокированному региону или обойти каптчу.  

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

Заключение

В этой статье вы ознакомились с основами веб-скрапинга и получили представление о том, как использовать Python для парсинга данных из таких социальных сетей, как Facebook, Twitter и Instagram. Мы также рассмотрели важные факторы, которые необходимо учитывать при ручном парсинге социальных сетей, и изучили инструменты Bright Data для быстрого и удобного и веб-скрапинга социальных сетей без каких-либо ограничений.

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

More from Bright Data

Datasets Icon
Get immediately structured data
Access reliable public web data for any use case. The datasets can be downloaded or delivered in a variety of formats. Subscribe to get fresh records of your preferred dataset based on a pre-defined schedule.
Web scraper IDE Icon
Build reliable web scrapers. Fast.
Build scrapers in a cloud environment with code templates and functions that speed up the development. This solution is based on Bright Data’s Web Unlocker and proxy infrastructure making it easy to scale and never get blocked.
Web Unlocker Icon
Implement an automated unlocking solution
Boost the unblocking process with fingerprint management, CAPTCHA-solving, and IP rotation. Any scraper, written in any language, can integrate it via a regular proxy interface.

Ready to get started?