на каком языке писать парсер
На каком языке будет быстрее парсить?
Оценить 1 комментарий
Задержки на сети в разы больше времени парсинга
Кроме как запускать одновременно парсинг на 100+ сайтов никак «ускорить» не получится
Для питона scrapy умеет делать такое из коробки
prospero78su: проблема будет если каждый хтмл будет весить больше 10мб
Тогда придется настроить парсер
Больше никаких ньюансов не добавится
Время на сеть >>> времени парсинга
Когда речь идёт об обработке удалённых ресурсов критически важным становится стабильность и качество соединения, его производительность, а также производительность удалённых ресурсов. Если реализовать на Си максимально эффективный парсер сайта, который будет жевать его, допустим, за 1мс и точно такой же на каком-нибудь жирнющем пайтоне, у которого на обработку уйдёт, допустим, 15мс, очевидно эти числа ничто по сравнению со временем, которое будет затрачено на подключению и загрузку требуемого документа: 100мс на подключение, 1мб/10мбпс, итого 200мс только на то, чтобы получить документ, который может ещё с ошибками приехать или не не приехать вовсе, а удалённому серверу ещё и время потребуется, чтобы его обработать.
Итого важным становиться максимально асинхронная работа с загрузкой документа, а его обработка может занимать столько же, сколько идёт загрузка, ибо оная является узким горлом быстрее которого обработать не получится. Некоторым выходом может быть запуск параллельных процессов (потоков) на различные ресурсы, но злоупотреблять этим не стоит, так как ваш канал не резиновый и качество соединения может во много раз упасть, да и у системы есть серьёзные ограничения на количество одновременных соединений.
На каком языке лучше писать парсеры?
Нужно сделать парсер который сайт очень быстро мог обойти, подскажите на каком языке лучше его писать? Думала на php, но вроде как я понимаю это плохая идея, сможете ещё объяснить мне почему php плох для парсеров?
попробуй питон. там несложный синтаксис + есть готовые библиотеки, которые могут что тебе нужно
. но нету полноценных лямбд.
На чём удобно, на том и пиши. Регулярки есть везде, обход dom тоже. Я использовал hxselect (https://www.w3.org/Tools/HTML-XML-utils/) с башем для этого дела, т.к. удобно смотреть выхлоп и вообще с пайпами работать, вместо кодинга с итерациями и всякими вонючими либами.
Нужно сделать парсер который сайт очень быстро мог обойти
Хотела на php, но мне сказали что он работает в 1 поток и из-за этого будет очень медленно парсится сайт.
Не надо парсить HTML/json регэкспами!
Проблема в том, что для асинхронного/многопоточного парсера надо организовывать какую-то очередь данных. Обычно берут какую-то бд. Лучше взять готовый фреймворк для парсеров.
Думала на php, но вроде как я понимаю это плохая идея, сможете ещё объяснить мне почему php плох для парсеров?
В смысле, «я сама придумала, что он плохой, а вы объясните мне, почему?»
нененене, выше я писала что мне сказали что php плохо подходит, т.к. он медленный и работает в 1 поток
Те загонять в базу и потом sql? И как оно быстрее чем в память.
Это скраппер, а не парсер. Ищем удобную либу для любого языка и вперёд.
На любом языке общего назначения. Что из языков ты знаешь, кроме PHP?
Не надо городить пул в памяти же. Быстрее в разработке.
но мне сказали что он работает в 1 поток и из-за этого будет очень медленно парсится сайт.
А вы уверены, что тот кого вы собираетесь парсить будет рад нагрузке от вашего парсера в N-потоков?
javascript, ибо к нему куча инструментов по разбору любых сайтов с подключением браузеров в нескольких вариантах, на пхп ты далеко не уедешь
На котором умеешь писать код.
на php, но вроде как я понимаю это плохая идея
PHP мало чем отличается от других языков по основной сути. Его ругают, но код на нём всё же работает.
сможете ещё объяснить мне почему php плох для парсеров?
Это нужно спрашивать у тех, кто заявляет, что «PHP плох для парсеров».
Для PHP рекомендую взять http://simplehtmldom.sourceforge.net/ (хотя я других библиотек и не пробовал вообще-то). Для Python — https://www.crummy.com/software/BeautifulSoup/bs4/doc/, запускать под PyPy.
Ни почему не плох. Не хуже, чем любая другая скриптота. Бери любой асинхронный фреймворк и вперёд, к победе коммунизма.
мне сказали что php плохо подходит, т.к. он медленный и работает в 1 поток
Ну если у тебя вообще есть понимание того как пишутся парсеры, то наверное должна понимать что разницы особой нет. Какой язык тебе привычней на том и пиши. cURL, регулярки и прочий инструментарий есть везде (на самом деле нет, но это не важно).
Парсеры для стандартных форматов вообще писать не нужно, они есть готовые. А PHP плох вообще для всего.
Не важно, что за ЯП или библиотека, главное, чтобы chrome headless.
который сайт очень быстро мог обойти
Какой сайт и насколько быстро
А мог бы уже сделать. Чем тебя нода не устроила? Твоя задача сводится к пониманию структуры представления на сайте и поиску xpath, если искомые элементы типа ссылок «далее» промаркированы, то вообще всё просто.
Бери scrappy, если питона не знаешь. Там по-моему можно без проблем headless браузер прикрутить для джаваскрипта, но процессинг жс это ресурсоёмко будет.
На том, что знаешь. Библиотеки разбора HTML есть везде.
И не называй разбор HTML «парсингом»
Парсилку html в php можно запросто написать, если регекспами парсить.
Я так понимаю, призывалась эта ссылка.
Мало ли о чем там дегенераты пишут, их там много и пишут они достаточно. С помощью регекспов, которые КА разбора регулярных грамматик, можно распарсить все, что угодно.
ПХП медленный, если автомат разбора руками по символьно, а если на основе регекспов его сделать и из ПХП им управлять и никаких особых тормозов разбора не будет.
Мало ли о чем там дегенераты пишут, их там много
С помощью регекспов, которые КА разбора регулярных грамматик, можно распарсить все, что угодно.
Самокритично, даже я бы сказал, неожиданно. Хвалю.
Kaitai Struct, про него на ЛОРе были новости. Описываешь формат в декларативном виде и генерируешь парсер под язык, который тебе нравится (если он поддерживается Kaitai Struct).
Как-то много шутников в этой теме,
причём тут парсер и регекспы?
но вообще для парсинга ничего этого не нужно
разбирать html можно даже simplexml’ом
но тебе это тоже не нужно
Няшная растишечка же!
Rust для парсеров идеален.
на том, который умеет работать с регулярными выражениями
Конечно нет, в 99% случаев тебе не придутся использовать регулярки никак. Ну и потом, парсить регулярками html, это такое себе. Даже если они достаточно быстрые, профит будет убит тем что там по 10000 циклов разборов на каждом предложении.
Рекомендую Perl5. Язык был специально создан для обработки данных. Существует множество готовых библиотек и даже программ — для разных форматов, например. Беспрецедентная поддержка UNICODE. Позиционируется как максимально приближенный к естественному (английскому) языку синтаксис, поэтому, помимо всего прочего, множество интуитивно понятных примеров конструкций. Те же регулярные выражения возникли как стандарт именно из развития Perl5, в который они очень гармонично встроены.
Ragel. Дальше можешь использовать любой другой язык для обработки напаршеного.
Не заметил, что там речь именно о сайте 🙁
cheerio тогда возьми.
который сайт очень быстро мог обойти
Тебя забанят или просто сервер положишь (а это уже уголовка, особенно для детей в рядах Навального), если будешь сайты быстро обходить. Если хочешь быстро, то прежде задайся вопросом где взять охапку проксей по дешевке.
На джаве с нормальной IDE.
сможете ещё объяснить мне почему php плох для парсеров?
Как выбрать решение для парсинга сайтов: классификация и большой обзор программ, сервисов и фреймворков
Парсинг или как его еще иногда называют web scraping – процесс автоматического сбора информации с различных сайтов. Форумы, новостные сайты, социальные сети, маркейтплейсы, интернет-магазины и даже поисковая выдача, вот далеко не полный список ресурсов с которых собирают контент.
И часто контент требуется собирать в больших объемах, массово, а если еще данные нужны с определенной периодичностью, то решить такую задачу руками не представляется возможным. Вот тут на помощь приходят специальные алгоритмы, которые по определенным условиям собирают информацию, структурируют и выдают в нужном виде.
Кому и зачем нужно парсить сайты?
В основном парсинг используют профессионалы для решения рабочих задач, поскольку автоматизация позволяет получить сразу большой массив данных, но также он пригодится и для решения частных задач.
Классификация программ и инструментов для парсинга
По использованию ресурсов
Это важный момент, если парсер будет использоваться для бизнес задач и регулярно, вам нужно решить на чьей стороне будет работать алгоритм, на стороне исполнителя или вашей. С одной стороны, для развертывания облачного решения у себя, потребуется специалист для установки и поддержки софта, выделенное место на сервере, и работа программы будет отъедать серверные мощности. И это дорого. С другой, если вы можете себе это позволить, возможно такое решение обойдется дешевле (если масштабы сбора данных действительно промышленные), нужно изучать тарифные сетки.
Есть еще момент с приватностью, политики некоторых компаний не позволяют хранить данные на чужих серверах и тут нужно смотреть на конкретный сервис, во-первых, собранные парсером данные могут передаваться сразу по API, во-вторых, этот момент решается дополнительным пунктом в соглашении.
По способу доступа
Удаленные решения
Сюда отнесем облачные программы (SaaS-решения), главное преимущество таких решений в том, что они установлены на удаленном сервере и не используют ресурсы вашего компьютера. Вы подключаетесь к серверу через браузер (в этом случае возможна работа с любой ОС) или приложение и берете нужные вам данные.
Облачные сервисы, как и все готовые решения в этой статье, не гарантируют, что вы сможете парсить любой сайт. Вы можете столкнуться со сложной структурой, технологией сайта, которую “не понимает” сервис, защитой, которая окажется “не по зубам” или невозможностью интерпретировать данные (например, вывод текстовых данных не текстом, а картинками).
Octoparse – один из популярных облачных сервисов.
Mozenda – популярный сервис позволяющий работать в облаке и на локальной машине, имеет интерфейс для визуального захвата данных без знания программирования.
Десктоп решения (программы для парсинга)
Такие программы устанавливаются на компьютер. Применяются для нерегулярных и нересурсоемких задач. Многие позволяют настраивать параметры сбора данных визуально.
По используемому фреймворку
Если задачи, стоящие при сборе данных нестандартные, нужно выстроить подходящую архитектуру, работать с множеством потоков, и существующие решения вас не устраивают, нужно писать свой собственный парсер. Для этого нужны ресурсы, программисты, сервера и специальный инструментарий, облегчающий написание и интеграцию парсинг программы, ну и конечно поддержка (потребуется регулярная поддержка, если изменится источник данных, нужно будет поменять код). Рассмотрим какие библиотеки существуют в настоящее время. В этом разделе не будем оценивать достоинства и недостатки решений, т.к. выбор может быть обусловлен характеристиками текущего программного обеспечения и другими особенностями окружения, что для одних будет достоинством для других – недостатком.
Парсинг сайтов Python
Библиотеки для парсинга сайтов на Python предоставляют возможность создания быстрых и эффективных программ, с последующей интеграцией по API. Важной особенностью является, что представленные ниже фреймворки имеют открытый исходный код.
Scrapy – наиболее распространенный фреймворк, имеет большое сообщество и подробную документацию, хорошо структурирован.
BeautifulSoup – предназначен для анализа HTML и XML документов, имеет документацию на русском, особенности – быстрый, автоматически распознает кодировки.
Лицензия: Creative Commons, Attribution-ShareAlike 2.0 Generic (CC BY-SA 2.0)
PySpider – мощный и быстрый, поддерживает Javascript, нет встроенной поддержки прокси.
Лицензия: Apache License, Version 2.0
Grab – особенность – асинхронный, позволяет писать парсеры с большим количеством сетевых потоков, есть документация на русском, работает по API.
Лицензия: MIT License
Lxml – простая и быстрая при анализе больших документов библиотека, позволяет работать с XML и HTML документами, преобразовывает исходную информацию в типы данных Python, хорошо документирована. Совместима с BeautifulSoup, в этом случае последняя использует Lxml как парсер.
Selenium – инструментарий для автоматизации браузеров, включает ряд библиотек для развертывания, управления браузерами, возможность записывать и воспроизводить действия пользователя. Предоставляет возможность писать сценарии на различных языках, Java, C#, JavaScript, Ruby.
Лицензия: Apache License, Version 2.0
Парсинг сайтов на JavaScript
JavaScript также предлагает готовые фреймворки для создания парсеров с удобными API.
Puppeteer — это headless Chrome API для NodeJS программистов, которые хотят детально контролировать свою работу, когда работают над парсингом. Как инструмент с открытым исходным кодом, Puppeteer можно использовать бесплатно. Он активно разрабатывается и поддерживается самой командой Google Chrome. Он имеет хорошо продуманный API и автоматически устанавливает совместимый двоичный файл Chromium в процессе установки, а это означает, что вам не нужно самостоятельно отслеживать версии браузера. Хотя это гораздо больше, чем просто библиотека для парсинга сайтов, она очень часто используется для парсинга данных, для отображения которых требуется JavaScript, она обрабатывает скрипты, таблицы стилей и шрифты, как настоящий браузер. Обратите внимание, что хотя это отличное решение для сайтов, которым для отображения данных требуется javascript, этот инструмент требует значительных ресурсов процессора и памяти.
Лицензия: Apache License, Version 2.0
Cheerio – быстрый, анализирует разметку страницы и предлагает функции для обработки полученных данных. Работает с HTML, имеет API устроенное так же, как API jQuery.
Лицензия: MIT License
Apify SDK – является библиотекой Node.js, позволяет работать с JSON, JSONL, CSV, XML,XLSX или HTML, CSS. Работает с прокси.
Лицензия: Apache License, Version 2.0
Osmosis – написан на Node.js, ищет и загружает AJAX, поддерживает селекторы CSS 3.0 и XPath 1.0, логирует URL, заполняет формы.
Лицензия: MIT License
Парсинг сайтов на Java
Java также предлагает различные библиотеки, которые можно применять для парсинга сайтов.
Jaunt – библиотека предлагает легкий headless браузер (без графического интерфейса) для парсинга и автоматизации. Позволяет взаимодействовать с REST API или веб приложениями (JSON, HTML, XHTML, XML). Заполняет формы, скачивает файлы, работает с табличными данными, поддерживает Regex.
Лицензия: Apache License (Срок действия программного обеспечения истекает ежемесячно, после чего должна быть загружена самая последняя версия)
Jsoup – библиотека для работы с HTML, предоставляет удобный API для получения URL-адресов, извлечения и обработки данных с использованием методов HTML5 DOM и селекторов CSS. Поддерживает прокси. Не поддерживает XPath.
Лицензия: MIT License
HtmlUnit – не является универсальной средой для модульного тестирования, это браузер без графического интерфейса. Моделирует HTML страницы и предоставляет API, который позволяет вызывать страницы, заполнять формы, кликать ссылки. Поддерживает JavaScript и парсинг на основе XPath.
Лицензия: Apache License, Version 2.0
CyberNeko HTML Parser – простой парсер, позволяет анализировать HTML документы и обрабатывать с помощью XPath.
Лицензия: Apache License, Version 2.0
Расширения для браузеров
Парсеры сайтов выполненные в виде расширений для браузера удобны с точки зрения использования, установка минимальная – нужен всего лишь браузер, захват данных визуальный – не требует программирования.
Scrape.it – расширение для браузера Chrome для сбора данных с сайтов с визуальным Point-Click интерфейсом.
В зависимости от решаемых задач
Мониторинг конкурентов
Сервисы для мониторинга цен позволяют отслеживать динамику цен конкурентов на те же товарные позиции, которые продаете и вы. Далее цены сравниваются и вы можете повышать или понижать стоимость в зависимости от ситуации на рынке. Это позволяет в каждый момент времени предлагать самую выгодную цену на рынке, делая покупку в вашем магазине привлекательнее чем у конкурента, и не упустить прибыль, если конкуренты по какой-то причине подняли цены.
Подобные сервисы часто адаптированы к какому-либо маркетплейсу, для того чтобы получить цены интернет-магазинов, торгующих со своего сайта, нужно настраивать сбор данных самостоятельно или заказывать настройку парсинга индивидуально.
Монетизация подобных сервисов – подписочная модель с тарифной сеткой, ранжирующей количество собираемых цен/конкурентов.
Организация совместных закупок
Подобные сервисы предназначены для организации совестных закупок в социальных сетях. Такие парсеры собирают данные о товарах выгружают их в группы ВКонтакте и Одноклассники, что позволяет автоматизировать процесс наполнения витрины и мониторить ассортимент, остатки и цены на сайтах поставщиков. Как правило, эти парсеры имеют личный кабинет с возможностью управления, настроенные интеграции для сбора данных, систему уведомлений, возможность экспортировать данные и не требуют доработки.
Монетизация – подписка с тарификацией, зависящей от количества сайтов.
Автоматизация интернет-магазинов
Такие сервисы позволяют автоматизировать загрузку товаров (картинки, описания, характеристики) от оптовика, синхронизируют цены и остатки. Это позволяет вести работу по добавлению товара и управлению ценами в полностью автоматизированном режиме и экономить на персонале. В качестве источника может выступать как xml или csv файл, так и сайт, с которого робот забирает информацию.
Парсинг SEO данных и аналитика
Парсеры применяемые для целей поисковой оптимизации помогают собирать мета данные (H1, Title, Description), ключевые слова, составлять семантическое ядро, собирать поведенческие и количественные аналитические данные о конкурентах. Спектр инструментов очень широк по функциональности, рассмотрим популярные сервисы, чтобы вы могли подобрать подходящий.
SiteAnalyzer – парсинг-программа для проверки основных технических и SEO данных сайтов. Главная особенность – программа полностью бесплатна. Работает на локальном компьютере, доступна только для ОС Windows.
Парсеры на основе таблиц
Такие парсеры собирают данные прямо в таблицы excel и google sheets. В основе действия таких парсеров лежат макросы автоматизирующие действия или специальные формулы извлекающие данные с сайтов. Подобные парсеры подходят для несложных задач, когда собираемые данные не защищены и находятся на простых, не динамичных сайтах.
ParserOk – парсинг сайтов на основе vba(макросов) в таблицы Microsoft Excel. Надстройка позволяет импортировать данные с сайтов по заранее созданным шаблонам и относительно проста в настройке. Недостатком является то, что если шаблон не соответствует вашему запросу, то потребуется доработка.
Стоимость лицензии составляет 2700 р., демо версия рассчитана на 10 дней.
Функции google sheets – importhtml и importxml – функции позволяющие импортировать данные прямо в таблицы. При помощи этих функций можно организовать несложный сбор данных по заранее запрограммированным вводным. Знание языка запросов “Xpath” существенно расширит область применения формул.
Настраиваемые решения для парсинга
Подобные сервисы работают “под ключ”, подходят к задаче индивидуально, парсинг пишется под конкретный запрос. Такие решения лучше всего подходят для частных задач бизнеса, например, когда нужно анализировать конкурентов, собирать определенные типы данных и делать это регулярно. Плюсы таких решений в том, что специально разработанное под задачу решение соберет данные даже с хорошо защищенных сайтов или данные, которые требуют интерпретации, например когда цена выводится не текстом, а в виде картинки. Программы и сервисы с самостоятельной настройкой в этих ситуациях не справятся с подобной задачей. Плюс, подобные сервисы не требуют выделять время отдельного сотрудника на сбор данных или переделку парсинга в случае изменения на сайте источнике.
Стоимость работы с индивидуально настроенным парсингом, если у вас несколько разных сайтов и необходимость регулярно получать данные будет выгодней, это не сложно проверить если посчитать стоимость готового решения + стоимость программиста для написания парсинга и его поддержки + стоимость содержания серверов.
Примеры подобных сервисов есть в начале статьи в разделе облачных парсеров, многие из них предлагают настраиваемые решения. Добавим русскоязычный сервис.
iDatica – сервис специализируется на организации парсинга, очистки данных, матчинга и визуализации данных под запрос. iDatica имеет русскоязычную поддержку, опытных специалистов и зарекомендовала себя как надежный партнер для разработки решений сбора и визуализации данных. По запросу команда выделяет аналитика для работы с вашими проектами.
iDatica – сервис специализируется на организации парсинга, очистки данных, матчинга и визуализации данных под запрос
Как правильно выбрать парсер
Для парсинга сложных сайтов с определенной регулярностью обратите внимание на облачные решения. Вам потребуется отдельный сотрудник для ведения этого проекта.
Если задача завязана на увеличение прибыли или даже жизнеспособность проекта стоит обратить внимание на облачный сервис с возможностью программировать или библиотеки для парсинга, выделить отдельного программиста для этой задачи и серверные мощности.
Если нужно получить решение быстро и нужно быть уверенным в качестве результата, стоить выбрать компанию реализующую проект под ключ.