Как можно извлечь и сохранить в таблицу адресную информацию (например, "Саратовская обл, р-н Перелюбский в 0.5 км юго-западнее с.Перелюб и в 1 км юго-западнее х.Бригадировка"), находящуюся в элементе с классом "expanding-box_content", с веб-сайта росреестра, используя Python и библиотеки requests и BeautifulSoup?
Для того чтобы извлечь информацию с сайта Росреестра и сохранить ее в таблицу, можно использовать следующий код на 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 } } ] }
парсится такое на раз-два.
надеюсь пояснять про то какое поле что значит не надо?