LINUX.ORG.RU

Парсить 20 сайтов: какой инструмент выбрать?

 , ,


4

3

Друзья, всем привет! Мне необходимо извлекать информацию из 20-25 сайтов компаний партнеров, каждый имеет свою структуру. В вопросах парсинга я имею поверхностные знания, но регулярки немного знаю, собираюсь заказать разработку у специалистов-фрилансеров.

Мой вопрос: что выбрать? Регулярки типа sed или perl и т.п. или использовать соответствующие фреймворки для python, java и др. языков? Конечно, хотелось бы, чтобы это можно было как-то поддерживать потом, экстренно вносить минимальные изменения, т.е. немного не хочется иметь дело с нечитаемыми регулярками, которые можно только переписывать. Какой сейчас вообще мейнстрим в этой сфере, что использует прогрессивное человечество? Спасибо!!!)))


Какой сейчас вообще мейнстрим в этой сфере, что использует прогрессивное человечество?

XML-парсеры?

theNamelessOne ★★★★★
()

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

Apple-ch ★★
()
Ответ на: комментарий от Apple-ch

все немного сложно: мы турагентство, у нас заключены договора с множеством туроператов на реализацию их продуктов - туров. нам нужен собственный поиск (типа как у агрегатора sletat.ru), но туроператоры технологически не готовы предоставить доступ к своим системам для онлайн-поиска

ancara
() автор топика
Ответ на: комментарий от x3al

Every time you attempt to parse HTML with regular expressions, the unholy child weeps the blood of virgins, and Russian hackers pwn your webapp.

Ок, я запишу это)

ancara
() автор топика
Ответ на: комментарий от ancara

В большинстве случаев инфа может предварительно храниться в каком-нибудь экселе, а потом уже забиваться на сайт.

sventovit
()
Ответ на: комментарий от ancara

все немного сложно: мы турагентство, у нас заключены договора с множеством туроператов на реализацию их продуктов - туров. нам нужен собственный поиск (типа как у агрегатора sletat.ru), но туроператоры технологически не готовы предоставить доступ к своим системам для онлайн-поиска

Как-то у вас странно все это сделано.
Посмотри как это работает у aviasales, например.
Как писали выше, пинай туроператоров чтобы давали актуальные данные в нормальном виде, парсинг веба тут - самое дурацкое решение.

xtraeft ★★☆☆
()
Ответ на: комментарий от ancara

но туроператоры технологически не готовы предоставить доступ к своим системам для онлайн-поиска

плохие операторы значит, нанять программиста что бы сделать выгрузку в едином формате они не способны? странный бизнес.

с парсером будет много крови и мук через n-ое время, всеравно вы будете приводить их к единому формату, лучше об этом задуматься заранее.

umren ★★★★★
()

Регулярки типа sed или perl и т.п. или использовать соответствующие фреймворки для python, java и др. языков?

Боюсь что во втором случае вы получите регулярки типа sed или perl, завернутые в код python, java и др. языков.

ya-betmen ★★★★★
()

Регулярки не подходят под эти задачи. Лучше возьми спец библиотеку какую-нибудь, либо напиши javascript парсер, к примеру на nodejs. Ты сможешь скачать страницу и работать с DOM деревом напрямую инструментами, которые для этого предназначены.

BaBL ★★★★★
()
Ответ на: комментарий от ya-betmen

Вы понимаете, о чём говорите? Если нет — зачем это мнение в development?

HTML — контекстно-свободная грамматика (тип 2 по Хомскому), регэкспы — регулярная (тип 3). Даже в теории их недостаточно.

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

В современных ЯП полно XML и подобных парсеров, которые не имеют ни малейшего отношения к регэкспам.

x3al ★★★★★
()
Последнее исправление: x3al (всего исправлений: 1)
Ответ на: комментарий от x3al

Вы понимаете, о чём говорите?

Прекрасно понимаю.

