В идеальном мире все данные, которые вам нужны будут структурированы и представлены в простом, открытом и хорошо документированном формате, который вы сможете очень просто загружать и использовать для своих целей. В реальном мире все данные размещены беспорядочно, редко организованы так, как вам необходимо и часто устаревшие.
Часто сложно получить необходимые вам данные с определенного сайта. Хотя некоторые веб-сайты пытаются предоставлять данные в простом структурированном формате, многие этого не делают. Парсинг, анализ, обработка и очистка данных - это распространенный ряд действий, которые применяются для сбора информации из интернета и составления собственной базы данных. Рано или поздно вам понадобится собрать некоторые данные из веб-сайтов и чтобы сделать все в точности так, как вам необходимо можно использовать программирование. Один из лучших инструментов - Python. В этой статье мы собрали несколько инструментов и фреймворков на Python, с помощью которых можно выполнять парсинг сайтов Python 3.
Содержание статьи
Прежде чем начать...
Прежде чем мы перейдем к инструментам подумайте зачем вы будете это делать и будьте честными. Парсинг сайтов на Python может означать много чего. Не сканируйте веб-сайты чтобы их дублировать и представить чужую работу как свою. Помните об авторских правах и лицензировании, а также о том, документы, которые вы парсите могут быть защищены авторским правом. Учитывайте файлы robots.txt. А также не отправляйте сайту запросы чаще, чем реальные пользователи иначе рискуете получить проблемы с доступностью.
А теперь рассмотрим инструменты, которые можно использовать для парсинга данных с сайтов.
Парсинг данных с сайтов на Python3
1. Pyspider
Давайте начнем с Pyspider. Это веб-краулер с веб-интерфейсом, который позволяет выполнять парсинг сайтов python 3 в несколько потоков и сразу же наблюдать за процессом парсинга. Этот расширяемый инструмент с поддержкой нескольких баз данных и очередей сканирования, а также множеством дополнительных функций, начиная от приоритета и заканчивая возможностью повторной попытки открытия страницы. PySpider поддерживает как Python 2, так и 3. Вы можете настроить более быстрое сканирование запустив несколько экземпляров приложения.
Функции и методы PySpider хорошо документированы, даже есть фрагменты кода, которые мы можете использовать в своих проектах. Кроме того, есть онлайн демонстрация работы, которая поможет вам получить представление о пользовательском интерфейсе. Лицензия на ПО - Apache 2, но программа доступна на GitHub.
2. MechanicalSoup
MechanicalSoup - это библиотека краулинга, созданная на основе очень популярной и невероятно универсальной библиотеки, выполняющей парсинг html python - Beautiful Soup. Если у вас нет никаких особых требований к сканированию, но вам нужно собрать несколько полей или ввести какой-либо текст, но вы не хотите создавать собственный парсер для этой задачи - то эта библиотека может стать отличным решением.
MechanicalSoup имеет лицензию MIT. Вы можете посмотреть более подробно как его использовать в примере исходного файла example.py на странице GitHub. На данный момент у проекта нет полной документации.
3. Scrapy
Scrapy - это фреймворк для Python, с помощью которого вы сможете создать собственный инструмент парсинга. В дополнение к средствам парсинга и разбора, он включает в себя возможности экспорта в такие форматы, как JSON или CSV, а также отправку данных бэкенду. Также есть ряд расширений для таких задач, как обработка файлов cookie, подмена User Agent, ограничения глубины сканирования, а также API для создания своих расширений.
https://youtu.be/UyjCOXxN9xU
Для изучения Scrapy можно использовать онлайн документацию или один из многих ресурсов сообщества. Кодовая база Scrapy доступна на GitHub под лицензией BSDv3. Если вы не хотите программировать, то можете использовать графический интерфейс Portia.
Другие
Это были основные инструменты для парсинга сайтов, но существуют и другие, которые имеют меньше возможностей, но тоже отлично подойдут для многих случаев.
- Cola - это высокоуровневый распределенный инструмент для обхода и парсинга сайтов, но работает только на Python 2. Последний раз обновлялся два года назад;
- Demiurge - поддерживает Python 2 и Python 3. Еще один неплохой вариант, хотя разрабатывается он все еще медленно;
- Feedparser - небольшая библиотека, предназначенная для разбора RSS или Atom лент.
- Lassie - упрощает получение базового контента страницы, такого как описание, название, ключевые слова или список изображений;
- RoboBrowser - еще одна простая библиотека для Python 2 или 3 с базовыми функциями, поддерживается нажатие кнопок и заполнение форм. Уже давно не обновлялась, но по-прежнему отличный выбор.
Выводы
Это далеко не полный список, и, конечно, если вы профессиональный программист, то вы можете написать собственный инструмент и не использовать ни один из фреймворков. Однозначно, существует еще множество отличных инструментов, и не только на языке Python. А с помощью какого инструмента вы выполняете парсинг данных с сайта python или на другом языке? Какой ваш любимый? Напишите в комментариях!
Источник: https://opensource.com
Блин а как бороться с теми кто копирует сайт? Мой сайт постоянно какой-то имбицил копирует, даже однажды одна из его копий в гугл выдачу вылезла рядом с моим. Я конечно, когда нахожу копию - сразу определяю IP и блокирую. Но как бы сделать это автоматически, как бороться? Сколько ищу не нахожу никаких инструментов. Админ сайта много в чем просветляет, может и в этом просветит? У меня тоже движок WP.
По факту - почти никак.
Ты же отдаешь страничку\данные, а значит стащить можно.
Особенно если это CMS какаинить, а не самописное. В самописном хоть поиграться немного можно, менять способы выдачи\рендеринга, изменить названия классов (если тянут например только статьи, а не всю страничку и т.д.)
Вообщем серверный рендеринг + регулярные смены названия классов\идшников элементов немного испортят жизнь, при этом не только ворюгам но и тебе ибо гемморно 🙂
Ну а блокирование по ИП .. да ничего это не даст, почти, вот гляди. Тянуть странички\данные я могу и со своего компа, а сайт крутится на VPS гденить в США например, там же и БД будет, куда моя прога спокойно будет заливать стыряное. Нашел ты мой поддельный сайт, заблокировал, а толку ?
Писал парсер погоды на Мэйл.ру. Пробовал парсить на Бютифл Соуп и пару дней потратил на него. Потом забил и за пару часов написал на баше. Кому интересно https://bitbucket.org/camino17/.myscripts/src/b117a0a050d9e778d912d80786f23b3aafc5fb25/,conky_pogoda.sh?at=master&fileviewer=file-view-default
Для простого получения определенных элементов достаточно requests и lxml, необходимые пути до элементов легко получить через инструментарий разработчика любого браузера
Есть собственный парсер на Symfony с использованием библиотеки Guzzle и DomCrawler (стандартный компонент SF). Отлично справляется со всем.
php (с simple_html_dom) и PhantomJS про последний интересная статья может получиться..