Спарсить урл если рядом есть текст

Регистрация
05.02.2016
Сообщения
9
Благодарностей
0
Баллы
1
Всем привет. Помогите новичку разобраться с тонкостями (может быть и элементарными). Собственно сайт https://m.avito.ru/tyumen/kvartiry?bt=0 .

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

Проблема парсить только "новые" урлы. Т.е. стоит задача парсить урлы опубликованные "Сегодня" (есть такая строка в объявлениях). Либо парсить все в Список1 (глубину страниц ограничим) и как то сравнивать с уже напарсенным за все время Списком2 и удалять из Списка1, если в Списке2 есть такая строчка (это вариант нравится больше, плюс такого способа решается еще проблема с поднятыми объявлениями).
Помогите понять какой из способов легче выполним, т.к. понятия не имею как в Зенно реализовать ни тот ни другой. Уписаюсь от счаться если еще и тыкнете носом в реализацию чего-то подобного :-)
 

zennomoves

Client
Регистрация
05.12.2011
Сообщения
235
Благодарностей
72
Баллы
28
Тот способ, который тебе нравится, можно решить так:

1. Список со старыми ссылками объединить в переменную.
2. При парсинге новых ссылок искать их в объединённом списке и если их там нет, то добавлять их в список сендера и в список старых ссылок, чтобы в следующий раз их уже не брать
 
  • Спасибо
Реакции: doc

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
2й вариант не проще, но правильнее. И ты его достаточно подробно расписал. В чем проблема?
 
Регистрация
05.02.2016
Сообщения
9
Благодарностей
0
Баллы
1
2й вариант не проще, но правильнее. И ты его достаточно подробно расписал. В чем проблема?
Логику-то описал, но знаний не хватает реализовать. Я вообще новичок в этом деле (хотя и интересное это дело zennoposter :-) )

Тот способ, который тебе нравится, можно решить так:
1. Список со старыми ссылками объединить в переменную.
2. При парсинге новых ссылок искать их в объединённом списке и если их там нет, то добавлять их в список сендера и в список старых ссылок, чтобы в следующий раз их уже не брать
1 сделал. Но вот 2 тыкался мыкался, и сколько по поиску не искал ничего подобного не нашел.
И проверку не знаю как реализовать и условие не найду где поставить :(
Вот что на данный момент есть (я нуб в этом деле, можно похихикать, но сильно не пинайте):


Прошу хоть намекнуть через какие модули/функции Зенно это делается. Есть 300 руб на киви, могу закинуть за посильную помощь :-)
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
я запутался в твоих списках. Выше вполне подробно всё описали. Я тоже попробую на словах прикинуть.
список1 - это уже отработанные уникальные урлы, которые мы потом будем гонять для постинга.
список2 - список, в который будем ложить спарсенные. После того, как спарсили урлы и положили их в список2 мы начинаем брать строку с удалением из этого списка. Взяли строку-урл, положили в переменную1. Затем берем переменную1 и обрабатываем через экшн обработки текста функцию эскейп строки и кладем в переменную2. Объединили список1 в перемнную3. Через экшн обработки текста через regex ищем вхождение переменной2 в объедененном списке переменной3, а результат кладем в переменную2. Теперь проверяем. Если переменная2 пуста - значит ссылка новая и мы добавляем строку-переменную1 в список1 и берем след строку. Если не пуста - значит ссылка уже у нас такая есть и мы без доп. действий берем след строку. И так по кругу
 
  • Спасибо
Реакции: prevestialexander

zennomoves

Client
Регистрация
05.12.2011
Сообщения
235
Благодарностей
72
Баллы
28
Не переживай, тут все необразованные в прошлом (как впрочем и в любом другом месте).

Как бы я реализовал логику работы (в PM не полезу скринить, так объясню):

1. Я так понял, переход по страницам, с которых парсить, ты и сам организовать сумел, поэтому об этом ничего говорить не стану.
2. У тебя есть список под старые ссылки, который уже содержит спарсенные ссылки или пока ещё пустой, если ты только приступил к выполнению "миссии" - он в файле на диске
3. Создаёшь список в проекте и привязываешь его к файлу со старыми ссылками на диске таким образом, чтобы изменения списка сохранялись в файл
4. Объединяешь этот список в переменную - т.е. это простынка текста, содержащая все строки изначального списка. С ней работать можно как с простым текстом, а не списком
5. Парсим необходимые ссылки (у тебя с этим тоже проблем нет) и ищем поштучно в той переменной, в которую мы объединили список. Это делается при помощи модуля работы с текстом. Вместо текста будет переменная с объединённым списком, а вместо регулярки, которую нужно найти, одна из спарсенных ссылок (в виде переменной, в которую ты её поместишь перед этим). На выходе этого модуля будет переменная, в которой после работы будет либо найденная ссылка, либо "пусто". Вот эту переменную мы и будем проверять на наличие присутствия. Делается это в модуле условия:

'Полученная переменная после поиска в одинарных кавычках'==''

При положительном исходе ссылки нет в списке старых ссылок и мы добавляем её туда (она автоматически сохранится в файл на диск) и добавляем её же в список сендера.

Если исход отрицательный, то просто берём новую ссылку для поиска, потому что нам эта уже не нужна - она есть в файле старых ссылок.

P.S. Тут есть один важный момент:

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

bizon2
bizon51

Если искать bizon, то найдёт, а фактически там другие ники.

Чтобы обойти это, объединяем список в переменную со своим уникальным разделителем. Искать будем регуляркой, начинающейся с нашего запроса и заканчивающейся нашим уникальным разделителем. Забирать будем все совпадения в отдельный список. Потом поштучно будем сравнивать наш запрос со строками получившегося списка на предмет полного совпадения при помощи модуля условия как это было описано выше, только вместо пустоты будут подставляться элементы полученного списка совпадений. Здесь возможно совпадение по окончанию, доработать нужно.

Доработал. На самом деле всё просто. Пересохраняем нашу переменную с объединённым списком, добавив перед ней и после неё наш уникальный разделитель. Парсить будем регуляркой, начинающейся с нашего разделяителя+запрос, а после неё наш разделитель. Перед сравнением будем вычищать разделитель из строк списка.

В случае со ссылками - они все индивидуальны, правильно? Т.е. одна ссылка не может быть частью другой или в твоём случае такой вариант возможен?
 
Последнее редактирование:
Регистрация
05.02.2016
Сообщения
9
Благодарностей
0
Баллы
1
zennomoves , doc , друзья спасибо огромное! Таки все получилось. Вы оба впринципе один алгоритм описывали, но каждый уделил внимание разным деталям, по одному ответу не разобрался бы) Кидайте оба киви кошели в личку :-)

zennomoves ссылки могут быть похожими, но на конце каждой уникальный id, и составными частями тоже быть не могут.
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)