ya-betmen ★★★★★
()

java

У меня в старом проекте для этого используется jsoup + selenium webdriver. Первый для парсинга «удобных» сайтов, информацию с которых можно получить, не выполняя js (нужно просто скачать страничку и отдать jsoup'у html код), второй для остальных случаев. Точнее даже 1+2, потому что jsoup для таких вещей предназначен и апи у него удобнее, поэтому просто от selenium'а берется html код, а парсится jsoup'ом. Но без регэкспов все равно не обойтись ;)

f1xmAn ★★★★★
()

javascript тоже sed-ом и perl-ом с регулярками?

swwwfactory ★★
()
Ответ на: комментарий от x3al

HTML — контекстно-свободная грамматика (тип 2 по Хомскому), регэкспы — регулярная (тип 3). Даже в теории их недостаточно.

интересное замечание - респект.

Вопрос на засыпку: HTML c «КСГ» может ли преобразован/трансформирован к регулярной (тип 3)?

Оно понятно, что регулярки не подходят, но как доходчиво объяснить это не более простая задача чем разбор xml для жаждущих...

swwwfactory ★★
()
Ответ на: комментарий от swwwfactory

Эмм. Если забить на DTD, раскрыть многие entities, запретить чуть ли не все варианты вложений тегов друг в друга кроме пары обговоренных случаев, автоматически заменить некоторые валидные в HTML вещи вроде случайного знака «>» на те же entities (поэтому до конца от entities не избавиться), убрать комментарии и CDATA (и вообще — всё чужеродное, включая скрипты и стили), привести вайтспейс к одному виду, разобраться с закрывающими тегами, раскрыть SHORTTAGS — я бы всё равно не брался за задачу полноценного разбора такого ограниченного HTML регэкспами.

Классические регэкспы не могут определить даже правильно ли расставлены скобки в исходнике на каком-нибудь ЯП.

Другое дело — XML-парсеры, умеющие в том числе регэкспы для, скажем, значений атрибутов тегов. Не для разбора на теги. Не для вычленения атрибутов. В таком виде регэкспы — вполне себе инструмент (внутри основного парсера).

x3al ★★★★★
()
Последнее исправление: x3al (всего исправлений: 1)

20? бери то, что ты знаешь. Если ничего не знаешь — бери пхп.

emulek
()
Ответ на: комментарий от x3al

благодарю за развернутый ответ - по сути дела такое приведение равносильно преобразованию в XML. Не так-ли?

Следовательно задача сводится в основном именно к этому.

Возникает вопрос: а что есть в качестве годных альтернатив для XML, YAML, JSON, XHTML, SGML ? ASN? Декларативный ML (это должно быть круто - дорогое удовольствие) Разумеется еще и кроме регулярных выражений?

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

По мне так это разбор/обнаружение отдельных патернов в строках, проверка (как суррогат DTD) чисел и классов символов.

swwwfactory ★★
()

Windows PowerShell

Мой любимый инструмент.

Deathstalker ★★★★★
()
Ответ на: комментарий от swwwfactory

такое приведение равносильно преобразованию в XML

Нет. XML не парсится регэкспами точно так же, как HTML.

а что есть в качестве годных альтернатив для XML, YAML, JSON, XHTML, SGML ?

Зависит от задачи же. Из всего этого серебряная пуля — только XML:

XML is like violence. If it doesn’t solve your problems, you are not using enough.

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

http://c2.com/cgi/wiki?RegularExpression

Если требуется найти что-то в потенциально рекурсивной структуре (дереве) и вообще когда в описании задачи появляются слова «вложенность»/«рекурсия» — обычно регэкспы для неё не подходят.

Ну и потенциальные грабли

x3al ★★★★★
()
Последнее исправление: x3al (всего исправлений: 1)

если надо скорость, то наверное bison.

dikiy ★★☆☆☆
()
Ответ на: комментарий от x3al

Нет. XML не парсится регэкспами точно так же, как HTML.

у меня и не такое парсится. Sed'ом.

А чистые регулярки конечно не справятся.

emulek
()

необходимо извлекать информацию из 20-25 сайтов компаний партнеров, каждый имеет свою структуру.

0. четко знать схему которую хотите получать. Всё всегда начинается с собственной рабочей схемы, а импорт/экспорт это ужепозже

1. чтобы не писать своего spyder`а - wget`ом выкачивать сайт, только объясните ему что не таскал лишнего

2. htmltidy чтоб исправить «кривой html» страниц и вообще сделать их него xhtml

3. для каждого сайта возможны разные варианты,

3.1. для некоторых сразу xslt в желаемый вид

3.2. ваш любимый somelang, загрузка DOM и разборка в ручную

3.4. конверсия в текст (lynx -dump если память не изменяет) и регекспы по ключевым словам.

PS. может быть всё гораздо проще - половина сайтов с js и данные уже представлены в json либо xml

PPS. раз уж сайты партнёрские, то должен быть партнёрский вход/интерфейс и выдача требуемых данных без бирюлек - фактически некоторый срез базы; На их стороне это делается проще, быстрее и вообще это правильно.

MKuznetsov ★★★★★
()
Ответ на: комментарий от x3al

не, я такой ерундой не занимаюсь. Но теоретическое доказательство своей неправоты ты сам же и нарыл.

Ну а IRL часто нет необходимости в XML парсере.

emulek
()

если сайт вебдванольный, то боюсь только селениум спасёт с биндингами в какой-нибудь перл.

sergej ★★★★★
()

Смотря как сложно сайт устроен. Много есть методов парсинга. Из простого, по типу собрать на коленке есть AWK, есть sed, есть более мелкие тулзы, типа cut, grep. А у некоторых сайтов совсем всё просто, прямо из elinks -dump удобно парсить.

peregrine ★★★★★
()

Пожалуйста, не нужно парсить html регулярными выражениями. Если данные в таблицах и ты знаешь perl, то можешь заюзать такой модуль: HTML::TableExtract . Он хорош и несложен. Можешь курнуть вот это http://xrl.us/bqnfh7

_сслыка_на_стекоферфлоу_с_текстом_про_то_как_сотона_был_призван_парсингом_хтмл_регэкспами_

erebtonge
()

Я тупо lxml'ем маршу. Просто, быстро, умеет и xpath и селекторы. Питон.

NeverLoved ★★★★★
()
Ответ на: комментарий от ancara

Если вашим «партнёрам» ваша деятельность выгодна, то с ними можно договориться (если не выгодна то для чего нужно такое партнёрство?), только не надо их пугать страшными словами типа онлайн поиска. Если у них есть сайт значит под ним лежит БД с данными, по сути вам нужны всего пара запросов по этой БД. Обычный sql, выполняемый по крону, результаты которого автоматически будут отправяться вам по почте/выкладываться на зпароленный ftp. Вы их оттуда заберёте, сложите себе в базу и будете делать по ним поиск. А деньги за написание селектов можете заплатить их же админам.

Парсинг html в вашем случае будет плохим решением, на чём бы вы его не реализовали.

PS. Можно создавать невидимые iframe'ы на клиенте, загружать в них страницы сайтов (тут и js подтянется) и парсить тем же jquery.

ya-betmen ★★★★★
()
30 августа 2015 г.

Я сервис написал для этого

smartfetch.ru

AlienZzzz
()
28 ноября 2015 г.

Отличное решение. Сам пользуюсь.

Спарсить сайты любой сложности и любой структуры можно программой DataCol. Единственное работает она под windows. Но думаю через win для Lunix можно запустить. Вот ссылка на оф. сайт http://web-data-extractor.net/?aff=503 .

Сам пользуюсь данной программой более года. Результатами доволен :)

molostov
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.