Парсинг адреса из одной строки

Тема в разделе "Решение различных задач по парсингу", создана пользователем gans, 11 ноя 2015.

  1. gans

    gans Well-Known Member Пользователи

    Регистрация:
    21 апр 2014
    Сообщения:
    309
    Вроде бы, на первый взгляд, простая задача, а, столкнувшись, чешу затылок.

    Нужно спарсить адреса из одной строки и записать в разные колонки CSV информацию: область, район, населенный пункт, улицу и номер дома.

    На сайтах информация представлена примерно в таком виде:

    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
    (с заданием обычных границ внутри повторяющихся)
    308590, Белгородская обл., Белгородский р-н, п. Октябрьский
    309831, Белгородская обл., Алексеевский р-н, с. Глуховка
    309182, Белгородская обл., г. Губкин, ул. Логовая, 1
    или
    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
    624610, СВЕРДЛОВСКАЯ ОБЛАСТЬ, Г ВЕРХНЯЯ САЛДА, Д ЧЕРНУШКА
    или
    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
    НИЖЕГОРОДСКАЯ ОБЛ.,АРДАТОВСКИЙ Р-Н,С ХРИПУНОВО

    Видел, что похожую задачу на форуме предлагалось решить заменой запятых на разделители CSV. Но в моем случае это не подходит. В разных адресах может быть разное количество колонок. Населенные пункты могут быть разными(город, село, поселок, аул).

    Пока вижу решение такое: парсинг в отдельные колонки городов, сел, поселков и т.д. с последующим обединением этих колонок в одну- "Населенный пункт". Или может быть более элегантное решение?

    Натолкните pls на идею, как спарсить в отдельные колонки нужную информацию.
     
  2. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Здравствуйте.

    Нельзя ли парсить .../xozyajstva/..., .../companies/..., .../company/... отдельно друг от друга (разными проектами). Как я понял, у всех хозяйств одинаковый формат данных, так же одинаковый формат у /companies/ и у /company/. Думаю, такой вариант будет лучшим.

    С уважением к вам, Сергей.
     
  3. gans

    gans Well-Known Member Пользователи

    Регистрация:
    21 апр 2014
    Сообщения:
    309
    Конечно можно. Так и предполагается. Может не вполне ясно выразился, парсинг нужен только из одного ресурса. Эти ресурсы приведены только в качестве примера. Проблема состоит в разделении данных по колонкам.

    308590, Белгородская обл., Белгородский р-н, п. Октябрьский
    309831, Белгородская обл., Алексеевский р-н, с. Глуховка
    309182, Белгородская обл., г. Губкин, ул. Логовая, 1

    Как в вышеприведенном примере записать п. Октябрьский, с. Глуховка, г. Губкин в одну колонку?
     
  4. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Не вижу решения, кроме как: вырезать район из кода WEB-документа функцией поиск-замены (shift+ctrl+r) для приведения всех строк к одному формату:
    Код:
     обл.,{skip} р-н,|обл.,
    Затем парсить данные повторяющимися границами.
     
  5. cyoshi

    cyoshi Member Пользователи

    Регистрация:
    4 апр 2019
    Сообщения:
    69
    Добрый день!
    Могли бы мне тоже подсказать....
    задача похожая: границами парсинга могу выделить адрес.

    Приморский край, 692913, г Находка, пр-кт Находкинский, д. 51, корп. 1
    Приморский край, 692245, г Спасск-Дальний, ул Советская, д. 47, закусочная \
    Приморский край, 692245, г Спасск-Дальний, ул Советская, д. 47, закусочная \
    Приморский край, 692830, пгт Смоляниново, р-н Шкотовский, ул Деповская, д. 1
    Приморский край, г Находка
    Приморский край, 692830, пгт Смоляниново, р-н Шкотовский, ул Деповская, д. 1
    Приморский край, 692372, с Черниговка, р-н Черниговский, ул Пушкинская, д. 59, корп. а
    Приморский край, 692970, с Золотая Долина, р-н Партизанский, ул Ракетная, д. 1
    Приморский край, г Партизанск, ул Зарудничная, д. 40

    надо из этого адреса выделить название города, которое в последующем заменить на соответствующий ID и импортировать в базу сайта

    беда в том что на сколько я понял у адреса нет стандартного шаблона и периодические какие-то из составляющих (индекс) отсутствуют или меняются местами
    пробовал "подлезть" запятыми {skip}, {skip}, = не получилось (не понятно на каком количестве запятых будет находится город от начала)
    get тоже не пошел у меня (разные названия населенных пунктов: г х п птг .... все портят)

    из мыслей остался только [FILTERSTRINGS] но городов в обработке будет от 700 до 4000 мне кажется это существенно замедлит процесс.

    может есть какое-то более изящное решение?

    Подскажите пожалуйста...
     

Поделиться этой страницей