Історія про парсинг одного aspx сайту
Передісторія
Взагалі-то я верстальник. І веб-розробник, але в цій стороні скілл не настільки високий, лише роблю стерпні сайти на wordpress'і. З будь-якими суворими curl запитами до цього не стикалася. І з aspx сайтами теж. Але ж цікаво!(вилилося це в місяць вечорів з php і кілька безсонних ночей. І море задоволення, звичайно ж)
Спочатку були спроби кросдоменних запитів за допомогою JavaScript, але в цій стороні нічого не вийшло. Потім несміливі розкопки осторонь phantomjs та іншої емуляції поведінки користувача. Але, виявилося, що навичок js у мене все ж таки не вистачає. В результаті все працює на curl запитах, що йдуть від php сторінки.
Отримання інформації
Авторизація вийшла досить швидко, і заробила більш-менш без проблем.Самою неприємною проблемою виявилося обмеження за кількістю неправильних вводів пароля: двічі — і дзвони адміну, відновлюй доступ.
А ось із переходом на потрібне місто вперто не виходило. Перехід проводився, але кудись не туди, хоча запит POST був виконаний за всіма правилами. Виявилося, що preg_match некоректно працює з дуже великою кількістю символів. Від цього рятує вказівку директиви
Спочатку отримуємо початковий стан сторінки (оскільки ми ще не залогінені, то потрапляємо на сторінку логіна), і видираємо звідти viewstate:
Тепер, вже маючи на руках актуальний зліпок стану сторінки, вводимо логін та пароль. (postdata - це параметр POST запиту до сторінки, підглянути можна в тому ж firebug).
ми отримуємо ми отримуємо в результаті переглядудержави потрібної нам сторінки.
Саме на цьому моменті і виникала проблема з непрацюючим preg_replace, але рішення — дякую хабру — знайшлося. Є!Тепер можна переходити на заявки для потрібного міста та займатися вже парсингом.
Коли вже нарешті розумієш, що робиш, все досить просто: треба перейти саме за тим посиланням, перегляддержави якого отримали в минулому кроці.
Обробка інформації
Дісталися, починаємо парсити. Перший досвід був пов'язаний із регулярними виразами. На жаль, php на хостингу якось дуже дивно працював із багаторядковими висловлюваннями, і не видирав повністю select (з усіма option), як би я його не вмовляла (при цьому на локалці все працювало).
Гуглимо, думаємо, читаємо. Знаходимо Nokogiri. Ви знаєте, легко і стоїть! Дійсно швидка та приємна в роботі річ:
Краса та оформлення
Раптом з'явилася дуже дивна проблема: власне замовник із виразним невдоволенням користувався версією розробника без css, js та інших наворотів. Точніше, він взагалі не розумів, як цим можна користуватися.
Шукаємо інформацію про XHR-запити.
P.S. Ось тільки мене запитали, чи можна за допомогою цього клієнта змінювати дані в системі роботи із заявками. Схоже, це була загроза.
Хардкорна конфа за С++. Ми запрошуємо лише профі.