Каким образом можно извлечь информацию с сайта Росреестра?

Как можно извлечь и сохранить в таблицу адресную информацию (например, "Саратовская обл, р-н Перелюбский в 0.5 км юго-западнее с.Перелюб и в 1 км юго-западнее х.Бригадировка"), находящуюся в элементе с классом "expanding-box_content", с веб-сайта росреестра, используя Python и библиотеки requests и BeautifulSoup?
  • 29 июня 2024 г. 9:41
Ответы на вопрос 5
Для того чтобы извлечь информацию с сайта Росреестра и сохранить ее в таблицу, можно использовать следующий код на Python с использованием библиотек requests и BeautifulSoup:

```python
import requests
from bs4 import BeautifulSoup

url = 'https://rosreestr.ru/wps/portal/cc_pr_viewer?'
params = {
    'uidparam': 'corner'
}

response = requests.get(url, params=params)
soup = BeautifulSoup(response.content, 'html.parser')

address_info = soup.find('div', class_='expanding-box_content').text

print(address_info)
```

Этот код отправит запрос на указанный URL с указанными параметрами, получит содержимое страницы, найдет элемент с классом 'expanding-box_content' и извлечет текст из него, содержащий адресную информацию. Далее эту информацию можно сохранить в таблицу или обработать как необходимо.
Правило номер ноль при парсинге: при любых проблемах сохраняй на диск то, что тебе пришло в ответе от сервера . 
То, что ты видишь в браузере - это не обязательно то же самое, что браузер получил от сайта.
То, что браузер получил от сайта - это не обязательно то же самое, что requests получит от сайта.

В данном случае, и requests и браузер получают в ответе вот это:
<body style="height: 100%; width:100%;">
<div id=app style="height: 100%; width:100%;"></div>
<script src=js/chunk-vendors.c1d200da.js></script>
<script src=js/chunk-common.adcda62e.js></script>
<script src=js/chunk-esri.caf28189.js></script>
<script src=js/index.ca134891.js></script>
</body>

Как видишь, нужного элемента тут просто нет, потому что он создаётся динамически, через JavaScript. А BS не выполняет скрипты.

Варианта только два:
1. Выяснять, каким запросом сайт подтягивает данные для этого, научиться этот запрос делать самостоятельно и вытаскивать искомые данные из полученного. Медленно и трудно на подготовительном этапе, зато потом работает сравнительно быстро... если, конечно, сайт защиту от парсинга не поставит.
2. Запускать управляемый браузер, дать ему загрузить страницу и выполнить скрипты, а потом уже искать нужные данные. Быстрое решение в плане разработки, но более медленное и ресурсоёмкое в дальнейшем использовании.
для безграмотных парсеров поиск росреестра: 

https://pkk.rosreestr.ru/api/features/?text=52.929979122449325+87.97534995053527&tolerance=2&types=[2,3,4,1,21,5,10]


вернет он:
{
  "total": 5,
  "results": [
    {
      "sort": 42120102004,
      "type": 2,
      "center": {
        "y": 6970386.423234693,
        "x": 9794346.776440643
      },
      "attrs": {
        "cn": "42:12:0102004",
        "id": "42:12:102004"
      },
      "extent": {
        "xmax": 9795238.11208436,
        "ymin": 6969855.0191011,
        "ymax": 6971012.594670494,
        "xmin": 9793163.65570717
      }
    },
    {
      "sort": 4212,
      "type": 3,
      "center": {
        "y": 6950818.390114815,
        "x": 9810172.497224698
      },
      "attrs": {
        "cn": "42:12",
        "id": "42:12",
        "name": "Таштагольский"
      },
      "extent": {
        "xmax": 9934125.20280487,
        "ymin": 6829546.777098134,
        "ymax": 7049761.803853536,
        "xmin": 9674999.04333556
      }
    },
    {
      "sort": 42,
      "type": 4,
      "center": {
        "y": 7328079.667631133,
        "x": 9706880.109152177
      },
      "attrs": {
        "cn": "42",
        "id": "42",
        "name": "Кемеровский"
      },
      "extent": {
        "xmax": 9952694.29980072,
        "ymin": 6829546.774971992,
        "ymax": 7726492.011682568,
        "xmin": 9401209.32240626
      }
    },
    {
      "sort": 4212010200400025,
      "type": 1,
      "center": {
        "y": 6970070.760976506,
        "x": 9793366.321078256
      },
      "attrs": {
        "address": "Кемеровская область, р-н. Таштагольский, пгт. Шерегеш, ул. Лесная, д. 3",
        "cn": "42:12:0102004:25",
        "id": "42:12:102004:25"
      },
      "extent": {
        "xmax": 9793403.39482761,
        "ymin": 6970010.120180669,
        "ymax": 6970129.685452594,
        "xmin": 9793328.57189643
      }
    },
    {
      "sort": 4212010200401338,
      "type": 5,
      "center": {
        "y": 6970067.466684912,
        "x": 9793370.470713653
      },
      "attrs": {
        "address": "Российская Федерация, Кемеровская область-Кузбасс, Таштагольский муниципальный район, Шерегешское городское поселение, пгт. Шерегеш, ул. Лесная, дом 3",
        "cn": "42:12:0102004:1338",
        "id": "42:12:102004:1338"
      },
      "extent": {
        "xmax": 9793387.58929377,
        "ymin": 6970050.160377153,
        "ymax": 6970087.472030083,
        "xmin": 9793353.0083641
      }
    }
  ]
}

