Полное руководство по парсингу сайтов на Python
В этой статье представлено подробное практическое руководство по парсингу через Пайтон. Здесь рассказывается об основных методах, инструментах. Будут освещены технические, юридические, этические аспекты. Эта статья будет полезна программистам, аналитикам, маркетологам, предпринимателям.
Что такое парсинг сайтов и зачем он нужен
Парсинг (веб-скрапинг) — это сбор информации с любого веб-ресурса, а также её анализ, обработка, структурирование, готовая выдача в виде таблицы. Сбор, преобразование, аналитика проводятся автоматически специальными программами. Термин происходит от английского слова parsing — разбор.
Сервис, который собирает контент конкретной страницы, преобразует их, называется парсером. Он выполнит все задачи, а человеку придётся только проверить готовый документ, что практически исключает вероятность ошибки.
Скрапинг позволяет быстро проанализировать, систематизировать огромный объём знаний. Его используют SEO-специалисты, маркетологи, предприниматели, веб-мастера, исследователи рынка.
Основные случаи использования
Парсинг применяется для различных целей. Он широко используется в бизнесе, IT-сфере, техническом обслуживании веб-ресурсов.
Сферы применения:
- анализ компаний-конкурентов;
- мониторинг проектов конкурентов;
- сбор знаний о конкурентах: наименований товаров (услуг), артикулов, цен, других особенностей ассортимента;
- создание базы (помощь бизнесу);
- изучение структуры проектов конкурентов;
- поиск неправильных 301 и 302 редиректов;
- выявление битых ссылок;
- проверка правильности работы Robots.txt;
- поиск проблем H1, мета-тегов Title, Description;
- выявление нежелательных копий, которые могут индексироваться, отображаться в поисковиках;
- проверка корректности настройки микроразметки;
- составление технических заданий веб-мастерам для исправления обнаруженных проблем.
Знания о конкурентах поможет предпринимателю грамотно наполнить свой собственный интернет-магазин. Парсить веб-ресурсы конкурентов можно как единоразово, так и постоянно. Обнаруженные технические проблемы позволят легко их исправить.
Основы работы с HTTP-запросами
Почти все десктопные веб-ресурсы, мобильные приложения функционируют благодаря запросам по протоколу HTTP, что обеспечивает им взаимодействие с интернетом. Ими пользуются при веб-скрапинге.
Что такое HTTP-запросы (GET, POST) и как их использовать
Для бесперебойного функционирования веб-ресурса требуется, чтобы пользователь мог отправить или получить информацию от сервера. Эту задачу выполняет HTTP-запрос. Его структура очень проста:
- заголовок — может содержать дополнения к вопросу или ответу по схеме «название: непосредственное значение».
- «тело» — это фактическое содержание, которые передаёт браузер, когда клиент обращается к серверу.
Есть два основных метода передачи HTTP:
- GET — предназначен для чтения с веб-ресурса, доступа к избранной странице. Содержимое пересылается в заголовке HTML.
- POST — используется для отправления ответов либо в «теле». Чаще всего через него передаются HTML-формы. «Тело» появляется только в тех случаях, когда пользователь ответил через эту функцию.
Разница между ними невелика. У ГЕТ много неудобных особенностей:
- сохраняются в кэше Google, веб-архиве, логах журнала, истории браузера, закладках.
- их можно случайно переслать.
Его лучше использовать для таких задач:
- передача параметров по ссылке;
- поисковые фильтры каталога интернет-магазина;
- любые безопасные действия.
Только благодаря POST можно пересылать важное: пароли, логины, реквизиты карточек банка.
Когда удобен POST:
- отправление файлов (он поддерживает тип кодирования multipart/form-data);
- все формы с банковскими картами, паролями;
- любые формы заявок, которые содержат персональные знания о конкретном человеке.
Вывод: POST применяется для передачи всех опасных запросов, где содержится любая важная или конфиденциальные сведения.
Использование библиотеки Requests для отправки запросов и получения данных с сайтов
Реквестс позволяет пользователям отправлять HTTP-запросы, получать отклики. Удаётся написать код за пару минут. Требуется установить IDE (например, Visual Studio Code или PyCharm), а затем загрузить библиотеку в эту IDE.
Основные функции:
- requests.get — для отправки (включает URL-адрес);
- params — настройка передачи параметров;
- НТТР-коды состояния — помогают проверить итоги, отображаются как числа от 100 до 500;
- content — позволяет получить ответ, опубликованный в виде байтов;
- text — преобразует решение, отображает его текстом;
- headers — изучает заголовки, помогает узнать всё о сервере, дату, время обращения туда, кодировку;
- delete — удаление объектов;
- put — требование сохранить объект документом под конкретным URI;
- patch — для преобразования;
- head — ответ только внутри заголовка, без «тела»;
- параметр auth — аутентификация;
- функция verify — SSL-сертификаты;
- класс Session — позволяет человеку контролировать правильность выполнения, а также ускорять процесс.
Получится JSON-текст, который может служить словарём. К этому словарю можно получить доступ через ключ.
Примеры простых запросов и получения HTML-страниц
ГЕТ (заголовок).
ПОСТ («тело»).
Парсинг веб-сайтов с использованием Python: пошаговая инструкция
Питон — это язык программирования, который широко используется специалистами из разных IT-сфер. Он полезен для скрапинга: можно быстро составить код, который автоматически прочитает, соберёт, проанализирует, выделит значимое. У Пайтон есть много полезных опций. Он хорошо взаимодействует с другими языками программирования. Пошаговая инструкция поможет пользователям успешно достигать целей.
Шаг 1: Установка и настройка инструментов для парсинга
Для создания парсера вручную потребуются такие инструменты: Питон (желательно версия 3.4), менеджер пакетов pip. Новейшие версии содержат эти настройки по умолчанию, поэтому отдельно скачивать его не стоит.
Следует загрузить Пайтон на компьютер, выполнить указания мастера настройки, убедиться, что всё скачалось успешно.
Затем надо скачать библиотеки для скрапинга: BeautifulSoup, Реквестс, Scrapy, Selenium, lxml или pyquery. Их удаётся мгновенно скачивать: ввести всего лишь одну команду: pip install (необходимый сервис).
После этого надо настроить IDE — интегрированную среду разработки: VSCode или PyCharm.
VSCode:
Загрузить из code.visualstudio.com.
Открыть скачанный VSCode, зайти в раздел Extensions. Вместо этого можно просто нажать сочетание Ctrl+Shift+X. Найти три расширения (Питон, Pylance, Jupyter), установить их.
Создать в VSCode документ под расширением .py. Снизу появится оповещение, где можно выбрать интерпретатор.
Другой вариант — Ctrl+Shift+P, написать: Python: Select Interpreter.
Создать новую папку для проекта, открыть её: File -> Open Folder. Создать launch.json — конфигурационный файл. Выбрать конфигурацию для Пайтон.
Получить линтер и форматтер — Pylint (анализирует код), а также Black (форматирует его автоматически).
PyCharm:
Из jetbrains.com/pycharm/download скачать на компьютер. Запустить его без загрузки предыдущих версий.
Система предложить настроить интерфейс, выбрать светлую или тёмную тему, активизировать плагины.
Create New Project, выбрать папку, где он будет храниться.
Проверить, что интерпретатор выбран правильно. Выполняется автоматически.
Кнопка Create откроет новое окно с готовой структурой проекта.
В проекте можно создавать файлы: New -> Python File. После выбора названия — Enter.
Составляем код.
Чтобы его запустить, щёлкните правой кнопкой мышки, задать команду Run «имя файла».
Желательно создать виртуальное окружение: python -m venv my_web_scraping_env
Шаг 2: Основы парсинга HTML с BeautifulSoup
Beautiful Soup внутри Пайтона позволяет работать с HTML-запросами. Прежде всего скачайте BeautifulSoup:
Открыть управление пакетами (install requests bs4).
Активировать команду skipped.
Теперь можно делать скрипты
Дальнейшие шаги:
Как собирать из HTML:
- Направить GET к URL. Получить результат. Если там цифра 200, значит, всё верно, отправлены HTML со всем содержимым.
- В строке под именем r вывести содержимое (r= requests.get (url). Получится неструктурированный код HTML.
- Работать с функцией html5lib из BeautifulSoup. В разделе r.content указать HTML-строку, а затем назначить html5lib парсером.
- Перейти во вкладку Devtools (F12), открыть опцию Elements. На экране появится таблица: надо обратить внимание на её верхнюю часть.
Метод soup.find_all() обладает множеством параметров:
name — имя искомого HTML-тега;
attrs={} — словарь атрибутов, которые мы ищем;
recursive=True — рекурсивный поиск по всем вложенным элементам;
recursive=False — рекурсивный поиск только по прямым потомкам элементов;
string= — ищем элементы с конкретным текстом;
limit= — максимальное число элементов для поиска.
Рассмотрим несколько простейших примеров, на которых можно начать обучение.
Пример
Поищем цитату известного человека, имя её автора.
Искомое можно найти по ключу ‘img alt’. Требуется написать такой алгоритм:
Пример
Ещё один пример: найдём все <p>, у которых указаны атрибуты id и class.
Исходный запрос имеет вид result = soup.find_all(‘p’). Слева отображается символ результата. Затем после знака = указывают метод soup.find_all, а в скобках — что требуется найти (например, тег
. Если нам известны его атрибуты, их следует указать после запятой. Ставится второй, внутренний результат attrs, знак =, а потом в фигурных скобках записывают атрибуты. Сначала пишут название атрибута, а затем после двоеточия — его значение. Например, ‘class’: ‘text-class’ или ‘id’: ‘text-id’. Затем ставят закрывающую фигурную скобку, следом за ней — закрывающую круглую скобку.
Благодаря этим действиям интересующие нас материалы будут отображаться.
Шаг 3: Работа с динамическими сайтами с помощью Selenium
Особенность динамического сайта — его страницы (контент, скрипты, шаблоны) хранятся на сервере в виде отдельных ресурсов. При выдаче результаты могут отображаться различными способами. Для парсинга динамических площадок требуется Селениум, его можно легко скачать: install selenium==4.* Также потребуются Selenium server, а также виртуальная среда Java Runtime Environment (JRE) выше версии 1.6.
Селениум хранит много инструментов для автоматизации работы браузера. У него открытый исходный код, который позволяет легко подстраиваться под различные требования.
Он выполняет множество действий:
извлекает элементы с веб-страницы;
добавляет, удаляет cookie;
тестирует функционал;
отправляет формы, их элементы;
собирает контент с веб-ресурсов.
Понадобятся вспомогательные пакеты. Скачиваем их с помощью команд:
from selenium import webdriver
import time
import pandas as pd
Для Селениум понадобится драйвер браузера, например, Windows ChromeDriver:
Скачать драйвер с ресурса https://sites.google.com/chromium.org/driver/
Через общие системные настройки на Windows10 (более новых) версиях указать драйверу путь к переменной PATH. Открывать вкладку за вкладкой: About > System info: > Advanced system settings > Environment Variables >
Дважды нажать на строчку Path.
Затем — New.
Новая строка — путь C:chromedriver, щёлкнуть Enter. Появится готовая строка с путём.
Закрыть командную строку, открыть новую. Активизировать виртуальное окружение Селениума (selenium_env).
После всех загрузок можно переходить непосредственно к скрапингу.
Сначала надо указать целевой сайт, папку, поисковый вопрос.
FILE_PATH_FOLDER = ‘F:….Competitive_Analysis’
search_query = ссылка
driver = webdriver.Chrome(executable_path=’C:/…/chromedriver_win32/chromedriver.exe’)
job_details = []
Сочетание клавиш Ctrl+Shift+C позволяет проверить любые уникальные HTML-теги.
Извлекать точки данных надо с помощью атрибута find_elements_by_xpath, расположенного в веб-драйвере Селениума. Например, мы хотим собрать вакансии из соцсети LinkedIn (должностные обязанности, фирма, должность, рабочее место, дата публикации вакансии). Записываем такие значения:
На завершающем этапе сохраняем всё. Для этого загружаем столбцы во фрейм:
job_details_df = pd.DataFrame(job_details)
job_details_df.columns = [‘title’, ‘company’, ‘location’, ‘summary’, ‘publish_date’]
job_details_df.to_csv(‘job_details.csv’, index=False)
Благодаря атрибуту to_csv сохраняем всё в CSV, который будет храниться в папке FILE_PATH_FOLDER.
Драйвер Селениума идеально взаимодействует с JavaScript. Требуется скачать на компьютер драйвер с помощью функции npm install selenium-webdriver.
Далее надо загрузить обязательные компоненты:
const { Builder, By, Key, until } = require(‘selenium-webdriver’).
И создать отдельный экземпляр драйвера:
const driver = new Builder().forBrowser(‘chrome’).build();
Пример
Извлечём текст из какого-нибудь элемента веб-площадки, которую мы парсим. Следует задать такие команды:
Шаг 4: Обход ограничений (CAPTCHA, блокировки, заголовки)
Во время скрапинга специалисты часто встречают препятствия. Есть способы, помогающие обойти CAPTCHA и блокировки.
Можно решать CAPTCHA вручную или нанять людей, которые за мизерную плату будут её расшифровывать. Такие услуги предлагаются на многих биржах копирайтинга. Некоторые специалисты пользуются фермами CAPTCHA, которые состоят из ботов или людей, разгадывающих капчу. Часто используется ИИ для разгадывания капчи.
Известные сервисы анти-CAPTCHA: Image Typerz, Anti-Captcha, CapSolver, 2captcha, CapSola, RuCaptcha, BestCaptchaSolver, XEvil, DeathByCaptcha CapMonster.
Чтобы избежать блокировки по IP, желательно использовать VPN или прокси-сервисы. Они автоматически меняют IP пользователей.
Можно имитировать автоматические действия, используя headers, cookies, другие методы HTML. Это позволит избежать бана.
Headers — это заголовки запросов, которые сервер возвращает обратно. Питон позволит получить доступ к заголовкам:
Модуль http.cookies на Питон позволит создать парсер для сбора и анализа cookie.
Извлечение куки чаще всего используют предприниматели для анализа площадок конкурентов.
Шаг 5: Парсинг таблиц, изображений и медиа-файлов
Для таблиц можно использовать lxml или html.parser. Можно указать путь: BeautifulSoup(rs.content, ‘lxml’). Необходимо скопировать URL, где расположены таблицы, действовать через Реквестс. Затем посмотреть код всех элементов страницы (таблиц). Выяснить, под какими тегами записаны те или иные элементы таблицы:
— строки;
— колонки;— ячейки.
Затем создать цикл for для наполнения пустого списка:
Сделать фрейм:
Теперь можно наполнить фрейм показателями из таблицы:
После этого экспортируем в CSV:
Его сохраняем на компьютере или флешке.
Для картинок надо указать нужные HTML-узлы изображений на странице. Затем из каждой картинки извлечь её URL-адрес, скачать документы.
HTML-сведения о картинке можно узнать, посмотрев код сайта через соответствующую опцию. Чтобы собрать URL-адреса изображений через Питон, надо воспользоваться методом findElements().
Например, image_html_nodes = driver.find_elements(By.CSS_SELECTOR, «[data-test=»photo-grid-masonry-img»]»)
После этого через image_urls = [] инициализировать полученный перечень значений. А затем собрать группу изо всех избранных картинок:
Полученное сохраняем на локальном диске в формате CSV. Выше рассказывается, как сохранить собранные материалы в CSV.
Шаг 6: Сохранение данных в форматах CSV, JSON, базы данных
Результаты веб-скрапинга можно хранить в отдельной базе знаний или в форматах CSV, JSON, YAML. Сложную неструктурированную информацию желательно сохранять в JSON, а простую структурированную — в CSV.
Широко используются такие реляционные базы, как SQLite, MySQL, PostgreSQL. Нужно скачать библиотеки sqlite3, mysql.connector, psycopg2 или универсальную SQLAlchemy.
Пример. Сохранение таблицы
Пример. Извлечение
Шаг 7: Обработка ошибок и исключений
При скрапинге часто возникают ошибки. Особенно часто встречаются ошибки соединения, нарушения HTTP. Чтобы их избежать, нужно чистить куки и кэш на компьютере, а также пользоваться прокси-сервисами.
Конструкция try-except поможет преодолеть множество ограничений, даже ValueError, FileNotFoundError, ZeroDivisionError.
Как искать исключения:
Удаётся обрабатывать любые исключения или придумывать собственные.
Чтобы не повторять ошибки, их нужно логировать — вносить в специальный журнал (лог).
Шаг 8: Автоматизация парсинга
Планировщики задач могут автоматически выполнять различные действия. Например, можно интегрировать Пайтон и Cron. Для этого на операционной системе Linux необходимо через Cron запустить Python-скрипт.
Настроить регулярный автоматический сбор можно при помощи уже знакомых нам BeautifulSoup, Selenium, а также через Pandas или Schedule.
Чтобы материалы автоматически фильтровались, собирались, структурировались, нужно задать команду:
Многопоточный веб-скрапинг — это сбор сведений через разные процессы (быстро, но не всегда подробно). При асинхронном задачи выполняются по очереди, но единым потоком (медленно, но тщательно).
Этические и правовые аспекты парсинга
Это занятие может показаться неоднозначным, неэтичным, незаконным. Нельзя парсить персональные сведения о человеке, а также контент, защищённый законом об авторском праве. Запрещено собирать и анализировать материалы, нарушающие законы России.
Если человек открыто рассказал о себе что-то, это ещё не значит, что он согласен, чтобы это стало известно посторонним людям. Прежде чем собирать знания о ком-то, нужно получить его согласие, желательно письменное. Это позволит избежать нарушений этических и юридических законов.
Надо руководствоваться такими законами, юридическими документами:
GDPR — Общий регламент по защите данных (постановление ЕС);
Гражданский кодекс РФ (особенно 4 часть);
федеральный закон «О персональных данных» от 27.07.2006 N 152-ФЗ.
Необходимо учитывать пользовательские соглашения, условия использования, которые публикует каждая конкретная площадка. Надо внимательно изучить политику сайтов — robots.txt, использование API.
Случаи, когда парсинг законен:
не приводит к техническим сбоям;
выполняется легальным способом;
не нарушает авторские права;
полученные сведения не содержат коммерческую тайну;
собранные материалы открыты для свободного доступа.
Ответственность за несанкционированный скрапинг — вопрос правоприменительной практики, которая пока ещё не появилась. За серьёзное нарушение может грозить штраф. Прежде чем парсить чужие проекты, нужно проконсультироваться у юриста.
Использование готовых решений для парсинга
Процессы должны быть максимально автоматизированы. Для этого применяются всевозможные облачные сервисы, браузерные расширения, программы.
Краткий обзор сервисов для компьютера:
ParseHub — визуализирует, интегрирует сведения, есть планировщик.
Diffbot — облачный сервис для регулярного пользования, автоматически определяющий разновидности URL-адресов, взаимодействующий с API.
Scraper API — полезен для парсинга хорошо защищённых ресурсов, подходит профессиональным программистам.
Data Scraper — извлекает сведения из веб-ресурсов или таблиц, преобразует их в CSV, TSV, XLS.
Scraper.AI — импортирует в форматах XLSX, CSV JSON, имеет настройку регулярного мониторинга.
Кастомный парсер можно создать самостоятельно, но это долгий трудный процесс. Зато его можно адаптировать под свои собственные нужды. Он создаётся при помощи Beautiful Soup, других рассмотренных нами библиотек. Но гораздо проще воспользоваться готовой программой, браузерным расширением или облачным сервисом. У них есть все настройки.
Заключение
Сотруднику требуются специальные инструменты (парсер, библиотеки, базы). Придётся изучить особенности каждого инструмента, научиться работать со вспомогательными программами, разбираться со сложными настройками. Каждый парсер должен быть оптимизирован, поэтому его надо регулярно тестировать.
Контактная информация:
Компания: ParsingMaster
Сайт: parsingmaster.com
Email: info@parsingmaster.com
Telegram: parsingmaster_manager
Телефон: +7 (920) 909-36-72
Заказать звонок
Чтобы заказать обратный звонок, заполните и отправьте форму ниже.
Оставляя заявку вы можете быть уверены:
От нас не будет никакого спама
Менеджер свяжется с вами в течение 15 мин.
(Рабочее время с 9:00 до 18:00 (GMT+3, Мск)
В кратчайшие сроки решим вашу задачу
Попробуйте бесплатно
Убедитесь в надёжности и эффективности нашего сервиса.
Воспользуйтесь услугой пробного парсинга.
Заказать пробный парсинг
Чтобы заказать услугу парсинга, заполните и отправьте форму ниже. Наш специалист свяжется с Вами для уточнения деталей.
Оставляя заявку вы можете быть уверены:
От нас не будет никакого спама
Менеджер свяжется с вами в течение 15 мин.
(Рабочее время с 9:00 до 18:00 (GMT+3, Мск)
В кратчайшие сроки решим вашу задачу
Вы можете обратиться к нам через мессенджеры или написать на почту:
Как начать пользоваться?
Оставьте заявку
Для начала оставьте заявку удобным Вам способом, нажав кнопку ниже.
Оставить заявкуС Вами свяжется наш менеджер для обсуждения деталей Вашего запроса.
Оставить заявку
Заполните и отправьте форму ниже. Наш специалист свяжется с Вами для уточнения деталей.
Оставляя заявку вы можете быть уверены:
От нас не будет никакого спама
Менеджер свяжется с вами в течение 15 мин.
(Рабочее время с 9:00 до 18:00 (GMT+3, Мск)
В кратчайшие сроки решим вашу задачу
Вы можете обратиться к нам через мессенджеры или написать на почту:
Остались вопросы
Если у Вас остались вопросы или Вам нужна дополнительная информация, не стесняйтесь обращаться к нам!
Задать вопросНаши специалисты всегда готовы помочь и предоставить всю необходимую поддержку.
Задать вопрос
Выберите удобный способ для связи
Написать в Telegram
Написать в WhatsApp
Написать на Email
Позвонить по Телефону
Заказать Обратный звонок (позвоним через 30 минут)
Заказать звонок
Заполните и отправьте форму ниже чтобы заказать обратный звонок. Дождитесь звонка нашего менеджера.