Форум сайта python.su
0
К примеру есть такой словарь:
{'City1': {'www.site1.com':{'Name1':'Address1'}, {'Name2':'Address2'} }, {'www.site2.com':{'Name11':'Address11'}, {'Name3':'Address3'} }, {'www.site3.com':{'Name22':'Address22'}, {'Name4':'Address4'} }, {'City2': { .......}, }
Отредактировано TitanFighter (Ноя. 17, 2015 21:54:14)
Офлайн
221
словарь это не упорядоченная структура. Так как site1 и site2 здесь для примера,а реальные данные будут другими, то такая схема не сработает.
Другое дело OrderedDict из модуля collections, он упорядочен. А раз упорядочен то при условии что значения в него были добавлены в корректном порядке, значит и итерация по ключам такого словаря будет предсказуемая.
Так к примеру если Name3 был добавлен третьим для site1, то он будет в списке ключей словаря с индексом 2. всегда т.е. {..}.keys() == ‘Name3’ и точно также для других site2 3 и тп
Офлайн
857
TitanFighterЭто даже не словарь.
К примеру есть такой словарь:
TitanFighterВообще, похоже на неправильно спроектированный алгоритм. Сначала что-то наворотил, а потом пытаешься это разобрать.
Получить из site1: Name1 и Address1
Получить из site2: Name11 и Address11
score = compare('Name1 | Address1', ‘Name11 | Address11’)
if score > 70: # do something
повторяем цикл, только уже с site2: Name3 и Address3
потом переходим в site3 и тд. ходим по кругу для каждого site1\Name*
Отредактировано py.user.next (Ноя. 18, 2015 03:10:15)
Офлайн
0
py.user.nextХм. Чем не словарь? Не.. Конечно если придираться, то я и сам с вами соглашусь, что не словарь. Но стоит ли придираться?…
Это даже не словарь.
py.user.nextЯ еще не воротил) Только думаю) По этому наперед спросил, можно ли так сделать)
Вообще, похоже на неправильно спроектированный алгоритм. Сначала что-то наворотил, а потом пытаешься это разобрать.
Отредактировано TitanFighter (Ноя. 18, 2015 03:52:27)
Офлайн
186
В первом приближении я бы делал как-то так:
[ {"url":url, "text":"", "title":"",....}, ..... {"url":url, "text":"", "title":"",....}, ]
Офлайн
857
TitanFighterВот это запусти в интерпретаторе
Хм. Чем не словарь?
{'City1': {'www.site1.com':{'Name1':'Address1'}, {'Name2':'Address2'} },}
TitanFighterЕсли неконкретно спрашиваешь, то и ответ получишь неконкретный. А один неконкретный ответ равен множеству конкретных вариантов.
Но стоит ли придираться?
TitanFighterНужно сделать функцию для каждого вида сайта. Один вид - одна функция.
Есть несколько сайтов, с которых парсится информация. К-во сайтов меняется в разное время от 2х до 5.
TitanFighterНужно сделать сущность “заведение”, в которой будет хранится полученная информация.
Со всех сайтов парсится один и тот же вид информации:
Город - Заведение - Адрес - Ссылка_на_заведение.
Отредактировано py.user.next (Ноя. 19, 2015 01:33:27)
Офлайн
0
py.user.nextТаки натупил
Вот это запусти в интерпретаторе
{'City1': {'www.site1.com':{'Name1':'Address1'},
{'Name2':'Address2'}
},}
скобки лишние впихнул. Пора заканчивать с ночной работой.py.user.nextНа данный момент у меня реализовано по одной функции для каждого сайта. Вот только про “вид” не уловил. Имеется ввиду тематика сайтов? Кинотеатры, рестораны, клубы и тд?
Нужно сделать функцию для каждого вида сайта. Один вид - одна функция.
py.user.nextУже сделано.
Нужно сделать сущность “заведение”, в которой будет хранится полученная информация.
py.user.nextРезюмирую: нужно всю информацию со всех сайтов залить в БД и там уже ее проверить на дубли и не нужно заморачиваться с временными\промежуточными хранилищами в виде словарей\списков. Правильно?
Закачиваешь все заведения, а потом фильтруешь дубликаты. Там может быть миллион заведений, в котором первое и последнее явлются дубликатами. Поэтому в памяти всё хранить - неправильно, а на ходу отбрасывать дубликаты - тоже требует ненужное хранилище для просмотренных.
Отредактировано TitanFighter (Ноя. 19, 2015 12:51:51)
Офлайн
857
TitanFighterНа одном сайте эта информация хранится в одном виде, на другом сайте эта информация хранится в другом виде. Там возникает соблазн в том, чтобы учесть в одной функции особенности всех сайтов сразу. Вот так нельзя делать. Отдельный сайт должен обрабатываться отдельной функцией, даже если они очень похожи.
Вот только про “вид” не уловил. Имеется ввиду тематика сайтов? Кинотеатры, рестораны, клубы и тд?
TitanFighterМожно через pickle сохранять их. Главное, чтобы всё в памяти не держать, потому что и сайтов бывает много, и страниц на них. У меня один раз сайт парсился 8 часов без перерыва (а расчитывал я на час-два). Естественно, всё сразу сохранялось на диск, потому что будь оно в памяти, при малейшей ошибке всё бы пропало.
Резюмирую: нужно всю информацию со всех сайтов залить в БД и там уже ее проверить на дубли и не нужно заморачиваться с временными\промежуточными хранилищами в виде словарей\списков. Правильно?
TitanFighterДелать до добавления - это не очень правильно. Во-первых, дубликаты не всегда есть (лишний анализ), во-вторых, задача удаления дубликатов никак не связана с закачиванием записей. То есть задача закачивания записей - это одна самостоятельная задача, задача удаления дубликатов из записей - это другая самостоятельная задача. Поэтому они должны выполняться по отдельности.
Предполагал проверку делать до добавления в БД, а о том, что стоит ее делать после добавления даже и не думал.
Отредактировано py.user.next (Ноя. 19, 2015 14:03:44)
Офлайн