парсится такое на раз-два.

надеюсь пояснять про то какое поле что значит не надо?
Правило номер ноль при парсинге: при любых проблемах сохраняй на диск то, что тебе пришло в ответе от сервера . 
То, что ты видишь в браузере - это не обязательно то же самое, что браузер получил от сайта.
То, что браузер получил от сайта - это не обязательно то же самое, что requests получит от сайта.

В данном случае, и requests и браузер получают в ответе вот это:
<body style="height: 100%; width:100%;">
<div id=app style="height: 100%; width:100%;"></div>
<script src=js/chunk-vendors.c1d200da.js></script>
<script src=js/chunk-common.adcda62e.js></script>
<script src=js/chunk-esri.caf28189.js></script>
<script src=js/index.ca134891.js></script>
</body>

Как видишь, нужного элемента тут просто нет, потому что он создаётся динамически, через JavaScript. А BS не выполняет скрипты.

Варианта только два:
1. Выяснять, каким запросом сайт подтягивает данные для этого, научиться этот запрос делать самостоятельно и вытаскивать искомые данные из полученного. Медленно и трудно на подготовительном этапе, зато потом работает сравнительно быстро... если, конечно, сайт защиту от парсинга не поставит.
2. Запускать управляемый браузер, дать ему загрузить страницу и выполнить скрипты, а потом уже искать нужные данные. Быстрое решение в плане разработки, но более медленное и ресурсоёмкое в дальнейшем использовании.
для безграмотных парсеров поиск росреестра: 

https://pkk.rosreestr.ru/api/features/?text=52.929979122449325+87.97534995053527&tolerance=2&types=[2,3,4,1,21,5,10]


вернет он:
{
  "total": 5,
  "results": [
    {
      "sort": 42120102004,
      "type": 2,
      "center": {
        "y": 6970386.423234693,
        "x": 9794346.776440643
      },
      "attrs": {
        "cn": "42:12:0102004",
        "id": "42:12:102004"
      },
      "extent": {
        "xmax": 9795238.11208436,
        "ymin": 6969855.0191011,
        "ymax": 6971012.594670494,
        "xmin": 9793163.65570717
      }
    },
    {
      "sort": 4212,
      "type": 3,
      "center": {
        "y": 6950818.390114815,
        "x": 9810172.497224698
      },
      "attrs": {
        "cn": "42:12",
        "id": "42:12",
        "name": "Таштагольский"
      },
      "extent": {
        "xmax": 9934125.20280487,
        "ymin": 6829546.777098134,
        "ymax": 7049761.803853536,
        "xmin": 9674999.04333556
      }
    },
    {
      "sort": 42,
      "type": 4,
      "center": {
        "y": 7328079.667631133,
        "x": 9706880.109152177
      },
      "attrs": {
        "cn": "42",
        "id": "42",
        "name": "Кемеровский"
      },
      "extent": {
        "xmax": 9952694.29980072,
        "ymin": 6829546.774971992,
        "ymax": 7726492.011682568,
        "xmin": 9401209.32240626
      }
    },
    {
      "sort": 4212010200400025,
      "type": 1,
      "center": {
        "y": 6970070.760976506,
        "x": 9793366.321078256
      },
      "attrs": {
        "address": "Кемеровская область, р-н. Таштагольский, пгт. Шерегеш, ул. Лесная, д. 3",
        "cn": "42:12:0102004:25",
        "id": "42:12:102004:25"
      },
      "extent": {
        "xmax": 9793403.39482761,
        "ymin": 6970010.120180669,
        "ymax": 6970129.685452594,
        "xmin": 9793328.57189643
      }
    },
    {
      "sort": 4212010200401338,
      "type": 5,
      "center": {
        "y": 6970067.466684912,
        "x": 9793370.470713653
      },
      "attrs": {
        "address": "Российская Федерация, Кемеровская область-Кузбасс, Таштагольский муниципальный район, Шерегешское городское поселение, пгт. Шерегеш, ул. Лесная, дом 3",
        "cn": "42:12:0102004:1338",
        "id": "42:12:102004:1338"
      },
      "extent": {
        "xmax": 9793387.58929377,
        "ymin": 6970050.160377153,
        "ymax": 6970087.472030083,
        "xmin": 9793353.0083641
      }
    }
  ]
}

парсится такое на раз-два.

надеюсь пояснять про то какое поле что значит не надо?
Похожие вопросы