Форум сайта python.su
0
Всем доброго дня!
Вопрос по парсингу сайта с адресами торговых точек (хочу скачать соответственно все адреса):
http://magnit-info.ru/buyers/adds/1258/25/270
Проблема заключается в том, что адреса в выпадающем списке (также дублируются внизу страницы, класс .b-shops-list) выдаются только после выполнения запроса (видимо ajax). Соответственно с помощью requests у меня не получается вытянуть адреса (блок с классом .b-shops-list пустой до выполнения запроса). Собственно такая ситуация возникает много на каких сайтах, где используются яндекс или гугл карты.
Пока я сделал с помощью Selenium. Но работает очень долго! Пропарсить все районы и города, плюс закладываю 3-4 секунды, чтобы страница полностью загрузилась и выполнился запрос, занимает около 2 часов. Это уже с учетом того, что я это дело делаю в несколько процессов.
У меня есть большие пробелы в знаниях. Есть возможность как-то самостоятельно посылать эти динамические запросы и пользоваться requests, чтобы ускорить парсинг?
Офлайн
72
http://magnit-info.ru/functions/bmap/func.php методом POST отправляем форму
op:get_shops
SECTION_ID:1258
RID:25
CID:270
где
SECTION_ID Тип магазина
1257 Гипермаркеты Магнит
1258 Универсамы Магнит
1259 Магнит-Косметик
RID Регион
1389 Алтайский край
829 Архангельская область
22 Астраханская область
37 Белгородская область и т.д. выдирается из селекта на странице
CID Населенный пункт
281 Абинск и т.д. получаем GET запросом http://magnit-info.ru/functions/bmap/func.php?op=get_cities&ID=1389&SC=1259
где
SC = SECTION_ID Тип магазина
ID = RID Регион
прилетает в виде html, как опции для селекта
магазины прилетают в JSON, причем в одном из его атрибутов(sel) еще и дубликат в виде html для вставки в селект.
вообщем код там конечно отвратный.
Офлайн
0
PooH
http://magnit-info.ru/functions/bmap/func.php методом POST отправляем формуop:get_shopsSECTION_ID:1258RID:25CID:270где SECTION_ID Тип магазина1257 Гипермаркеты Магнит1258 Универсамы Магнит1259 Магнит-КосметикRID Регион1389 Алтайский край829 Архангельская область22 Астраханская область37 Белгородская область и т.д. выдирается из селекта на страницеCID Населенный пункт281 Абинск и т.д. получаем GET запросом http://magnit-info.ru/functions/bmap/func.php?op=get_cities&ID=1389&SC=1259гдеSC = SECTION_ID Тип магазинаID = RID Регион прилетает в виде html, как опции для селектамагазины прилетают в JSON, причем в одном из его атрибутов(sel) еще и дубликат в виде html для вставки в селект.вообщем код там конечно отвратный.
import requests to_send = { 'op': 'get_shops', 'SECTION_ID': 1258, 'RID': 22, 'CID': 163, } result = requests.post('http://magnit-info.ru/functions/bmap/func.php', data=to_send) addresses = result.json()
Отредактировано trarbish (Май 31, 2017 22:01:07)
Офлайн
0
И еще два похожих вопроса по другим сайтам:
1) https://www.perekrestok.ru/shops.
Сначала нужно выбрать регион, при клике на имя региона выполняется запрос https://www.perekrestok.ru/address/regionSiteList, который возвращает список регионов.
Кликаю на нужный регион, на странице появляются адреса магазинов. Но я не вижу, какой запрос отправляется, когда я кликаю на выбранный регион, чтобы это повторить в requests.
2) https://5ka.ru/stores/
С этим сайтом вопрос следующего плана. Адреса магазинов можно вернуть сделав такой запрос:
https://5ka.ru/api/stores/?type=bbox=1.7535,1.1563,100.3476,100.0781
Этот запрос был найден не в Network, а в Sources. Из этого у меня возник вопрос, как увидеть какие именно запросы выполняются на странице? Надо смотреть всегда и Network и Sources? Какой алгоритм действий, когда я вижу, что информация на странице подгружается динамически, и я хочу узнать, как именно она подгружается (какой запрос используется, чтобы я мог это повторить через тот же requests)? Или тут нет универсального совета, и каждый раз все по-разному? Что можно почитать, чтобы лучше понимать эту тему?
Отредактировано trarbish (Май 31, 2017 23:48:19)
Офлайн
72
В Chrome открываете “Инструменты разработчика”, вкладка Network, ставите фильтр по XHR, все запросы из жабаскриптов отображаются там. Ну а дальше пытаетесь понять ход мысли разработчиков сайта.
Офлайн
72
trarbishТам страница перегружается, чтобы увидеть запрос надо поставить галочку Preserve log и смотреть в фильтре Doc. Идентификатор региона передается в куке. Можно увидеть в запросе или вкладка Application, Storage -> Cookies, там видно region = N
Сначала нужно выбрать регион, при клике на имя региона выполняется запрос https://www.perekrestok.ru/address/regionSiteList, который возвращает список регионов.
Кликаю на нужный регион, на странице появляются адреса магазинов. Но я не вижу, какой запрос отправляется, когда я кликаю на выбранный регион, чтобы это повторить в requests.
Офлайн
72
trarbishВообще то на вкладке XHR https://5ka.ru/api/stores/around/?lat=55.794436&lon=37.545276&radius=15&active=true
2) https://5ka.ru/stores/
С этим сайтом вопрос следующего плана. Адреса магазинов можно вернуть сделав такой запрос:
https://5ka.ru/api/stores/?type=bbox=1.7535,1.1563,100.3476,100.0781
Офлайн
0
PooHДа, я так обычно и делаю. Но вот оказывается надо много всего дополнительно проверять. И в source зайти и куки посмотреть. Как-то пока единой картины не складывается, от чего плясать и что проверять в первую очередь, а что потом.
В Chrome открываете “Инструменты разработчика”, вкладка Network, ставите фильтр по XHR, все запросы из жабаскриптов отображаются там. Ну а дальше пытаетесь понять ход мысли разработчиков сайта.
Офлайн
0
PooHПо этому запросу не выводятся адреса магазинов, там только координаты. Плюс если поменять радиус с 15 на 10000, то ничего не изменится.
Вообще то на вкладке XHR https://5ka.ru/api/stores/around/?lat=55.794436&lon=37.545276&radius=15&active=true
Отредактировано trarbish (Июнь 1, 2017 23:03:42)
Офлайн
857
trarbishТут писал.
Из этого у меня возник вопрос, как увидеть какие именно запросы выполняются на странице?
Офлайн