Ищу парсер. Наполнение БД

Необходимо наполнение объектами недвижимости. Много.

#16 15 октября 2012 в 23:44
Могу сделать базы из 2gis. Правда нет там описания организации и фоток. но все что можно вытянуть могу предложить, также могу сделать парсер или базу под конкретный проект.
#17 15 октября 2012 в 23:49

сделать парсер или базу под конкретный проект

maxisoft
Меня очень интересует maxisoft, скину тогда вам в личку
#18 16 октября 2012 в 10:16
Не вижу ничего трудного в парсинге чего угодно даже для начинающего программиста. Конечно бывают проблемы в виде капчи, как например у туту.ру, но это не должно останавливать. На написание парсера уходит максимум 3 дня, а затем уже как получится, 10к характеристик авто я спарсил за 1 час, а вот 100к расписаний с туту ждал 2 недели через прокси сервера. scratch
#19 16 октября 2012 в 11:00
Взял в работу парсинг карт организаций и понял что это довольно затруднительно
потомучто адрес который парсится может иметь разный вид:
450087, Россия, г. Уфа, ул. Набережная, 57
кто-то пишет просто
ул. Набережная, 57 (как бы в раздел Уфа-фирмы думая что так и надо)
где то люди указывают
г. Уфа, ул. Набережная, 57
где то
Россия, г. Уфа, ул. Набережная, 57

Поле получается парсим полный адрес full_addr
а значения разные, и в поле город
у нас разные значения попадают
450087
ул. Набережная, 57

Так что выбирать нужно для парсинга в карты только сайты с правильно структурированными данными для instantmaps
#20 16 октября 2012 в 11:35
Если только так:

450087, Россия, г. Уфа, ул. Набережная, 57

Gumoff
и так:

Россия, г. Уфа, ул. Набережная, 57

Gumoff

То проблемы быть не должно, а вот если:
Рассия. гор. Уфа дом на Набережной у аптеки, оф. Главный
Тогда, да, проблемы laugh
#21 16 октября 2012 в 11:47
вот так тоже очень много указывают
Россия, 450059, Республика Башкортостан, г.Уфа, ул.Рихарда Зорге, 5

в общем проблематично
и нужно чтобы на странице с данными о фирме адрес разбивался по отдельности
город
улица
дом

и парсить конкретно тогда можно разбивая поля парсинга на
город
улица
дом
#22 16 октября 2012 в 13:05

Россия, 450059, Республика Башкортостан, г.Уфа, ул.Рихарда Зорге, 5

Gumoff
а в чем собственно то проблема именно в таком адрес, вроде самый правильный адрес который есть
#23 16 октября 2012 в 13:31
Разбиваем по запятым:
если г. — город,
ул. — улица,
после улицы дом,
много цифр — индекс,
остались два непонятных, но Уфа в России, поэтому республика нам ни к чему, проверяем оба этих поля на вхождение в список стран для парсинга и берём подошедшее.
Если вы парсите с разделов, то сначала пройтись по всей структуре и определить город этого раздела и смотреть уже только на конкретный адрес.
Если на странице есть карта с координатами, определяете адрес по апи.

Вы показываете самые чёткие и ровные примеры, которые спарсить на ура можно, а вы определите координаты и конкретный адрес моего примера?

Рассия. гор. Уфа дом на Набережной у аптеки, оф. Главный

lokanaft
#24 16 октября 2012 в 13:37

Рассия. гор. Уфа дом на Набережной у аптеки, оф. Главный

lokanaft
такое только в отдельный список и ручками.
#25 16 октября 2012 в 14:03


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

Вы показываете самые чёткие и ровные примеры, которые спарсить на ура можно, а вы определите координаты и конкретный адрес моего примера?

Рассия. гор. Уфа дом на Набережной у аптеки, оф. Главный

lokanaft

lokanaft

дак это пример а на самом деле всё не по шаблону

есть такое Россия,, ул.Пермская — по запятым пролетели
есть Уфа — то есть без г. указано
тоже самое с улицами кто ставит ул. а кто нет
есть ул.Пермская 9 — дом указан без запятой
индекс я как понял вообще не нужен


остались два непонятных, но Уфа в России, поэтому республика нам ни к чему, проверяем оба этих поля на вхождение в список стран для парсинга и берём подошедшее.

lokanaft
Какие два(оба)этих поля? Поле одно — Адрес: Россия, индекс, республика, город, улица, дом, офис
причем всё в произвольном порядке представлено как текстовая строка в одном единственном поле
<tr class=firm_info></tr>
#26 16 октября 2012 в 14:44
На пролёт запятых вообще до лампочки.
Значит пробиваете первый текст по списку стран, следующее по списку городов, цифра — это дом.
Или парсите в несколько этапов, сначала наполняете базу и только со строкой адреса, а затем перебираете всё постепенно, пока не достигните нужного результата.

