Форум сайта python.su
Здравствуйте,
Пишу парсер сайта закупок, есть опыт парсинга, но если раньше была задача пробежаться по сайту один раз, собрать данные и забыть о написаном коде, то в текущей ситуации, все не так, парсер должен срабатывать регулярно.
Причины возникновения задачи:
1 ресурс неудобен, всех необходимых данных нет в таблице, чтобы получить доп. данные необходимо проваливаться в глубь на две ссылки;
2 ресурс предоставляет API только по “открытым” лотам, а нам нужна информация по остальным (закрытые, отмененные и т.п.);
3 попросила жена , ее компания регулярно использует ресурс.
Думал, что задача тривиальная, а оказалось, что нет . Структура сайта простая: форма-фильтр, таблица с результатами и пагинация. На каждую страницу в таблицу выводится по 50 строк, на каждую строку приходится по три ссылки, по которым нужно перейти и спарсить страницы находящиеся за ними. Все это усложняется психованной капчой, вылетающей на каждый десятый переход по ссылке.
Я планировал собирать парсером данные и сохранять их в БД, а потом работать с ними и только при необходимости подгружать “свежие”, но возникли проблемы:
Отредактировано KsimMiloff (Июнь 1, 2015 08:41:18)
Офлайн
KsimMilofflxml
Посоветуйте также инструменты
KsimMiloffдавайте
могу дать ссылку на сайт, который я разбираю, если нужно
KsimMiloffнет
есть ли способ преодолеть капчу? (recaptcha)
KsimMiloffв большинстве случаев у каждого товара должно быть что-то уникальное. или ссылка или ид или путь к изображению
как отличить данные которые я уже собрал, от тех которых я еще не собирал
KsimMiloffсложно сказать не видя сайт
сложняет то, что выборка кждый раз зависит от данных введенных в форму фильтрации. В первый раз пользователь может фильтравать по запросу “калоприемник”, во-второй “калоприемники” и выборка будет разной, в первом случае она включит в себя наименивание как во множественном, так и в единственном числе, а во втором - только множественные.
если я уже, по определенному запросу собрал данные, например вчера, то как мне по этому же запросу собрать данные сегодня? Этот вопрос связан с предыдущим, т.е. это скорее всего иная формулировка предыдущего вопроса, может так понятней.
KsimMiloffа вы пока не дойдете до существуеющего в БД лота не записывайте в нее
но тут проблема… вдруг мой парсер прервется по какой-либо причине, тогда при перезапуске, он не сможет найти место где остановился
KsimMiloffа почему не сравнивать по первому лоту?
снимок страницы, на момент последнего к ней обращения, под снимком я понимаю не HTML, а уже выбранные, холодные данные, без тегов и т.п.
KsimMiloffплохая идея
Также можно изучать пагинацию, т.е. смотреть на кол-во страниц, и если мое кол-во отличается, то запускать по новой.
Офлайн
вот этот ресурс.
terabaytя по этому писал, под id, я имел в виду id взятый с сайта
в большинстве случаев у каждого товара должно быть что-то уникальное. или ссылка или ид или путь к изображению
KsimMiloff
Вопрос не в том, чтобы отличить на уровне БД (у каждого лота есть уникальный id)
terabaytвот спасибо, аж стыдно, что сам не подумал . Только мне кажется, что нужно не до первого существуещего искать, а до такой страницы, где все данные будут существующими.
а вы пока не дойдете до существуеющего в БД лота не записывайте в нее
terabaytда потому что первый лот - не гарантия. Я говорил, что могут запросить как “калоприемник”, так и “калоприемники”. Если первым запросили второй вариант и получили, например, 10 новых лотов, то при запросе по первому варианту, лотов может быть 30, но первый лот для обеих выборок может быть одинаковым, в этом случае парсер решит, что он уже все собрал. Эта проблема одна из сложнейших, т.к. поиск сайта позволяет искать в LIKE стиле, например “*применики”.
а почему не сравнивать по первому лоту?
Офлайн
KsimMiloffя о
да потому что первый лот - не гарантия. Я говорил, что могут запросить как “калоприемник”, так и “калоприемники”.
KsimMiloff
если я уже, по определенному запросу собрал данные, например вчера, то как мне по этому же запросу собрать данные сегодня?
KsimMiloffтам же фильтрация по дате
Я думал решить эти проблемы путем создания отдельной модели, которая хранит в себе:
1 словари с данными из формы фильтрации (предварительно из моей версии формы выпиливаются все ненужные моему заказчику поля),
2 снимок страницы, на момент последнего к ней обращения, под снимком я понимаю не HTML, а уже выбранные, холодные данные, без тегов и т.п.
KsimMiloff
как отличить данные которые я уже собрал, от тех которых я еще не собирал? Вопрос не в том, чтобы отличить на уровне БД (у каждого лота есть уникальный id) , как предотвратить парсинг того, что уже есть? Усложняет то, что выборка кждый раз зависит от данных введенных в форму фильтрации. В первый раз пользователь может фильтравать по запросу “калоприемник”, во-второй “калоприемники” и выборка будет разной, в первом случае она включит в себя наименивание как во множественном, так и в единственном числе, а во втором - только множественные.
KsimMiloffдумаю этот вариант будет неплох
Я думал решить эти проблемы путем создания отдельной модели, которая хранит в себе
Офлайн
terabaytсогласен, я усложняю себе жизнь
зачем вам все данные хранить?
terabaytзначит ли это, что этот id может принадлежать двум записям, например (таблица snapshot):
“калоприемник” и все ид
Отредактировано KsimMiloff (Июнь 1, 2015 15:22:03)
Офлайн
KsimMiloffну да, а почему бы и нет?!
значит ли это, что этот id может принадлежать двум записям, например (таблица snapshot):
Офлайн
terabaytда ничего, все отлично. Спасибо
ну да, а почему бы и нет?!
Офлайн
есть ли способ преодолеть капчу? (recaptcha)
Офлайн
ajib6ept8,5% с Украины О_О
antigate.com
ajib6eptreCAPTCHA: Easy on Humans, Hard on Bots
или во второй версии что-то поменялось?
Офлайн