Продолжаем цикл статей «Использование Python в OSINT». В этот раз рассмотрим скрапинг. Для тех, кто не в курсе — это извлечение данных с веб-сайта. Далее покажу, как использовать Python для скрапинга сайтов.
Еще по теме: Использование Python для работы с веб-архивом
Скрапинг сайтов
Если говорить о скрапинге и Python, то писать собственный скрипт с нуля для каждой задачи — чаще всего не лучшее решение. Лучше сначала найти и попробовать разные готовые решения:
- Расширение Web Scraper для Chrome.
- Расширение AnyPicker для Chrome.
- ScrapeStorm
- Если вам нужно собрать данные из социальных сетей, попробуйте использовать что-то, созданное специально для конкретной платформы. Например, инструмент yttool для YouTube или Stweet для Twitter.
Скрапинг сайтов на Python
Но иногда вы можете столкнуться с задачей, для которой нет готовых решений. В таком случае придется писать скрипт. Для скрапинга сайтов есть множество пакетов Python:
- Scrapy
- Selenium
- ZenRows
- BeautifulSoup
Мы будем использовать пакет BeautifulSoup (https://pypi.org/project/beautifulsoup4/). Он установлен по умолчанию.
Пакет Beautifulsoup также может быть полезен для работы с данными в формате XML Вы можете столкнуться с ним, в частности, при получении данных из какого-либо API. В этом случае помимо Beautifulsoup следует использовать пакет LXML (https://lxml.de).
Запустите скрапинг.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Импорт запросов и пакетов BeautifulSoup: import requests from bs4 import BeautifulSoup # Создать переменную с URL-адресом веб-страницы: url = "https://pypi.org/project/duckduckgo-search/" # Сделать https-запрос: web_page = requests.get(url) # Создать объект html.parser: soup = BeautifulSoup(web_page.content, "html.parser") # Найти заголовок h1 в html коде веб-страницы: header = soup.find("h1").get_text() # Вывести заголовок h1: print(header) |
Мы используем CSS-селекторы для поиска элементов на веб-странице:
- h1 — элемент с тегом h1.
- .headers — элементы с классом заголовков.
- #header — элементы с идентификатором заголовка.
- div.reblocks — элементы с тегом div и классом redblocks.
- [autofocus="true"] — элементы с атрибутом autofocus со значением «true«
Еще CSS-селекторы:
https://www.freecodecamp.org/news/css-selectors-cheat-sheet/
Самый простой способ узнать, какой селектор соответствует тому или иному html-элементу, — посмотреть исходный код страницы с помощью инструментов разработчика, которые есть в каждом браузере.
А для скрапинга страниц со сложной структурой, которая содержит множество вложенных элементов, можно использовать специальные браузерные расширения, отображающие полный путь (path) к элементу. Например, HTML DOM-навигация.
Часто бывает так, что код, который отображается при загрузке сайта скриптами Python, сильно отличается от того, что отображается в браузере. Это связано с тем, что некоторые элементы добавляются после загрузки страницы путем выполнения кода JavaScript.
Чтобы понять, что я имею в виду, попробуйте посмотреть на код учетной записи Twitter с помощью View Rendered Source.
С его помощью вы можете наглядно сравнить, как выглядит HTML-код сразу после получения запроса от сервера, и как он выглядит после выполнения определенных действий на странице (попробуйте немного прокрутить ленту вниз и снова перезапустить расширение).
Для скрапинга сайтов, код которых сильно меняется после выполнения кода JavaScript в браузере, можно использовать Selenium. Он позволяет использовать Python для открытия разных браузеров и имитации действий пользователя в них.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Работа с API в Python [Использование Python в OSINT]
- Использование Python для получения информации о домене