Пока не добился нужного результата, приходилось добавлять новые условия, ибо не всё по полочкам.
  1. preg_match('|<title>Характеристики ([^\(]*)\(([^,]*),([^\)]*)\)([^<]*)<\/title>|is', $output, $head);
  2. preg_match('#<li class="selected"> <strong>([^<]*)<\/strong>(?:.*?)<br \/><strong>(?: <span class="price">([0-9\s]+)<span|)#is', $output, $prais);
  3. preg_match('#padding:0.2em 0.5em;font-size:93%;">(Снят)#is', $output, $proiz);
  4. preg_match('#padding:0.2em 0.5em;font-size:93%;">(Не продается)#is', $output, $prodazh);
  5. $harki['proiz'] = $proiz[1] ? 0 : 1;
  6. $harki['prodazh'] = $prodazh[1] ? 0 : 1;
  7. $harki['model'] = addslashes(trim(str_replace($prais[1], '', $head[1])));
  8. $harki['complekt'] = $prais[1];
  9. if(($proiz[1] || $prodazh[1]) && !$harki['complekt']){
  10. if(strpos($harki['model'], '.')){
  11. $harki['complekt'] = trim(substr($harki['model'], strpos($harki['model'], '.') - 2));
  12. $harki['model'] = addslashes(trim(substr($harki['model'], 0, strpos($harki['model'], '.') - 2)));
  13. }else{
  14. if(strpos($harki['model'], 'серия') && !strstr($harki['model'], 'Специальная серия') && !strstr($harki['model'], 'Особая серия')){
  15. $seriya = explode('серия', $harki['model']);
  16. $harki['model'] = $seriya[0].'серия';
  17. $harki['complekt'] = $seriya[1];
  18. }else{
  19. preg_match('|<h1>([^<]*)</h1>|is', $output, $h1);
  20. $h1 = trim($h1[1]);
  21. while(true){
  22. echo $h1.'='.$harki['model']."\n";
  23. if(strstr($harki['model'], $h1)){
  24. $harki['complekt'] = str_replace($h1, '', $harki['model']);
  25. $harki['model'] = $h1;
  26. break;
  27. }else{
  28. if(!strstr($h1, ' '))break;
  29. $h1 = trim(substr($h1, 0, strrpos($h1, ' ')));
  30. }
  31. }
  32. }
  33. }
  34. }
  35. $harki['pokolen'] = $head[2];
  36. $harki['goda'] = trim($head[3]);
  37. $goda = explode(' - ', $harki['goda']);
  38. if(strstr($goda[0],$goda[1]))
  39. $harki['goda'] = $goda[0];
  40. $harki['cena'] = $prais[2];
  41. preg_match('#(.*) ([^ ]*)#is', $harki['complekt'], $prais_com);
  42. $harki['complekt_dvig'] = $prais_com[1];
  43. $harki['complekt_name'] = $prais_com[2];
  44. if(strstr($harki['complekt_dvig'], 'Luxury')){
  45. $harki['complekt_dvig'] = str_replace('Luxury ', '', $prais_com[1]);
  46. $harki['complekt_name'] = 'Luxury '.$prais_com[2];
  47. }
  48. if(strstr($harki['complekt_dvig'], 'Специал')){
  49. $spec = explode('Специал', $harki['complekt']);
  50. $harki['complekt_dvig'] = $spec[0];
  51. $harki['complekt_name'] = 'Специал'.$spec[1];
  52. }
  53. if(strstr($harki['complekt_dvig'], 'Особ')){
  54. $spec = explode('Особ', $harki['complekt']);
  55. $harki['complekt_dvig'] = $spec[0];
  56. $harki['complekt_name'] = 'Особ'.$spec[1];
  57. }
#27 16 октября 2012 в 15:05


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


Пока не добился нужного результата, приходилось добавлять новые условия, ибо не всё по полочкам.
  1. preg_match('|Характеристики ([^\(]*)\(([^,]*),([^\)]*)\)([^
  2.  

lokanaft

поле одно и в нем например Адрес: Первомайская 79/4-оф.15
как пробить это поле по странам, городам, улицам?
#28 16 октября 2012 в 15:25
Если там такой адрес, значит он уже в категории с названием города, спарсите категории сначала. Номера офисов на карте не проставишь, поэтому для определения координат берём город из категории, улицу и следующие за ней цифры. Вы сначала соберите все адреса строкой в базу, потом сами всё поймёте как их расшифровывать.
У меня была строка со словами и пробелами, в ней была и марка, и модель, и комплектация (которую надо было разбить ещё и на её название и двигатель). Прогоняя эту строчку и добавляя новые условия, я получил нужный мне результат.
#29 16 октября 2012 в 15:30


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

lokanaft

вы про УРЛ адреса ?

толи я непонимаю толи вы

Есть фирмы из одной категории "Бани"
в категории Бани ссылки на компании-бани
на странице компании-баня1
Адрес: Первомайская 79
на странице компании-баня2
Адрес: г. Уфа Севастопольская, 46/2
на странице компании-баня3
Адрес: Россия, 450786, Уфа улица Узбекская 46/2
на странице компании-баня4
Адрес: 450786, Уфа, Узбекская 46/2
на странице компании-баня5
Адрес: частный дом №5 на Большой Рязанской

Видите что написание адреса не было шаблонным, тут правил обработки не соберешь ?!
#30 16 октября 2012 в 15:39
На самом деле спарсить информацию нет проблемы, а вот правильно ее обработать тут возникают проблемы… такие как дубли организаций… неправильные адреса, различные форматы адресов… откровенные ловушки от яндекса(типа студий А. Лабедева)… сопоставление категорий и т.п… еще одна важная проблема телефон у филиала(нет импорта)… пока более правильный вариант загрузить результаты парсинга, а потом шлифовать…
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.